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

数学计算

开发平台:

Unix_Linux

  1. /* Test mpf_set_ui and mpf_init_set_ui.
  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.     unsigned 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. #if GMP_NUMB_BITS >= BITS_PER_ULONG
  30.     { ULONG_MAX,     1, { ULONG_MAX, 0 } },
  31.     { ULONG_HIGHBIT, 1, { ULONG_HIGHBIT, 0 } },
  32. #else
  33.     { ULONG_MAX,     2, { ULONG_MAX & GMP_NUMB_MASK,
  34.                           ULONG_MAX >> GMP_NUMB_BITS } },
  35.     { LONG_HIGHBIT,  2, { 0,
  36.                           ULONG_HIGHBIT >> GMP_NUMB_BITS } },
  37. #endif
  38.   };
  39.   mpf_t  x;
  40.   int    i;
  41.   for (i = 0; i < numberof (data); i++)
  42.     {
  43.       mpf_init (x);
  44.       mpf_set_ui (x, data[i].x);
  45.       MPF_CHECK_FORMAT (x);
  46.       if (x->_mp_size != data[i].want_size
  47.           || refmpn_cmp_allowzero (x->_mp_d, data[i].want_data,
  48.                                    ABS (data[i].want_size)) != 0
  49.           || x->_mp_exp != ABS (data[i].want_size))
  50.         {
  51.           printf ("mpf_set_ui wrong on data[%d]n", i);
  52.           abort();
  53.         }
  54.       mpf_clear (x);
  55.       mpf_init_set_ui (x, data[i].x);
  56.       MPF_CHECK_FORMAT (x);
  57.       if (x->_mp_size != data[i].want_size
  58.           || refmpn_cmp_allowzero (x->_mp_d, data[i].want_data,
  59.                                    ABS (data[i].want_size)) != 0
  60.           || x->_mp_exp != ABS (data[i].want_size))
  61.         {
  62.           printf ("mpf_init_set_ui wrong on data[%d]n", i);
  63.           abort();
  64.         }
  65.       mpf_clear (x);
  66.     }
  67. }
  68. int
  69. main (void)
  70. {
  71.   tests_start ();
  72.   check_data ();
  73.   tests_end ();
  74.   exit (0);
  75. }