t-set_si.c
上传用户:qaz666999
上传日期:2022-08-06
资源大小:2570k
文件大小:2k
源码类别:

数学计算

开发平台:

Unix_Linux

  1. /* Test mpf_set_si and mpf_init_set_si.
  2. Copyright 2000, 2001, 2003 Free Software Foundation, Inc.
  3. This file is part of the GNU MP Library.
  4. The GNU MP Library is free software; you can redistribute it and/or modify
  5. it under the terms of the GNU Lesser General Public License as published by
  6. the Free Software Foundation; either version 3 of the License, or (at your
  7. option) any later version.
  8. The GNU MP Library is distributed in the hope that it will be useful, but
  9. WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
  10. or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
  11. License for more details.
  12. You should have received a copy of the GNU Lesser General Public License
  13. along with the GNU MP Library.  If not, see http://www.gnu.org/licenses/.  */
  14. #include <stdio.h>
  15. #include <stdlib.h>
  16. #include "gmp.h"
  17. #include "gmp-impl.h"
  18. #include "tests.h"
  19. void
  20. check_data (void)
  21. {
  22.   static const struct {
  23.     long       x;
  24.     mp_size_t  want_size;
  25.     mp_limb_t  want_data[2];
  26.   } data[] = {
  27.     {  0L,  0 },
  28.     {  1L,  1, { 1 } },
  29.     { -1L, -1, { 1 } },
  30. #if GMP_NUMB_BITS >= BITS_PER_ULONG
  31.     { LONG_MAX,  1, { LONG_MAX, 0 } },
  32.     { -LONG_MAX,  -1, { LONG_MAX, 0 } },
  33.     { LONG_HIGHBIT,  -1, { ULONG_HIGHBIT, 0 } },
  34. #else
  35.     { LONG_MAX,  2, { LONG_MAX & GMP_NUMB_MASK, LONG_MAX >> GMP_NUMB_BITS } },
  36.     { -LONG_MAX,  -2, { LONG_MAX & GMP_NUMB_MASK, LONG_MAX >> GMP_NUMB_BITS }},
  37.     { LONG_HIGHBIT,  -2, { 0, ULONG_HIGHBIT >> GMP_NUMB_BITS } },
  38. #endif
  39.   };
  40.   mpf_t  x;
  41.   int    i;
  42.   for (i = 0; i < numberof (data); i++)
  43.     {
  44.       mpf_init (x);
  45.       mpf_set_si (x, data[i].x);
  46.       MPF_CHECK_FORMAT (x);
  47.       if (x->_mp_size != data[i].want_size
  48.           || refmpn_cmp_allowzero (x->_mp_d, data[i].want_data,
  49.                                    ABS (data[i].want_size)) != 0
  50.           || x->_mp_exp != ABS (data[i].want_size))
  51.         {
  52.           printf ("mpf_set_si wrong on data[%d]n", i);
  53.           abort();
  54.         }
  55.       mpf_clear (x);
  56.       mpf_init_set_si (x, data[i].x);
  57.       MPF_CHECK_FORMAT (x);
  58.       if (x->_mp_size != data[i].want_size
  59.           || refmpn_cmp_allowzero (x->_mp_d, data[i].want_data,
  60.                                    ABS (data[i].want_size)) != 0
  61.           || x->_mp_exp != ABS (data[i].want_size))
  62.         {
  63.           printf ("mpf_init_set_si wrong on data[%d]n", i);
  64.           abort();
  65.         }
  66.       mpf_clear (x);
  67.     }
  68. }
  69. int
  70. main (void)
  71. {
  72.   tests_start ();
  73.   check_data ();
  74.   tests_end ();
  75.   exit (0);
  76. }