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

数学计算

开发平台:

Unix_Linux

  1. /* Test mpz_fits_*_p */
  2. /*
  3. Copyright 2001 Free Software Foundation, Inc.
  4. This file is part of the GNU MP Library.
  5. The GNU MP Library is free software; you can redistribute it and/or modify
  6. it under the terms of the GNU Lesser General Public License as published by
  7. the Free Software Foundation; either version 3 of the License, or (at your
  8. option) any later version.
  9. The GNU MP Library is distributed in the hope that it will be useful, but
  10. WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
  11. or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
  12. License for more details.
  13. You should have received a copy of the GNU Lesser General Public License
  14. along with the GNU MP Library.  If not, see http://www.gnu.org/licenses/.  */
  15. #include <stdio.h>
  16. #include <stdlib.h>
  17. #include "gmp.h"
  18. #include "gmp-impl.h"
  19. #include "tests.h"
  20. /* Nothing sophisticated here, just exercise mpz_fits_*_p on a small amount
  21.    of data. */
  22. #define EXPECT_S(fun,name,answer)                                       
  23.   got = fun (z);                                                        
  24.   if (got != answer)                                                    
  25.     {                                                                   
  26.       printf ("%s (%s) got %d want %dn", name, expr, got, answer);     
  27.       printf (" z size %dn", SIZ(z));                                  
  28.       printf (" z dec "); mpz_out_str (stdout, 10, z); printf ("n");   
  29.       printf (" z hex "); mpz_out_str (stdout, 16, z); printf ("n");   
  30.       error = 1;                                                        
  31.     }
  32. #if HAVE_STRINGIZE
  33. #define EXPECT(fun,answer)  EXPECT_S(fun,#fun,answer)
  34. #else
  35. #define EXPECT(fun,answer)  EXPECT_S(fun,"fun",answer)
  36. #endif
  37. int
  38. main (void)
  39. {
  40.   mpz_t       z;
  41.   int         got;
  42.   const char  *expr;
  43.   int         error = 0;
  44.   tests_start ();
  45.   mpz_init (z);
  46.   mpz_set_ui (z, 0L);
  47.   expr = "0";
  48.   EXPECT (mpz_fits_ulong_p, 1);
  49.   EXPECT (mpz_fits_uint_p, 1);
  50.   EXPECT (mpz_fits_ushort_p, 1);
  51.   EXPECT (mpz_fits_slong_p, 1);
  52.   EXPECT (mpz_fits_sint_p, 1);
  53.   EXPECT (mpz_fits_sshort_p, 1);
  54.   mpz_set_ui (z, 1L);
  55.   expr = "1";
  56.   EXPECT (mpz_fits_ulong_p, 1);
  57.   EXPECT (mpz_fits_uint_p, 1);
  58.   EXPECT (mpz_fits_ushort_p, 1);
  59.   EXPECT (mpz_fits_slong_p, 1);
  60.   EXPECT (mpz_fits_sint_p, 1);
  61.   EXPECT (mpz_fits_sshort_p, 1);
  62.   mpz_set_si (z, -1L);
  63.   expr = "-1";
  64.   EXPECT (mpz_fits_ulong_p, 0);
  65.   EXPECT (mpz_fits_uint_p, 0);
  66.   EXPECT (mpz_fits_ushort_p, 0);
  67.   EXPECT (mpz_fits_slong_p, 1);
  68.   EXPECT (mpz_fits_sint_p, 1);
  69.   EXPECT (mpz_fits_sshort_p, 1);
  70.   mpz_set_ui (z, 1L);
  71.   mpz_mul_2exp (z, z, 5L*GMP_LIMB_BITS);
  72.   expr = "2^(5*BPML)";
  73.   EXPECT (mpz_fits_ulong_p, 0);
  74.   EXPECT (mpz_fits_uint_p, 0);
  75.   EXPECT (mpz_fits_ushort_p, 0);
  76.   EXPECT (mpz_fits_slong_p, 0);
  77.   EXPECT (mpz_fits_sint_p, 0);
  78.   EXPECT (mpz_fits_sshort_p, 0);
  79.   mpz_set_ui (z, (unsigned long) USHRT_MAX);
  80.   expr = "USHRT_MAX";
  81.   EXPECT (mpz_fits_ulong_p, 1);
  82.   EXPECT (mpz_fits_uint_p, 1);
  83.   EXPECT (mpz_fits_ushort_p, 1);
  84.   mpz_set_ui (z, (unsigned long) USHRT_MAX);
  85.   mpz_add_ui (z, z, 1L);
  86.   expr = "USHRT_MAX + 1";
  87.   EXPECT (mpz_fits_ushort_p, 0);
  88.   mpz_set_ui (z, (unsigned long) UINT_MAX);
  89.   expr = "UINT_MAX";
  90.   EXPECT (mpz_fits_ulong_p, 1);
  91.   EXPECT (mpz_fits_uint_p, 1);
  92.   mpz_set_ui (z, (unsigned long) UINT_MAX);
  93.   mpz_add_ui (z, z, 1L);
  94.   expr = "UINT_MAX + 1";
  95.   EXPECT (mpz_fits_uint_p, 0);
  96.   mpz_set_ui (z, ULONG_MAX);
  97.   expr = "ULONG_MAX";
  98.   EXPECT (mpz_fits_ulong_p, 1);
  99.   mpz_set_ui (z, ULONG_MAX);
  100.   mpz_add_ui (z, z, 1L);
  101.   expr = "ULONG_MAX + 1";
  102.   EXPECT (mpz_fits_ulong_p, 0);
  103.   mpz_set_si (z, (long) SHRT_MAX);
  104.   expr = "SHRT_MAX";
  105.   EXPECT (mpz_fits_slong_p, 1);
  106.   EXPECT (mpz_fits_sint_p, 1);
  107.   EXPECT (mpz_fits_sshort_p, 1);
  108.   mpz_set_si (z, (long) SHRT_MAX);
  109.   mpz_add_ui (z, z, 1L);
  110.   expr = "SHRT_MAX + 1";
  111.   EXPECT (mpz_fits_sshort_p, 0);
  112.   mpz_set_si (z, (long) INT_MAX);
  113.   expr = "INT_MAX";
  114.   EXPECT (mpz_fits_slong_p, 1);
  115.   EXPECT (mpz_fits_sint_p, 1);
  116.   mpz_set_si (z, (long) INT_MAX);
  117.   mpz_add_ui (z, z, 1L);
  118.   expr = "INT_MAX + 1";
  119.   EXPECT (mpz_fits_sint_p, 0);
  120.   mpz_set_si (z, LONG_MAX);
  121.   expr = "LONG_MAX";
  122.   EXPECT (mpz_fits_slong_p, 1);
  123.   mpz_set_si (z, LONG_MAX);
  124.   mpz_add_ui (z, z, 1L);
  125.   expr = "LONG_MAX + 1";
  126.   EXPECT (mpz_fits_slong_p, 0);
  127.   mpz_set_si (z, (long) SHRT_MIN);
  128.   expr = "SHRT_MIN";
  129.   EXPECT (mpz_fits_slong_p, 1);
  130.   EXPECT (mpz_fits_sint_p, 1);
  131.   EXPECT (mpz_fits_sshort_p, 1);
  132.   mpz_set_si (z, (long) SHRT_MIN);
  133.   mpz_sub_ui (z, z, 1L);
  134.   expr = "SHRT_MIN + 1";
  135.   EXPECT (mpz_fits_sshort_p, 0);
  136.   mpz_set_si (z, (long) INT_MIN);
  137.   expr = "INT_MIN";
  138.   EXPECT (mpz_fits_slong_p, 1);
  139.   EXPECT (mpz_fits_sint_p, 1);
  140.   mpz_set_si (z, (long) INT_MIN);
  141.   mpz_sub_ui (z, z, 1L);
  142.   expr = "INT_MIN + 1";
  143.   EXPECT (mpz_fits_sint_p, 0);
  144.   mpz_set_si (z, LONG_MIN);
  145.   expr = "LONG_MIN";
  146.   EXPECT (mpz_fits_slong_p, 1);
  147.   mpz_set_si (z, LONG_MIN);
  148.   mpz_sub_ui (z, z, 1L);
  149.   expr = "LONG_MIN + 1";
  150.   EXPECT (mpz_fits_slong_p, 0);
  151.   if (error)
  152.     abort ();
  153.   mpz_clear (z);
  154.   tests_end ();
  155.   exit (0);
  156. }