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

数学计算

开发平台:

Unix_Linux

  1. /* Test mpz_set_si and mpz_init_set_si.
  2. Copyright 2000, 2001, 2002 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. #if GMP_NUMB_BITS <= BITS_PER_ULONG
  23. #define ENTRY(n)   { n, { n, 0 } }
  24. #else
  25. #define ENTRY(n)   { n, { (n) & GMP_NUMB_MASK, (n) >> GMP_NUMB_BITS } }
  26. #endif
  27.   static const struct {
  28.     long       n;
  29.     mp_size_t  want_size;
  30.     mp_limb_t  want_data[2];
  31.   } data[] = {
  32.     {  0L,  0 },
  33.     {  1L,  1, { 1 } },
  34.     { -1L, -1, { 1 } },
  35. #if GMP_NUMB_BITS >= BITS_PER_ULONG
  36.     { LONG_MAX,  1, { LONG_MAX, 0 } },
  37.     { -LONG_MAX,  -1, { LONG_MAX, 0 } },
  38.     { LONG_HIGHBIT,  -1, { ULONG_HIGHBIT, 0 } },
  39. #else
  40.     { LONG_MAX,  2, { LONG_MAX & GMP_NUMB_MASK, LONG_MAX >> GMP_NUMB_BITS } },
  41.     { -LONG_MAX,  -2, { LONG_MAX & GMP_NUMB_MASK, LONG_MAX >> GMP_NUMB_BITS }},
  42.     { LONG_HIGHBIT,  -2, { 0, ULONG_HIGHBIT >> GMP_NUMB_BITS } },
  43. #endif
  44.   };
  45.   mpz_t  n;
  46.   int    i;
  47.   for (i = 0; i < numberof (data); i++)
  48.     {
  49.       mpz_init (n);
  50.       mpz_set_si (n, data[i].n);
  51.       MPZ_CHECK_FORMAT (n);
  52.       if (n->_mp_size != data[i].want_size
  53.           || refmpn_cmp_allowzero (n->_mp_d, data[i].want_data,
  54.                                    ABS (data[i].want_size)) != 0)
  55.         {
  56.           printf ("mpz_set_si wrong on data[%d]n", i);
  57.           abort();
  58.         }
  59.       mpz_clear (n);
  60.       mpz_init_set_si (n, data[i].n);
  61.       MPZ_CHECK_FORMAT (n);
  62.       if (n->_mp_size != data[i].want_size
  63.           || refmpn_cmp_allowzero (n->_mp_d, data[i].want_data,
  64.                                    ABS (data[i].want_size)) != 0)
  65.         {
  66.           printf ("mpz_init_set_si wrong on data[%d]n", i);
  67.           abort();
  68.         }
  69.       mpz_clear (n);
  70.     }
  71. }
  72. int
  73. main (void)
  74. {
  75.   tests_start ();
  76.   check_data ();
  77.   tests_end ();
  78.   exit (0);
  79. }