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

数学计算

开发平台:

Unix_Linux

  1. /* Test count_leading_zeros and count_trailing_zeros.
  2. Copyright 2001, 2002, 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 "longlong.h"
  19. #include "tests.h"
  20. void
  21. check_clz (int want, mp_limb_t n)
  22. {
  23.   int  got;
  24.   count_leading_zeros (got, n);
  25.   if (got != want)
  26.     {
  27.       printf        ("count_leading_zeros wrongn");
  28.       mp_limb_trace ("  n    ", n);
  29.       printf        ("  want %dn", want);
  30.       printf        ("  got  %dn", got);
  31.       abort ();
  32.     }
  33. }
  34. void
  35. check_ctz (int want, mp_limb_t n)
  36. {
  37.   int  got;
  38.   count_trailing_zeros (got, n);
  39.   if (got != want)
  40.     {
  41.       printf ("count_trailing_zeros wrongn");
  42.       mpn_trace ("  n    ", &n, (mp_size_t) 1);
  43.       printf    ("  want %dn", want);
  44.       printf    ("  got  %dn", got);
  45.       abort ();
  46.     }
  47. }
  48. void
  49. check_various (void)
  50. {
  51.   int        i;
  52. #ifdef COUNT_LEADING_ZEROS_0
  53.   check_clz (COUNT_LEADING_ZEROS_0, CNST_LIMB(0));
  54. #endif
  55.   for (i=0; i < GMP_LIMB_BITS; i++)
  56.     {
  57.       check_clz (i, CNST_LIMB(1) << (GMP_LIMB_BITS-1-i));
  58.       check_ctz (i, CNST_LIMB(1) << i);
  59.       check_ctz (i, MP_LIMB_T_MAX << i);
  60.       check_clz (i, MP_LIMB_T_MAX >> i);
  61.     }
  62. }
  63. int
  64. main (int argc, char *argv[])
  65. {
  66.   tests_start ();
  67.   mp_trace_base = 16;
  68.   check_various ();
  69.   tests_end ();
  70.   exit (0);
  71. }