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

Annotation of OpenXM_contrib/gmp/tests/mpf/t-fits.c, Revision 1.1.1.1

1.1       ohara       1: /* Test mpf_fits_*_p
                      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: #include <stdio.h>
                     23: #include <stdlib.h>
                     24: #include "gmp.h"
                     25: #include "gmp-impl.h"
                     26: #include "tests.h"
                     27:
                     28:
                     29: /* Nothing sophisticated here, just exercise mpf_fits_*_p on a small amount
                     30:    of data. */
                     31:
                     32: #define EXPECT_S(fun,name,answer)                                        \
                     33:   got = fun (f);                                                         \
                     34:   if (got != answer)                                                     \
                     35:     {                                                                    \
                     36:       printf ("%s (%s) got %d want %d\n", name, expr, got, answer);      \
                     37:       printf (" f size %d exp %ld\n", SIZ(f), EXP(f));                   \
                     38:       printf (" f dec "); mpf_out_str (stdout, 10, 0, f); printf ("\n"); \
                     39:       printf (" f hex "); mpf_out_str (stdout, 16, 0, f); printf ("\n"); \
                     40:       error = 1;                                                         \
                     41:     }
                     42:
                     43: #if HAVE_STRINGIZE
                     44: #define EXPECT(fun,answer)  EXPECT_S(fun,#fun,answer)
                     45: #else
                     46: #define EXPECT(fun,answer)  EXPECT_S(fun,"fun",answer)
                     47: #endif
                     48:
                     49: int
                     50: main (void)
                     51: {
                     52:   mpf_t       f, f0p5;
                     53:   int         got;
                     54:   const char  *expr;
                     55:   int         error = 0;
                     56:
                     57:   tests_start ();
                     58:   mpf_init2 (f, 200L);
                     59:   mpf_init2 (f0p5, 200L);
                     60:
                     61:   /* 0.5 */
                     62:   mpf_set_ui (f0p5, 1L);
                     63:   mpf_div_2exp (f0p5, f0p5, 1L);
                     64:
                     65:   mpf_set_ui (f, 0L);
                     66:   expr = "0";
                     67:   EXPECT (mpf_fits_ulong_p, 1);
                     68:   EXPECT (mpf_fits_uint_p, 1);
                     69:   EXPECT (mpf_fits_ushort_p, 1);
                     70:   EXPECT (mpf_fits_slong_p, 1);
                     71:   EXPECT (mpf_fits_sint_p, 1);
                     72:   EXPECT (mpf_fits_sshort_p, 1);
                     73:
                     74:   mpf_set_ui (f, 1L);
                     75:   expr = "1";
                     76:   EXPECT (mpf_fits_ulong_p, 1);
                     77:   EXPECT (mpf_fits_uint_p, 1);
                     78:   EXPECT (mpf_fits_ushort_p, 1);
                     79:   EXPECT (mpf_fits_slong_p, 1);
                     80:   EXPECT (mpf_fits_sint_p, 1);
                     81:   EXPECT (mpf_fits_sshort_p, 1);
                     82:
                     83:   mpf_set_si (f, -1L);
                     84:   expr = "-1";
                     85:   EXPECT (mpf_fits_ulong_p, 0);
                     86:   EXPECT (mpf_fits_uint_p, 0);
                     87:   EXPECT (mpf_fits_ushort_p, 0);
                     88:   EXPECT (mpf_fits_slong_p, 1);
                     89:   EXPECT (mpf_fits_sint_p, 1);
                     90:   EXPECT (mpf_fits_sshort_p, 1);
                     91:
                     92:
                     93:   mpf_set_ui (f, (unsigned long) USHRT_MAX);
                     94:   expr = "USHRT_MAX";
                     95:   EXPECT (mpf_fits_ulong_p, 1);
                     96:   EXPECT (mpf_fits_uint_p, 1);
                     97:   EXPECT (mpf_fits_ushort_p, 1);
                     98:
                     99:   mpf_set_ui (f, (unsigned long) USHRT_MAX);
                    100:   mpf_add (f, f, f0p5);
                    101:   expr = "USHRT_MAX + 0.5";
                    102:   EXPECT (mpf_fits_ulong_p, 1);
                    103:   EXPECT (mpf_fits_uint_p, 1);
                    104:   EXPECT (mpf_fits_ushort_p, 1);
                    105:
                    106:   mpf_set_ui (f, (unsigned long) USHRT_MAX);
                    107:   mpf_add_ui (f, f, 1L);
                    108:   expr = "USHRT_MAX + 1";
                    109:   EXPECT (mpf_fits_ushort_p, 0);
                    110:
                    111:
                    112:   mpf_set_ui (f, (unsigned long) UINT_MAX);
                    113:   expr = "UINT_MAX";
                    114:   EXPECT (mpf_fits_ulong_p, 1);
                    115:   EXPECT (mpf_fits_uint_p, 1);
                    116:
                    117:   mpf_set_ui (f, (unsigned long) UINT_MAX);
                    118:   mpf_add (f, f, f0p5);
                    119:   expr = "UINT_MAX + 0.5";
                    120:   EXPECT (mpf_fits_ulong_p, 1);
                    121:   EXPECT (mpf_fits_uint_p, 1);
                    122:
                    123:   mpf_set_ui (f, (unsigned long) UINT_MAX);
                    124:   mpf_add_ui (f, f, 1L);
                    125:   expr = "UINT_MAX + 1";
                    126:   EXPECT (mpf_fits_uint_p, 0);
                    127:
                    128:
                    129:   mpf_set_ui (f, ULONG_MAX);
                    130:   expr = "ULONG_MAX";
                    131:   EXPECT (mpf_fits_ulong_p, 1);
                    132:
                    133:   mpf_set_ui (f, ULONG_MAX);
                    134:   mpf_add (f, f, f0p5);
                    135:   expr = "ULONG_MAX + 0.5";
                    136:   EXPECT (mpf_fits_ulong_p, 1);
                    137:
                    138:   mpf_set_ui (f, ULONG_MAX);
                    139:   mpf_add_ui (f, f, 1L);
                    140:   expr = "ULONG_MAX + 1";
                    141:   EXPECT (mpf_fits_ulong_p, 0);
                    142:
                    143:
                    144:   mpf_set_si (f, (long) SHRT_MAX);
                    145:   expr = "SHRT_MAX";
                    146:   EXPECT (mpf_fits_slong_p, 1);
                    147:   EXPECT (mpf_fits_sint_p, 1);
                    148:   EXPECT (mpf_fits_sshort_p, 1);
                    149:
                    150:   mpf_set_si (f, (long) SHRT_MAX);
                    151:   expr = "SHRT_MAX + 0.5";
                    152:   mpf_add (f, f, f0p5);
                    153:   EXPECT (mpf_fits_slong_p, 1);
                    154:   EXPECT (mpf_fits_sint_p, 1);
                    155:   EXPECT (mpf_fits_sshort_p, 1);
                    156:
                    157:   mpf_set_si (f, (long) SHRT_MAX);
                    158:   mpf_add_ui (f, f, 1L);
                    159:   expr = "SHRT_MAX + 1";
                    160:   EXPECT (mpf_fits_sshort_p, 0);
                    161:
                    162:
                    163:   mpf_set_si (f, (long) INT_MAX);
                    164:   expr = "INT_MAX";
                    165:   EXPECT (mpf_fits_slong_p, 1);
                    166:   EXPECT (mpf_fits_sint_p, 1);
                    167:
                    168:   mpf_set_si (f, (long) INT_MAX);
                    169:   mpf_add (f, f, f0p5);
                    170:   expr = "INT_MAX + 0.5";
                    171:   EXPECT (mpf_fits_slong_p, 1);
                    172:   EXPECT (mpf_fits_sint_p, 1);
                    173:
                    174:   mpf_set_si (f, (long) INT_MAX);
                    175:   mpf_add_ui (f, f, 1L);
                    176:   expr = "INT_MAX + 1";
                    177:   EXPECT (mpf_fits_sint_p, 0);
                    178:
                    179:
                    180:   mpf_set_si (f, LONG_MAX);
                    181:   expr = "LONG_MAX";
                    182:   EXPECT (mpf_fits_slong_p, 1);
                    183:
                    184:   mpf_set_si (f, LONG_MAX);
                    185:   mpf_add (f, f, f0p5);
                    186:   expr = "LONG_MAX + 0.5";
                    187:   EXPECT (mpf_fits_slong_p, 1);
                    188:
                    189:   mpf_set_si (f, LONG_MAX);
                    190:   mpf_add_ui (f, f, 1L);
                    191:   expr = "LONG_MAX + 1";
                    192:   EXPECT (mpf_fits_slong_p, 0);
                    193:
                    194:
                    195:   mpf_set_si (f, (long) SHRT_MIN);
                    196:   expr = "SHRT_MIN";
                    197:   EXPECT (mpf_fits_slong_p, 1);
                    198:   EXPECT (mpf_fits_sint_p, 1);
                    199:   EXPECT (mpf_fits_sshort_p, 1);
                    200:
                    201:   mpf_set_si (f, (long) SHRT_MIN);
                    202:   mpf_sub (f, f, f0p5);
                    203:   expr = "SHRT_MIN - 0.5";
                    204:   EXPECT (mpf_fits_slong_p, 1);
                    205:   EXPECT (mpf_fits_sint_p, 1);
                    206:   EXPECT (mpf_fits_sshort_p, 1);
                    207:
                    208:   mpf_set_si (f, (long) SHRT_MIN);
                    209:   mpf_sub_ui (f, f, 1L);
                    210:   expr = "SHRT_MIN + 1";
                    211:   EXPECT (mpf_fits_sshort_p, 0);
                    212:
                    213:
                    214:   mpf_set_si (f, (long) INT_MIN);
                    215:   expr = "INT_MIN";
                    216:   EXPECT (mpf_fits_slong_p, 1);
                    217:   EXPECT (mpf_fits_sint_p, 1);
                    218:
                    219:   mpf_set_si (f, (long) INT_MIN);
                    220:   mpf_sub (f, f, f0p5);
                    221:   expr = "INT_MIN - 0.5";
                    222:   EXPECT (mpf_fits_slong_p, 1);
                    223:   EXPECT (mpf_fits_sint_p, 1);
                    224:
                    225:   mpf_set_si (f, (long) INT_MIN);
                    226:   mpf_sub_ui (f, f, 1L);
                    227:   expr = "INT_MIN + 1";
                    228:   EXPECT (mpf_fits_sint_p, 0);
                    229:
                    230:
                    231:   mpf_set_si (f, LONG_MIN);
                    232:   expr = "LONG_MIN";
                    233:   EXPECT (mpf_fits_slong_p, 1);
                    234:
                    235:   mpf_set_si (f, LONG_MIN);
                    236:   mpf_sub (f, f, f0p5);
                    237:   expr = "LONG_MIN - 0.5";
                    238:   EXPECT (mpf_fits_slong_p, 1);
                    239:
                    240:   mpf_set_si (f, LONG_MIN);
                    241:   mpf_sub_ui (f, f, 1L);
                    242:   expr = "LONG_MIN + 1";
                    243:   EXPECT (mpf_fits_slong_p, 0);
                    244:
                    245:
                    246:   mpf_set_str_or_abort (f, "0.5", 10);
                    247:   expr = "0.5";
                    248:   EXPECT (mpf_fits_ulong_p, 1);
                    249:   EXPECT (mpf_fits_uint_p, 1);
                    250:   EXPECT (mpf_fits_ushort_p, 1);
                    251:   EXPECT (mpf_fits_slong_p, 1);
                    252:   EXPECT (mpf_fits_sint_p, 1);
                    253:   EXPECT (mpf_fits_sshort_p, 1);
                    254:
                    255:   mpf_set_str_or_abort (f, "-0.5", 10);
                    256:   expr = "-0.5";
                    257:   EXPECT (mpf_fits_ulong_p, 0);
                    258:   EXPECT (mpf_fits_uint_p, 0);
                    259:   EXPECT (mpf_fits_ushort_p, 0);
                    260:   EXPECT (mpf_fits_slong_p, 1);
                    261:   EXPECT (mpf_fits_sint_p, 1);
                    262:   EXPECT (mpf_fits_sshort_p, 1);
                    263:
                    264:
                    265:   mpf_set_str_or_abort (f, "1.000000000000000000000000000000000001", 16);
                    266:   expr = "1.000000000000000000000000000000000001 base 16";
                    267:   EXPECT (mpf_fits_ulong_p, 1);
                    268:   EXPECT (mpf_fits_uint_p, 1);
                    269:   EXPECT (mpf_fits_ushort_p, 1);
                    270:   EXPECT (mpf_fits_slong_p, 1);
                    271:   EXPECT (mpf_fits_sint_p, 1);
                    272:   EXPECT (mpf_fits_sshort_p, 1);
                    273:
                    274:   mpf_set_str_or_abort (f, "1@1000", 16);
                    275:   expr = "1@1000 base 16";
                    276:   EXPECT (mpf_fits_ulong_p, 0);
                    277:   EXPECT (mpf_fits_uint_p, 0);
                    278:   EXPECT (mpf_fits_ushort_p, 0);
                    279:   EXPECT (mpf_fits_slong_p, 0);
                    280:   EXPECT (mpf_fits_sint_p, 0);
                    281:   EXPECT (mpf_fits_sshort_p, 0);
                    282:
                    283:
                    284:   mpf_set_ui (f, 1L);
                    285:   mpf_mul_2exp (f, f, BITS_PER_ULONG + 1);
                    286:   mpf_sub_ui (f, f, 1L);
                    287:   expr = "2^(BITS_PER_ULONG+1) - 1";
                    288:   EXPECT (mpf_fits_ulong_p, 0);
                    289:   EXPECT (mpf_fits_uint_p, 0);
                    290:   EXPECT (mpf_fits_ushort_p, 0);
                    291:   EXPECT (mpf_fits_slong_p, 0);
                    292:   EXPECT (mpf_fits_sint_p, 0);
                    293:   EXPECT (mpf_fits_sshort_p, 0);
                    294:
                    295:   mpf_set_ui (f, 1L);
                    296:   mpf_mul_2exp (f, f, BITS_PER_ULONG + 1);
                    297:   mpf_sub_ui (f, f, 1L);
                    298:   mpf_neg (f, f);
                    299:   expr = "- (2^(BITS_PER_ULONG+1) - 1)";
                    300:   EXPECT (mpf_fits_ulong_p, 0);
                    301:   EXPECT (mpf_fits_uint_p, 0);
                    302:   EXPECT (mpf_fits_ushort_p, 0);
                    303:   EXPECT (mpf_fits_slong_p, 0);
                    304:   EXPECT (mpf_fits_sint_p, 0);
                    305:   EXPECT (mpf_fits_sshort_p, 0);
                    306:
                    307:   mpf_set_ui (f, 1L);
                    308:   mpf_mul_2exp (f, f, BITS_PER_ULONG + 5);
                    309:   mpf_sub_ui (f, f, 1L);
                    310:   expr = "2^(BITS_PER_ULONG+5) - 1";
                    311:   EXPECT (mpf_fits_ulong_p, 0);
                    312:   EXPECT (mpf_fits_uint_p, 0);
                    313:   EXPECT (mpf_fits_ushort_p, 0);
                    314:   EXPECT (mpf_fits_slong_p, 0);
                    315:   EXPECT (mpf_fits_sint_p, 0);
                    316:   EXPECT (mpf_fits_sshort_p, 0);
                    317:
                    318:
                    319:   if (error)
                    320:     abort ();
                    321:
                    322:   mpf_clear (f);
                    323:   mpf_clear (f0p5);
                    324:   tests_end ();
                    325:   exit (0);
                    326: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>