1/* Check mp_bases values. 2 3Copyright 2002 Free Software Foundation, Inc. 4 5This file is part of the GNU MP Library test suite. 6 7The GNU MP Library test suite is free software; you can redistribute it 8and/or modify it under the terms of the GNU General Public License as 9published by the Free Software Foundation; either version 3 of the License, 10or (at your option) any later version. 11 12The GNU MP Library test suite is distributed in the hope that it will be 13useful, but WITHOUT ANY WARRANTY; without even the implied warranty of 14MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General 15Public License for more details. 16 17You should have received a copy of the GNU General Public License along with 18the GNU MP Library test suite. If not, see https://www.gnu.org/licenses/. */ 19 20#include <stdio.h> 21#include <stdlib.h> 22#include "gmp-impl.h" 23#include "longlong.h" 24#include "tests.h" 25 26 27int 28main (int argc, char *argv[]) 29{ 30 mp_limb_t want_bb, want_bb_inv; 31 int base, want_chars_per_limb; 32 33 want_chars_per_limb = refmpn_chars_per_limb (10); 34 if (MP_BASES_CHARS_PER_LIMB_10 != want_chars_per_limb) 35 { 36 printf ("MP_BASES_CHARS_PER_LIMB_10 wrong\n"); 37 abort (); 38 } 39 40 want_bb = refmpn_big_base (10); 41 if (MP_BASES_BIG_BASE_10 != want_bb) 42 { 43 printf ("MP_BASES_BIG_BASE_10 wrong\n"); 44 abort (); 45 } 46 47 want_bb_inv = refmpn_invert_limb 48 (want_bb << refmpn_count_leading_zeros (want_bb)); 49 if (MP_BASES_BIG_BASE_INVERTED_10 != want_bb_inv) 50 { 51 printf ("MP_BASES_BIG_BASE_INVERTED_10 wrong\n"); 52 abort (); 53 } 54 55 if (MP_BASES_NORMALIZATION_STEPS_10 56 != refmpn_count_leading_zeros (MP_BASES_BIG_BASE_10)) 57 { 58 printf ("MP_BASES_NORMALIZATION_STEPS_10 wrong\n"); 59 abort (); 60 } 61 62 for (base = 2; base < numberof (mp_bases); base++) 63 { 64 want_chars_per_limb = refmpn_chars_per_limb (base); 65 if (mp_bases[base].chars_per_limb != want_chars_per_limb) 66 { 67 printf ("mp_bases[%d].chars_per_limb wrong\n", base); 68 printf (" got %d\n", mp_bases[base].chars_per_limb); 69 printf (" want %d\n", want_chars_per_limb); 70 abort (); 71 } 72 73 if (POW2_P (base)) 74 { 75 want_bb = refmpn_count_trailing_zeros ((mp_limb_t) base); 76 if (mp_bases[base].big_base != want_bb) 77 { 78 printf ("mp_bases[%d].big_base (log2 of base) wrong\n", base); 79 abort (); 80 } 81 } 82 else 83 { 84 want_bb = refmpn_big_base (base); 85 if (mp_bases[base].big_base != want_bb) 86 { 87 printf ("mp_bases[%d].big_base wrong\n", base); 88 abort (); 89 } 90 91#if USE_PREINV_DIVREM_1 92 want_bb_inv = refmpn_invert_limb 93 (want_bb << refmpn_count_leading_zeros (want_bb)); 94 if (mp_bases[base].big_base_inverted != want_bb_inv) 95 { 96 printf ("mp_bases[%d].big_base_inverted wrong\n", base); 97 abort (); 98 } 99#endif 100 } 101 } 102 103 exit (0); 104} 105