Index: gcc/gmp/tests/mpz/bit.c |
diff --git a/gcc/gmp/tests/mpz/bit.c b/gcc/gmp/tests/mpz/bit.c |
deleted file mode 100644 |
index 9eddbb4889c0adedc4e1f0bc174ffb9835bdf2e5..0000000000000000000000000000000000000000 |
--- a/gcc/gmp/tests/mpz/bit.c |
+++ /dev/null |
@@ -1,373 +0,0 @@ |
-/* Test mpz_setbit, mpz_clrbit, mpz_tstbit. |
- |
-Copyright 1997, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. |
- |
-This file is part of the GNU MP Library. |
- |
-The GNU MP Library is free software; you can redistribute it and/or modify |
-it under the terms of the GNU Lesser General Public License as published by |
-the Free Software Foundation; either version 3 of the License, or (at your |
-option) any later version. |
- |
-The GNU MP Library is distributed in the hope that it will be useful, but |
-WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY |
-or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public |
-License for more details. |
- |
-You should have received a copy of the GNU Lesser General Public License |
-along with the GNU MP Library. If not, see http://www.gnu.org/licenses/. */ |
- |
-#include <stdio.h> |
-#include <stdlib.h> |
- |
-#include "gmp.h" |
-#include "gmp-impl.h" |
-#include "tests.h" |
- |
-#ifndef SIZE |
-#define SIZE 4 |
-#endif |
- |
- |
-void |
-debug_mp (mpz_srcptr x, int base) |
-{ |
- mpz_out_str (stdout, base, x); fputc ('\n', stdout); |
-} |
- |
- |
-/* exercise the case where mpz_clrbit or mpz_combit ends up extending a |
- value like -2^(k*GMP_NUMB_BITS-1) when clearing bit k*GMP_NUMB_BITS-1. */ |
-void |
-check_clr_extend (void) |
-{ |
- mpz_t got, want; |
- unsigned long i; |
- int f; |
- |
- mpz_init (got); |
- mpz_init (want); |
- |
- for (i = 1; i < 5; i++) |
- { |
- for (f = 0; f <= 1; f++) |
- { |
- /* lots of 1 bits in _mp_d */ |
- mpz_set_ui (got, 1L); |
- mpz_mul_2exp (got, got, 10*GMP_NUMB_BITS); |
- mpz_sub_ui (got, got, 1L); |
- |
- /* value -2^(n-1) representing ..11100..00 */ |
- mpz_set_si (got, -1L); |
- mpz_mul_2exp (got, got, i*GMP_NUMB_BITS-1); |
- |
- /* complement bit n, giving ..11000..00 which is -2^n */ |
- if (f == 0) |
- mpz_clrbit (got, i*GMP_NUMB_BITS-1); |
- else |
- mpz_combit (got, i*GMP_NUMB_BITS-1); |
- MPZ_CHECK_FORMAT (got); |
- |
- mpz_set_si (want, -1L); |
- mpz_mul_2exp (want, want, i*GMP_NUMB_BITS); |
- |
- if (mpz_cmp (got, want) != 0) |
- { |
- if (f == 0) |
- printf ("mpz_clrbit: "); |
- else |
- printf ("mpz_combit: "); |
- printf ("wrong after extension\n"); |
- mpz_trace ("got ", got); |
- mpz_trace ("want", want); |
- abort (); |
- } |
- } |
- } |
- |
- mpz_clear (got); |
- mpz_clear (want); |
-} |
- |
-void |
-check_com_negs (void) |
-{ |
- static const struct { |
- unsigned long bit; |
- mp_size_t inp_size; |
- mp_limb_t inp_n[5]; |
- mp_size_t want_size; |
- mp_limb_t want_n[5]; |
- } data[] = { |
- { GMP_NUMB_BITS, 2, { 1, 1 }, 1, { 1 } }, |
- { GMP_NUMB_BITS+1, 2, { 1, 1 }, 2, { 1, 3 } }, |
- |
- { GMP_NUMB_BITS, 2, { 0, 1 }, 2, { 0, 2 } }, |
- { GMP_NUMB_BITS+1, 2, { 0, 1 }, 2, { 0, 3 } }, |
- }; |
- mpz_t inp, got, want; |
- int i; |
- |
- mpz_init (got); |
- mpz_init (want); |
- mpz_init (inp); |
- |
- for (i = 0; i < numberof (data); i++) |
- { |
- mpz_set_n (inp, data[i].inp_n, data[i].inp_size); |
- mpz_neg (inp, inp); |
- |
- mpz_set_n (want, data[i].want_n, data[i].want_size); |
- mpz_neg (want, want); |
- |
- mpz_set (got, inp); |
- mpz_combit (got, data[i].bit); |
- |
- if (mpz_cmp (got, want) != 0) |
- { |
- printf ("mpz_combit: wrong on neg data[%d]\n", i); |
- mpz_trace ("inp ", inp); |
- printf ("bit %lu\n", data[i].bit); |
- mpz_trace ("got ", got); |
- mpz_trace ("want", want); |
- abort (); |
- } |
- } |
- |
- mpz_clear (inp); |
- mpz_clear (got); |
- mpz_clear (want); |
-} |
- |
-/* See that mpz_tstbit matches a twos complement calculated explicitly, for |
- various low zeros. */ |
-void |
-check_tstbit (void) |
-{ |
-#define MAX_ZEROS 3 |
-#define NUM_LIMBS 3 |
- |
- mp_limb_t pos[1+NUM_LIMBS+MAX_ZEROS]; |
- mp_limb_t neg[1+NUM_LIMBS+MAX_ZEROS]; |
- mpz_t z; |
- unsigned long i; |
- int zeros, low1; |
- int got, want; |
- |
- mpz_init (z); |
- for (zeros = 0; zeros <= MAX_ZEROS; zeros++) |
- { |
- MPN_ZERO (pos, numberof(pos)); |
- mpn_random2 (pos+zeros, (mp_size_t) NUM_LIMBS); |
- |
- for (low1 = 0; low1 <= 1; low1++) |
- { |
- if (low1) |
- pos[0] |= 1; |
- |
- refmpn_neg_n (neg, pos, (mp_size_t) numberof(neg)); |
- mpz_set_n (z, neg, (mp_size_t) numberof(neg)); |
- mpz_neg (z, z); |
- |
- for (i = 0; i < numberof(pos)*GMP_NUMB_BITS; i++) |
- { |
- got = mpz_tstbit (z, i); |
- want = refmpn_tstbit (pos, i); |
- if (got != want) |
- { |
- printf ("wrong at bit %lu, with %d zeros\n", i, zeros); |
- printf ("z neg "); debug_mp (z, -16); |
- mpz_set_n (z, pos, (mp_size_t) numberof(pos)); |
- printf ("pos "); debug_mp (z, -16); |
- mpz_set_n (z, neg, (mp_size_t) numberof(neg)); |
- printf ("neg "); debug_mp (z, -16); |
- exit (1); |
- } |
- } |
- } |
- } |
- mpz_clear (z); |
-} |
- |
- |
-void |
-check_single (void) |
-{ |
- mpz_t x; |
- int limb, offset, initial; |
- unsigned long bit; |
- |
- mpz_init (x); |
- |
- for (limb = 0; limb < 4; limb++) |
- { |
- for (offset = (limb==0 ? 0 : -2); offset <= 2; offset++) |
- { |
- for (initial = 0; initial >= -1; initial--) |
- { |
- mpz_set_si (x, (long) initial); |
- |
- bit = (unsigned long) limb*BITS_PER_MP_LIMB + offset; |
- |
- mpz_clrbit (x, bit); |
- MPZ_CHECK_FORMAT (x); |
- if (mpz_tstbit (x, bit) != 0) |
- { |
- printf ("check_single(): expected 0\n"); |
- abort (); |
- } |
- |
- mpz_setbit (x, bit); |
- MPZ_CHECK_FORMAT (x); |
- if (mpz_tstbit (x, bit) != 1) |
- { |
- printf ("check_single(): expected 1\n"); |
- abort (); |
- } |
- |
- mpz_clrbit (x, bit); |
- MPZ_CHECK_FORMAT (x); |
- if (mpz_tstbit (x, bit) != 0) |
- { |
- printf ("check_single(): expected 0\n"); |
- abort (); |
- } |
- |
- mpz_combit (x, bit); |
- MPZ_CHECK_FORMAT (x); |
- if (mpz_tstbit (x, bit) != 1) |
- { |
- printf ("check_single(): expected 1\n"); |
- abort (); |
- } |
- |
- mpz_combit (x, bit); |
- MPZ_CHECK_FORMAT (x); |
- if (mpz_tstbit (x, bit) != 0) |
- { |
- printf ("check_single(): expected 0\n"); |
- abort (); |
- } |
- } |
- } |
- } |
- |
- mpz_clear (x); |
-} |
- |
- |
-void |
-check_random (int argc, char *argv[]) |
-{ |
- mpz_t x, s0, s1, s2, s3, m; |
- mp_size_t xsize; |
- int i; |
- int reps = 100000; |
- int bit0, bit1, bit2, bit3; |
- unsigned long int bitindex; |
- const char *s = ""; |
- |
- if (argc == 2) |
- reps = atoi (argv[1]); |
- |
- mpz_init (x); |
- mpz_init (s0); |
- mpz_init (s1); |
- mpz_init (s2); |
- mpz_init (s3); |
- mpz_init (m); |
- |
- for (i = 0; i < reps; i++) |
- { |
- xsize = urandom () % (2 * SIZE) - SIZE; |
- mpz_random2 (x, xsize); |
- bitindex = urandom () % SIZE; |
- |
- mpz_set (s0, x); |
- bit0 = mpz_tstbit (x, bitindex); |
- mpz_setbit (x, bitindex); |
- MPZ_CHECK_FORMAT (x); |
- |
- mpz_set (s1, x); |
- bit1 = mpz_tstbit (x, bitindex); |
- mpz_clrbit (x, bitindex); |
- MPZ_CHECK_FORMAT (x); |
- |
- mpz_set (s2, x); |
- bit2 = mpz_tstbit (x, bitindex); |
- mpz_setbit (x, bitindex); |
- MPZ_CHECK_FORMAT (x); |
- |
- mpz_set (s3, x); |
- bit3 = mpz_tstbit (x, bitindex); |
- |
-#define FAIL(str) do { s = str; goto fail; } while (0) |
- |
- if (bit1 != 1) FAIL ("bit1 != 1"); |
- if (bit2 != 0) FAIL ("bit2 != 0"); |
- if (bit3 != 1) FAIL ("bit3 != 1"); |
- |
- if (bit0 == 0) |
- { |
- if (mpz_cmp (s0, s1) == 0 || mpz_cmp (s0, s2) != 0 || mpz_cmp (s0, s3) == 0) |
- abort (); |
- } |
- else |
- { |
- if (mpz_cmp (s0, s1) != 0 || mpz_cmp (s0, s2) == 0 || mpz_cmp (s0, s3) != 0) |
- abort (); |
- } |
- |
- if (mpz_cmp (s1, s2) == 0 || mpz_cmp (s1, s3) != 0) |
- abort (); |
- if (mpz_cmp (s2, s3) == 0) |
- abort (); |
- |
- mpz_ui_pow_ui (m, 2L, bitindex); |
- MPZ_CHECK_FORMAT (m); |
- mpz_ior (x, s2, m); |
- MPZ_CHECK_FORMAT (x); |
- if (mpz_cmp (x, s3) != 0) |
- abort (); |
- |
- mpz_com (m, m); |
- MPZ_CHECK_FORMAT (m); |
- mpz_and (x, s1, m); |
- MPZ_CHECK_FORMAT (x); |
- if (mpz_cmp (x, s2) != 0) |
- abort (); |
- } |
- |
- mpz_clear (x); |
- mpz_clear (s0); |
- mpz_clear (s1); |
- mpz_clear (s2); |
- mpz_clear (s3); |
- mpz_clear (m); |
- return; |
- |
- |
- fail: |
- printf ("%s\n", s); |
- printf ("bitindex = %lu\n", bitindex); |
- printf ("x = "); mpz_out_str (stdout, -16, x); printf (" hex\n"); |
- exit (1); |
-} |
- |
- |
- |
-int |
-main (int argc, char *argv[]) |
-{ |
- tests_start (); |
- mp_trace_base = -16; |
- |
- check_clr_extend (); |
- check_com_negs (); |
- check_tstbit (); |
- check_random (argc, argv); |
- check_single (); |
- |
- tests_end (); |
- exit (0); |
-} |