[BACK]Return to t-iord_u.c CVS log [TXT][DIR] Up to [local] / OpenXM_contrib / gmp / tests / mpn

Annotation of OpenXM_contrib/gmp/tests/mpn/t-iord_u.c, Revision 1.1.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>