Annotation of OpenXM_contrib/gmp/tests/mpz/t-divis_2exp.c, Revision 1.1
1.1 ! ohara 1: /* test mpz_divisible_2exp_p */
! 2:
! 3: /*
! 4: Copyright 2001 Free Software Foundation, Inc.
! 5:
! 6: This file is part of the GNU MP Library.
! 7:
! 8: The GNU MP Library is free software; you can redistribute it and/or modify
! 9: it under the terms of the GNU Lesser General Public License as published by
! 10: the Free Software Foundation; either version 2.1 of the License, or (at your
! 11: option) any later version.
! 12:
! 13: The GNU MP Library is distributed in the hope that it will be useful, but
! 14: WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
! 15: or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
! 16: License for more details.
! 17:
! 18: You should have received a copy of the GNU Lesser General Public License
! 19: along with the GNU MP Library; see the file COPYING.LIB. If not, write to
! 20: the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
! 21: MA 02111-1307, USA.
! 22: */
! 23:
! 24: #include <stdio.h>
! 25: #include <stdlib.h>
! 26:
! 27: #include "gmp.h"
! 28: #include "gmp-impl.h"
! 29: #include "tests.h"
! 30:
! 31:
! 32: void
! 33: check_one (mpz_srcptr a, unsigned long d, int want)
! 34: {
! 35: int got;
! 36:
! 37: got = (mpz_divisible_2exp_p (a, d) != 0);
! 38: if (want != got)
! 39: {
! 40: printf ("mpz_divisible_2exp_p wrong\n");
! 41: printf (" expected %d got %d\n", want, got);
! 42: mpz_trace (" a", a);
! 43: printf (" d=%lu\n", d);
! 44: mp_trace_base = -16;
! 45: mpz_trace (" a", a);
! 46: printf (" d=0x%lX\n", d);
! 47: abort ();
! 48: }
! 49: }
! 50:
! 51: void
! 52: check_data (void)
! 53: {
! 54: static const struct {
! 55: const char *a;
! 56: unsigned long d;
! 57: int want;
! 58:
! 59: } data[] = {
! 60:
! 61: { "0", 0, 1 },
! 62: { "0", 1, 1 },
! 63: { "0", 2, 1 },
! 64: { "0", 3, 1 },
! 65:
! 66: { "1", 0, 1 },
! 67: { "1", 1, 0 },
! 68: { "1", 2, 0 },
! 69: { "1", 3, 0 },
! 70: { "1", 10000, 0 },
! 71:
! 72: { "4", 0, 1 },
! 73: { "4", 1, 1 },
! 74: { "4", 2, 1 },
! 75: { "4", 3, 0 },
! 76: { "4", 4, 0 },
! 77: { "4", 10000, 0 },
! 78:
! 79: { "0x80000000", 31, 1 },
! 80: { "0x80000000", 32, 0 },
! 81: { "0x80000000", 64, 0 },
! 82:
! 83: { "0x100000000", 32, 1 },
! 84: { "0x100000000", 33, 0 },
! 85: { "0x100000000", 64, 0 },
! 86:
! 87: { "0x8000000000000000", 63, 1 },
! 88: { "0x8000000000000000", 64, 0 },
! 89: { "0x8000000000000000", 128, 0 },
! 90:
! 91: { "0x10000000000000000", 64, 1 },
! 92: { "0x10000000000000000", 65, 0 },
! 93: { "0x10000000000000000", 128, 0 },
! 94: { "0x10000000000000000", 256, 0 },
! 95:
! 96: { "0x10000000000000000100000000", 32, 1 },
! 97: { "0x10000000000000000100000000", 33, 0 },
! 98: { "0x10000000000000000100000000", 64, 0 },
! 99:
! 100: { "0x1000000000000000010000000000000000", 64, 1 },
! 101: { "0x1000000000000000010000000000000000", 65, 0 },
! 102: { "0x1000000000000000010000000000000000", 128, 0 },
! 103: { "0x1000000000000000010000000000000000", 256, 0 },
! 104: { "0x1000000000000000010000000000000000", 1024, 0 },
! 105:
! 106: };
! 107:
! 108: mpz_t a, d;
! 109: int i;
! 110:
! 111: mpz_init (a);
! 112: mpz_init (d);
! 113:
! 114: for (i = 0; i < numberof (data); i++)
! 115: {
! 116: mpz_set_str_or_abort (a, data[i].a, 0);
! 117: check_one (a, data[i].d, data[i].want);
! 118:
! 119: mpz_neg (a, a);
! 120: check_one (a, data[i].d, data[i].want);
! 121: }
! 122:
! 123: mpz_clear (a);
! 124: mpz_clear (d);
! 125: }
! 126:
! 127: int
! 128: main (int argc, char *argv[])
! 129: {
! 130: tests_start ();
! 131:
! 132: check_data ();
! 133:
! 134: tests_end ();
! 135: exit (0);
! 136: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>