Annotation of OpenXM_contrib/gmp/tests/mpz/t-fits.c, Revision 1.1
1.1 ! ohara 1: /* Test mpz_fits_*_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: #include "gmp.h"
! 27: #include "gmp-impl.h"
! 28: #include "tests.h"
! 29:
! 30:
! 31: /* Nothing sophisticated here, just exercise mpz_fits_*_p on a small amount
! 32: of data. */
! 33:
! 34: #define EXPECT_S(fun,name,answer) \
! 35: got = fun (z); \
! 36: if (got != answer) \
! 37: { \
! 38: printf ("%s (%s) got %d want %d\n", name, expr, got, answer); \
! 39: printf (" z size %d\n", SIZ(z)); \
! 40: printf (" z dec "); mpz_out_str (stdout, 10, z); printf ("\n"); \
! 41: printf (" z hex "); mpz_out_str (stdout, 16, z); printf ("\n"); \
! 42: error = 1; \
! 43: }
! 44:
! 45: #if HAVE_STRINGIZE
! 46: #define EXPECT(fun,answer) EXPECT_S(fun,#fun,answer)
! 47: #else
! 48: #define EXPECT(fun,answer) EXPECT_S(fun,"fun",answer)
! 49: #endif
! 50:
! 51: int
! 52: main (void)
! 53: {
! 54: mpz_t z;
! 55: int got;
! 56: const char *expr;
! 57: int error = 0;
! 58:
! 59: tests_start ();
! 60: mpz_init (z);
! 61:
! 62: mpz_set_ui (z, 0L);
! 63: expr = "0";
! 64: EXPECT (mpz_fits_ulong_p, 1);
! 65: EXPECT (mpz_fits_uint_p, 1);
! 66: EXPECT (mpz_fits_ushort_p, 1);
! 67: EXPECT (mpz_fits_slong_p, 1);
! 68: EXPECT (mpz_fits_sint_p, 1);
! 69: EXPECT (mpz_fits_sshort_p, 1);
! 70:
! 71: mpz_set_ui (z, 1L);
! 72: expr = "1";
! 73: EXPECT (mpz_fits_ulong_p, 1);
! 74: EXPECT (mpz_fits_uint_p, 1);
! 75: EXPECT (mpz_fits_ushort_p, 1);
! 76: EXPECT (mpz_fits_slong_p, 1);
! 77: EXPECT (mpz_fits_sint_p, 1);
! 78: EXPECT (mpz_fits_sshort_p, 1);
! 79:
! 80: mpz_set_si (z, -1L);
! 81: expr = "-1";
! 82: EXPECT (mpz_fits_ulong_p, 0);
! 83: EXPECT (mpz_fits_uint_p, 0);
! 84: EXPECT (mpz_fits_ushort_p, 0);
! 85: EXPECT (mpz_fits_slong_p, 1);
! 86: EXPECT (mpz_fits_sint_p, 1);
! 87: EXPECT (mpz_fits_sshort_p, 1);
! 88:
! 89: mpz_set_ui (z, 1L);
! 90: mpz_mul_2exp (z, z, 5L*BITS_PER_MP_LIMB);
! 91: expr = "2^(5*BPML)";
! 92: EXPECT (mpz_fits_ulong_p, 0);
! 93: EXPECT (mpz_fits_uint_p, 0);
! 94: EXPECT (mpz_fits_ushort_p, 0);
! 95: EXPECT (mpz_fits_slong_p, 0);
! 96: EXPECT (mpz_fits_sint_p, 0);
! 97: EXPECT (mpz_fits_sshort_p, 0);
! 98:
! 99:
! 100: mpz_set_ui (z, (unsigned long) USHRT_MAX);
! 101: expr = "USHRT_MAX";
! 102: EXPECT (mpz_fits_ulong_p, 1);
! 103: EXPECT (mpz_fits_uint_p, 1);
! 104: EXPECT (mpz_fits_ushort_p, 1);
! 105:
! 106: mpz_set_ui (z, (unsigned long) USHRT_MAX);
! 107: mpz_add_ui (z, z, 1L);
! 108: expr = "USHRT_MAX + 1";
! 109: EXPECT (mpz_fits_ushort_p, 0);
! 110:
! 111:
! 112: mpz_set_ui (z, (unsigned long) UINT_MAX);
! 113: expr = "UINT_MAX";
! 114: EXPECT (mpz_fits_ulong_p, 1);
! 115: EXPECT (mpz_fits_uint_p, 1);
! 116:
! 117: mpz_set_ui (z, (unsigned long) UINT_MAX);
! 118: mpz_add_ui (z, z, 1L);
! 119: expr = "UINT_MAX + 1";
! 120: EXPECT (mpz_fits_uint_p, 0);
! 121:
! 122:
! 123: mpz_set_ui (z, ULONG_MAX);
! 124: expr = "ULONG_MAX";
! 125: EXPECT (mpz_fits_ulong_p, 1);
! 126:
! 127: mpz_set_ui (z, ULONG_MAX);
! 128: mpz_add_ui (z, z, 1L);
! 129: expr = "ULONG_MAX + 1";
! 130: EXPECT (mpz_fits_ulong_p, 0);
! 131:
! 132:
! 133: mpz_set_si (z, (long) SHRT_MAX);
! 134: expr = "SHRT_MAX";
! 135: EXPECT (mpz_fits_slong_p, 1);
! 136: EXPECT (mpz_fits_sint_p, 1);
! 137: EXPECT (mpz_fits_sshort_p, 1);
! 138:
! 139: mpz_set_si (z, (long) SHRT_MAX);
! 140: mpz_add_ui (z, z, 1L);
! 141: expr = "SHRT_MAX + 1";
! 142: EXPECT (mpz_fits_sshort_p, 0);
! 143:
! 144:
! 145: mpz_set_si (z, (long) INT_MAX);
! 146: expr = "INT_MAX";
! 147: EXPECT (mpz_fits_slong_p, 1);
! 148: EXPECT (mpz_fits_sint_p, 1);
! 149:
! 150: mpz_set_si (z, (long) INT_MAX);
! 151: mpz_add_ui (z, z, 1L);
! 152: expr = "INT_MAX + 1";
! 153: EXPECT (mpz_fits_sint_p, 0);
! 154:
! 155:
! 156: mpz_set_si (z, LONG_MAX);
! 157: expr = "LONG_MAX";
! 158: EXPECT (mpz_fits_slong_p, 1);
! 159:
! 160: mpz_set_si (z, LONG_MAX);
! 161: mpz_add_ui (z, z, 1L);
! 162: expr = "LONG_MAX + 1";
! 163: EXPECT (mpz_fits_slong_p, 0);
! 164:
! 165:
! 166: mpz_set_si (z, (long) SHRT_MIN);
! 167: expr = "SHRT_MIN";
! 168: EXPECT (mpz_fits_slong_p, 1);
! 169: EXPECT (mpz_fits_sint_p, 1);
! 170: EXPECT (mpz_fits_sshort_p, 1);
! 171:
! 172: mpz_set_si (z, (long) SHRT_MIN);
! 173: mpz_sub_ui (z, z, 1L);
! 174: expr = "SHRT_MIN + 1";
! 175: EXPECT (mpz_fits_sshort_p, 0);
! 176:
! 177:
! 178: mpz_set_si (z, (long) INT_MIN);
! 179: expr = "INT_MIN";
! 180: EXPECT (mpz_fits_slong_p, 1);
! 181: EXPECT (mpz_fits_sint_p, 1);
! 182:
! 183: mpz_set_si (z, (long) INT_MIN);
! 184: mpz_sub_ui (z, z, 1L);
! 185: expr = "INT_MIN + 1";
! 186: EXPECT (mpz_fits_sint_p, 0);
! 187:
! 188:
! 189: mpz_set_si (z, LONG_MIN);
! 190: expr = "LONG_MIN";
! 191: EXPECT (mpz_fits_slong_p, 1);
! 192:
! 193: mpz_set_si (z, LONG_MIN);
! 194: mpz_sub_ui (z, z, 1L);
! 195: expr = "LONG_MIN + 1";
! 196: EXPECT (mpz_fits_slong_p, 0);
! 197:
! 198:
! 199: if (error)
! 200: abort ();
! 201:
! 202: mpz_clear (z);
! 203: tests_end ();
! 204: exit (0);
! 205: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>