| OLD | NEW |
| (Empty) |
| 1 /* Test mpz_sizeinbase. | |
| 2 | |
| 3 Copyright 2001, 2002 Free Software Foundation, Inc. | |
| 4 | |
| 5 This file is part of the GNU MP Library. | |
| 6 | |
| 7 The GNU MP Library is free software; you can redistribute it and/or modify | |
| 8 it under the terms of the GNU Lesser General Public License as published by | |
| 9 the Free Software Foundation; either version 3 of the License, or (at your | |
| 10 option) any later version. | |
| 11 | |
| 12 The GNU MP Library is distributed in the hope that it will be useful, but | |
| 13 WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY | |
| 14 or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public | |
| 15 License for more details. | |
| 16 | |
| 17 You should have received a copy of the GNU Lesser General Public License | |
| 18 along with the GNU MP Library. If not, see http://www.gnu.org/licenses/. */ | |
| 19 | |
| 20 #include <stdio.h> | |
| 21 #include <stdlib.h> | |
| 22 #include "gmp.h" | |
| 23 #include "gmp-impl.h" | |
| 24 #include "tests.h" | |
| 25 | |
| 26 | |
| 27 #if 0 | |
| 28 /* Disabled due to the bogosity of trying to fake an _mp_d pointer to | |
| 29 below an object. Has been seen to fail on a hppa system and on ia64. */ | |
| 30 | |
| 31 | |
| 32 /* Create a fake mpz consisting of just a single 1 bit, with totbits being | |
| 33 the total number of bits, inclusive of that 1 bit. */ | |
| 34 void | |
| 35 mpz_fake_bits (mpz_ptr z, unsigned long totbits) | |
| 36 { | |
| 37 static mp_limb_t n; | |
| 38 unsigned long zero_bits, zero_limbs; | |
| 39 | |
| 40 zero_bits = totbits - 1; | |
| 41 zero_limbs = zero_bits / GMP_NUMB_BITS; | |
| 42 zero_bits %= GMP_NUMB_BITS; | |
| 43 | |
| 44 SIZ(z) = zero_limbs + 1; | |
| 45 PTR(z) = (&n) - (SIZ(z) - 1); | |
| 46 n = CNST_LIMB(1) << zero_bits; | |
| 47 | |
| 48 ASSERT_ALWAYS (mpz_sizeinbase (z, 2) == totbits); | |
| 49 } | |
| 50 | |
| 51 | |
| 52 /* This was seen to fail on a GNU/Linux powerpc32 with gcc 2.95.2, | |
| 53 apparently due to a doubtful value of mp_bases[10].chars_per_bit_exactly | |
| 54 (0X1.34413509F79FDP-2 whereas 0X1.34413509F79FFP-2 is believed correct). | |
| 55 Presumably this is a glibc problem when gcc converts the decimal string | |
| 56 in mp_bases.c, or maybe it's only a function of the rounding mode during | |
| 57 compilation. */ | |
| 58 void | |
| 59 check_sample (void) | |
| 60 { | |
| 61 unsigned long totbits = 198096465; | |
| 62 int base = 10; | |
| 63 size_t want = 59632979; | |
| 64 size_t got; | |
| 65 mpz_t z; | |
| 66 | |
| 67 mpz_fake_bits (z, totbits); | |
| 68 got = mpz_sizeinbase (z, base); | |
| 69 if (got != want) | |
| 70 { | |
| 71 printf ("mpz_sizeinbase\n"); | |
| 72 printf (" base %d\n", base); | |
| 73 printf (" totbits %lu\n", totbits); | |
| 74 printf (" got %u\n", got); | |
| 75 printf (" want %u\n", want); | |
| 76 abort (); | |
| 77 } | |
| 78 } | |
| 79 #endif | |
| 80 | |
| 81 int | |
| 82 main (void) | |
| 83 { | |
| 84 tests_start (); | |
| 85 | |
| 86 /* check_sample (); */ | |
| 87 | |
| 88 tests_end (); | |
| 89 exit (0); | |
| 90 } | |
| OLD | NEW |