Annotation of OpenXM_contrib/gmp/tests/mpn/t-iord_u.c, Revision 1.1
1.1 ! ohara 1: /* Test MPN_INCR_U and MPN_DECR_U.
! 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 2.1 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; see the file COPYING.LIB. If not, write to
! 19: the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
! 20: MA 02111-1307, USA.
! 21: */
! 22:
! 23: #include <stdio.h>
! 24: #include <stdlib.h>
! 25:
! 26: #include "gmp.h"
! 27: #include "gmp-impl.h"
! 28: #include "tests.h"
! 29:
! 30:
! 31: /* The i386 MPN_INCR_U and MPN_DECR_U have special cases for "n" being a
! 32: compile-time constant 1, so that's exercised explicitly. */
! 33:
! 34:
! 35: #define M GMP_NUMB_MAX
! 36: #define SIZE ((mp_size_t) 10)
! 37:
! 38:
! 39: void
! 40: check_one (const char *name, int i,
! 41: mp_srcptr src, mp_limb_t n,
! 42: mp_srcptr got, mp_srcptr want, mp_size_t size)
! 43: {
! 44: if (! refmpn_equal_anynail (got, want, size))
! 45: {
! 46: printf ("Wrong at %s i=%d\n", name, i);
! 47: mpn_trace (" src", src, size);
! 48: mpn_trace (" n", &n, (mp_size_t) 1);
! 49: mpn_trace (" got", got, size);
! 50: mpn_trace (" want", want, size);
! 51: abort ();
! 52: }
! 53: }
! 54:
! 55:
! 56: void
! 57: check_incr_data (void)
! 58: {
! 59: static const struct {
! 60: mp_limb_t n;
! 61: const mp_limb_t src[SIZE];
! 62: const mp_limb_t want[SIZE];
! 63: } data[] = {
! 64: { 1, { 0 }, { 1 } },
! 65: { 1, { 123 }, { 124 } },
! 66: { 2, { 0 }, { 2 } },
! 67: { 2, { 123 }, { 125 } },
! 68: { M, { 0 }, { M } },
! 69:
! 70: { 1, { M, 0 }, { 0, 1 } },
! 71: { 1, { M, 123 }, { 0, 124 } },
! 72: { 2, { M, 0 }, { 1, 1 } },
! 73: { 2, { M, 123 }, { 1, 124 } },
! 74: { M, { M, 0 }, { M-1, 1 } },
! 75: { M, { M, 123 }, { M-1, 124 } },
! 76:
! 77: { 1, { M, M, 0 }, { 0, 0, 1 } },
! 78: { 1, { M, M, 123 }, { 0, 0, 124 } },
! 79: { 2, { M, M, 0 }, { 1, 0, 1 } },
! 80: { 2, { M, M, 123 }, { 1, 0, 124 } },
! 81: { M, { M, M, 0 }, { M-1, 0, 1 } },
! 82: { M, { M, M, 123 }, { M-1, 0, 124 } },
! 83:
! 84: { 1, { M, M, M, 0 }, { 0, 0, 0, 1 } },
! 85: { 1, { M, M, M, 123 }, { 0, 0, 0, 124 } },
! 86: { 2, { M, M, M, 0 }, { 1, 0, 0, 1 } },
! 87: { 2, { M, M, M, 123 }, { 1, 0, 0, 124 } },
! 88: { M, { M, M, M, 0 }, { M-1, 0, 0, 1 } },
! 89: { M, { M, M, M, 123 }, { M-1, 0, 0, 124 } },
! 90:
! 91: { 1, { M, M, M, M, 0 }, { 0, 0, 0, 0, 1 } },
! 92: { 1, { M, M, M, M, 123 }, { 0, 0, 0, 0, 124 } },
! 93: { 2, { M, M, M, M, 0 }, { 1, 0, 0, 0, 1 } },
! 94: { 2, { M, M, M, M, 123 }, { 1, 0, 0, 0, 124 } },
! 95: { M, { M, M, M, M, 0 }, { M-1, 0, 0, 0, 1 } },
! 96: { M, { M, M, M, M, 123 }, { M-1, 0, 0, 0, 124
! 97: #if defined (__hpux) && ! defined (__GNUC__)
! 98: /* Some versions (at least HP92453-01 B.11.11.23709.GP) of the
! 99: HP C compilers fail to zero-fill aggregates as the ISO C standard
! 100: requires (cf 6.5.7 Initialization). Compensate here: */
! 101: , 0, 0, 0, 0, 0
! 102: #endif
! 103: } }
! 104: };
! 105:
! 106: mp_limb_t got[SIZE];
! 107: int i;
! 108:
! 109: for (i = 0; i < numberof (data); i++)
! 110: {
! 111: refmpn_copyi (got, data[i].src, SIZE);
! 112: MPN_INCR_U (got, SIZE, data[i].n);
! 113: check_one ("check_incr (general)", i,
! 114: data[i].src, data[i].n,
! 115: got, data[i].want, SIZE);
! 116:
! 117: if (data[i].n == 1)
! 118: {
! 119: refmpn_copyi (got, data[i].src, SIZE);
! 120: MPN_INCR_U (got, SIZE, CNST_LIMB(1));
! 121: check_one ("check_incr (const 1)", i,
! 122: data[i].src, data[i].n,
! 123: got, data[i].want, SIZE);
! 124: }
! 125: }
! 126: }
! 127:
! 128: void
! 129: check_decr_data (void)
! 130: {
! 131: static const struct {
! 132: mp_limb_t n;
! 133: const mp_limb_t src[SIZE];
! 134: const mp_limb_t want[SIZE];
! 135: } data[] = {
! 136: { 1, { 1 }, { 0 } },
! 137: { 1, { 123 }, { 122 } },
! 138: { 1, { M }, { M-1 } },
! 139: { 2, { 2 }, { 0 } },
! 140: { 2, { 123 }, { 121 } },
! 141: { M, { M }, { 0 } },
! 142: { M-1, { M }, { 1 } },
! 143:
! 144: { 1, { 0, 1 }, { M, 0 } },
! 145: { 1, { 0, 123 }, { M, 122 } },
! 146: { 1, { 0, M }, { M, M-1 } },
! 147: { 2, { 0, 123 }, { M-1, 122 } },
! 148: { 2, { 1, 123 }, { M, 122 } },
! 149: { M, { 0, 123 }, { 1, 122 } },
! 150: { M, { M-1, M }, { M, M-1 } },
! 151:
! 152: { 1, { 0, 0, 1 }, { M, M, 0 } },
! 153: { 1, { 0, 0, 123 }, { M, M, 122 } },
! 154: { 1, { 0, 0, M }, { M, M, M-1 } },
! 155: { 2, { 0, 0, 123 }, { M-1, M, 122 } },
! 156: { 2, { 1, 0, 123 }, { M, M, 122 } },
! 157: { M, { 0, 0, 123 }, { 1, M, 122 } },
! 158: { M, { M-1, 0, M }, { M, M, M-1 } },
! 159:
! 160: { 1, { 0, 0, 0, 1 }, { M, M, M, 0 } },
! 161: { 1, { 0, 0, 0, 123 }, { M, M, M, 122 } },
! 162: { 1, { 0, 0, 0, M }, { M, M, M, M-1 } },
! 163: { 2, { 0, 0, 0, 123 }, { M-1, M, M, 122 } },
! 164: { 2, { 1, 0, 0, 123 }, { M, M, M, 122 } },
! 165: { M, { 0, 0, 0, 123 }, { 1, M, M, 122 } },
! 166: { M, { M-1, 0, 0, M }, { M, M, M, M-1 } },
! 167:
! 168: { 1, { 0, 0, 0, 0, 1 }, { M, M, M, M, 0 } },
! 169: { 1, { 0, 0, 0, 0, 123 }, { M, M, M, M, 122 } },
! 170: { 1, { 0, 0, 0, 0, M }, { M, M, M, M, M-1 } },
! 171: { 2, { 0, 0, 0, 0, 123 }, { M-1, M, M, M, 122 } },
! 172: { 2, { 1, 0, 0, 0, 123 }, { M, M, M, M, 122 } },
! 173: { M, { 0, 0, 0, 0, 123 }, { 1, M, M, M, 122 } },
! 174: { M, { M-1, 0, 0, 0, M }, { M, M, M, M, M-1 } },
! 175:
! 176: { 1, { 0, 0, 0, 0, 0, 1 }, { M, M, M, M, M, 0 } },
! 177: { 1, { 0, 0, 0, 0, 0, 123 }, { M, M, M, M, M, 122 } },
! 178: { 1, { 0, 0, 0, 0, 0, M }, { M, M, M, M, M, M-1 } },
! 179: { 2, { 0, 0, 0, 0, 0, 123 }, { M-1, M, M, M, M, 122 } },
! 180: { 2, { 1, 0, 0, 0, 0, 123 }, { M, M, M, M, M, 122 } },
! 181: { M, { 0, 0, 0, 0, 0, 123 }, { 1, M, M, M, M, 122 } },
! 182: { M, { M-1, 0, 0, 0, 0, M }, { M, M, M, M, M, M-1
! 183: #if defined (__hpux) && ! defined (__GNUC__)
! 184: /* For explanation of this garbage, see previous function. */
! 185: , 0, 0, 0, 0
! 186: #endif
! 187: } }
! 188: };
! 189:
! 190: mp_limb_t got[SIZE];
! 191: int i;
! 192:
! 193: for (i = 0; i < numberof (data); i++)
! 194: {
! 195: refmpn_copyi (got, data[i].src, SIZE);
! 196: MPN_DECR_U (got, SIZE, data[i].n);
! 197: check_one ("check_decr_data", i,
! 198: data[i].src, data[i].n,
! 199: got, data[i].want, SIZE);
! 200:
! 201: if (data[i].n == 1)
! 202: {
! 203: refmpn_copyi (got, data[i].src, SIZE);
! 204: MPN_DECR_U (got, SIZE, CNST_LIMB(1));
! 205: check_one ("check_decr (const 1)", i,
! 206: data[i].src, data[i].n,
! 207: got, data[i].want, SIZE);
! 208: }
! 209: }
! 210: }
! 211:
! 212:
! 213: int
! 214: main (void)
! 215: {
! 216: tests_start ();
! 217: mp_trace_base = -16;
! 218:
! 219: check_incr_data ();
! 220: check_decr_data ();
! 221:
! 222: tests_end ();
! 223: exit (0);
! 224: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>