[BACK]Return to reuse.c CVS log [TXT][DIR] Up to [local] / OpenXM_contrib / gmp / mpfr / tests

Annotation of OpenXM_contrib/gmp/mpfr/tests/reuse.c, Revision 1.1

1.1     ! ohara       1: /* Test file for in-place operations.
        !             2:
        !             3: Copyright 2000, 2001, 2002 Free Software Foundation.
        !             4:
        !             5: This file is part of the MPFR Library.
        !             6:
        !             7: The MPFR 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 MPFR 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 MPFR 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 "mpfr.h"
        !            26: #include "mpfr-impl.h"
        !            27:
        !            28: typedef void (*fct_t)();
        !            29: fct_t testfunc;
        !            30:
        !            31: void test3 _PROTO ((char *, mp_prec_t, mp_rnd_t));
        !            32: void test4 _PROTO ((char *, mp_prec_t, mp_rnd_t));
        !            33: void test3a _PROTO ((char *, mp_prec_t, mp_rnd_t));
        !            34: void test2ui _PROTO ((char *, mp_prec_t, mp_rnd_t));
        !            35: void testui2 _PROTO ((char *, mp_prec_t, mp_rnd_t));
        !            36: void test2 _PROTO ((char *, mp_prec_t, mp_rnd_t));
        !            37: void test2a _PROTO ((char *, mp_prec_t));
        !            38: int mpfr_compare _PROTO ((mpfr_t, mpfr_t));
        !            39:
        !            40: /* same than mpfr_cmp, but returns 0 for both NaN's */
        !            41: int
        !            42: mpfr_compare (mpfr_t a, mpfr_t b)
        !            43: {
        !            44:   return (MPFR_IS_NAN(a)) ? !MPFR_IS_NAN(b) :
        !            45:     (MPFR_IS_NAN(b) || mpfr_cmp(a, b));
        !            46: }
        !            47:
        !            48: void
        !            49: test3 (char *foo, mp_prec_t prec, mp_rnd_t rnd)
        !            50: {
        !            51:   mpfr_t ref1, ref2, ref3;
        !            52:   mpfr_t res1;
        !            53:   int i;
        !            54:
        !            55: #ifdef DEBUG
        !            56:   printf("checking %s\n", foo);
        !            57: #endif
        !            58:   mpfr_init2 (ref1, prec);
        !            59:   mpfr_init2 (ref2, prec);
        !            60:   mpfr_init2 (ref3, prec);
        !            61:   mpfr_init2 (res1, prec);
        !            62:
        !            63:   /* for each variable, consider each of the following 6 possibilities:
        !            64:      NaN, +Infinity, -Infinity, +0, -0 or a random number */
        !            65:   for (i=0; i<36; i++) {
        !            66:     if (i%6==0) mpfr_set_nan (ref2);
        !            67:     if (i%6==1) mpfr_set_inf (ref2, 1);
        !            68:     if (i%6==2) mpfr_set_inf (ref2, -1);
        !            69:     if (i%6==3) mpfr_set_d (ref2, 0.0, GMP_RNDN);
        !            70:     if (i%6==4) mpfr_set_d (ref2, -0.0, GMP_RNDN);
        !            71:     if (i%6==5) mpfr_random (ref2);
        !            72:
        !            73:     if (i/6==0) mpfr_set_nan (ref3);
        !            74:     if (i/6==1) mpfr_set_inf (ref3, 1);
        !            75:     if (i/6==2) mpfr_set_inf (ref3, -1);
        !            76:     if (i/6==3) mpfr_set_d (ref3, 0.0, GMP_RNDN);
        !            77:     if (i/6==4) mpfr_set_d (ref3, -0.0, GMP_RNDN);
        !            78:     if (i/6==5) mpfr_random (ref3);
        !            79:
        !            80:     /* reference call: foo(a, b, c) */
        !            81:     testfunc (ref1, ref2, ref3, rnd);
        !            82:
        !            83:     /* foo(a, a, c) */
        !            84:     mpfr_set (res1, ref2, rnd); /* exact operation */
        !            85:     testfunc (res1, res1, ref3, rnd);
        !            86:
        !            87:     if (mpfr_compare (res1, ref1)) {
        !            88:       fprintf (stderr, "Error for %s(a, a, c) for a=%e, c=%e\n", foo,
        !            89:               mpfr_get_d1 (ref2), mpfr_get_d1 (ref3));
        !            90:       fprintf (stderr, "expected %e, got %e\n", mpfr_get_d1 (ref1),
        !            91:               mpfr_get_d1 (res1));
        !            92:       exit (1);
        !            93:     }
        !            94:
        !            95:     /* foo(a, b, a) */
        !            96:     mpfr_set (res1, ref3, rnd);
        !            97:     testfunc (res1, ref2, res1, rnd);
        !            98:     if (mpfr_compare (res1, ref1)) {
        !            99:       fprintf (stderr, "Error for %s(a, b, a) for b=%e, a=%e\n", foo,
        !           100:               mpfr_get_d1 (ref2), mpfr_get_d1 (ref3));
        !           101:       fprintf (stderr, "expected %e, got %e\n", mpfr_get_d1 (ref1),
        !           102:               mpfr_get_d1 (res1));
        !           103:       exit (1);
        !           104:     }
        !           105:
        !           106:     /* foo(a, a, a) */
        !           107:     mpfr_set (ref3, ref2, rnd);
        !           108:     testfunc (ref1, ref2, ref3, rnd);
        !           109:     mpfr_set (res1, ref2, rnd);
        !           110:     testfunc (res1, res1, res1, rnd);
        !           111:
        !           112:    if (mpfr_compare (res1, ref1)) {
        !           113:       fprintf (stderr, "Error for %s(a, a, a) for a=%e\n", foo,
        !           114:               mpfr_get_d1 (ref2));
        !           115:       fprintf (stderr, "expected %e, got %e\n", mpfr_get_d1 (ref1),
        !           116:               mpfr_get_d1 (res1));
        !           117:       exit (1);
        !           118:     }
        !           119:   }
        !           120:
        !           121:   mpfr_clear (ref1);
        !           122:   mpfr_clear (ref2);
        !           123:   mpfr_clear (ref3);
        !           124:   mpfr_clear (res1);
        !           125: }
        !           126:
        !           127: void
        !           128: test4 (char *foo, mp_prec_t prec, mp_rnd_t rnd)
        !           129: {
        !           130:   mpfr_t ref, op1, op2, op3;
        !           131:   mpfr_t res;
        !           132:   int i, j, k;
        !           133:
        !           134: #ifdef DEBUG
        !           135:   printf("checking %s\n", foo);
        !           136: #endif
        !           137:   mpfr_init2 (ref, prec);
        !           138:   mpfr_init2 (op1, prec);
        !           139:   mpfr_init2 (op2, prec);
        !           140:   mpfr_init2 (op3, prec);
        !           141:   mpfr_init2 (res, prec);
        !           142:
        !           143:   /* for each variable, consider each of the following 6 possibilities:
        !           144:      NaN, +Infinity, -Infinity, +0, -0 or a random number */
        !           145:
        !           146:   for (i=0; i<6; i++)
        !           147:     {
        !           148:
        !           149:       MPFR_CLEAR_FLAGS(op1);
        !           150:       if (i==0) mpfr_set_nan (op1);
        !           151:       if (i==1) mpfr_set_inf (op1, 1);
        !           152:       if (i==2) mpfr_set_inf (op1, -1);
        !           153:       if (i==3) mpfr_set_d (op1, 0.0, GMP_RNDN);
        !           154:       if (i==4) mpfr_set_d (op1, -0.0, GMP_RNDN);
        !           155:       if (i==5) mpfr_random (op1);
        !           156:
        !           157:       for (j=0; j<6; j++)
        !           158:         {
        !           159:
        !           160:           MPFR_CLEAR_FLAGS(op2);
        !           161:           if (j==0) mpfr_set_nan (op2);
        !           162:           if (j==1) mpfr_set_inf (op2, 1);
        !           163:           if (j==2) mpfr_set_inf (op2, -1);
        !           164:           if (j==3) mpfr_set_d (op2, 0.0, GMP_RNDN);
        !           165:           if (j==4) mpfr_set_d (op2, -0.0, GMP_RNDN);
        !           166:           if (j==5) mpfr_random (op2);
        !           167:
        !           168:           for (k=0; k<6; k++)
        !           169:             {
        !           170:
        !           171:               MPFR_CLEAR_FLAGS(op3);
        !           172:               if (k==0) mpfr_set_nan (op3);
        !           173:               if (k==1) mpfr_set_inf (op3, 1);
        !           174:               if (k==2) mpfr_set_inf (op3, -1);
        !           175:               if (k==3) mpfr_set_d (op3, 0.0, GMP_RNDN);
        !           176:               if (k==4) mpfr_set_d (op3, -0.0, GMP_RNDN);
        !           177:               if (k==5) mpfr_random (op3);
        !           178:
        !           179:               /* reference call: foo(s, a, b, c) */
        !           180:               testfunc (ref, op1, op2, op3, rnd);
        !           181:
        !           182:               /* foo(a, a, b, c) */
        !           183:               mpfr_set (res, op1, rnd); /* exact operation */
        !           184:               testfunc (res, res, op2, op3, rnd);
        !           185:
        !           186:               if (mpfr_compare (res, ref))
        !           187:               {
        !           188:                 fprintf (stderr,
        !           189:                          "Error for %s(a, a, b, c) for a=%e, b=%e, c=%e\n",
        !           190:                          foo,
        !           191:                          mpfr_get_d1 (op1), mpfr_get_d1 (op2), mpfr_get_d1 (op3));
        !           192:                 fprintf (stderr, "expected %e, got %e\n", mpfr_get_d1 (ref),
        !           193:                          mpfr_get_d1 (res));
        !           194:                 exit (1);
        !           195:               }
        !           196:
        !           197:               /* foo(b, a, b, c) */
        !           198:               mpfr_set (res, op2, rnd);
        !           199:               testfunc (res, op1, res, op3, rnd);
        !           200:
        !           201:              if (mpfr_compare (res, ref))
        !           202:               {
        !           203:                 fprintf (stderr,
        !           204:                          "Error for %s(b, a, b, c) for a=%e, b=%e, c=%e\n",
        !           205:                          foo,
        !           206:                          mpfr_get_d1 (op1), mpfr_get_d1 (op2), mpfr_get_d1 (op3));
        !           207:                 fprintf (stderr, "expected %e, got %e\n", mpfr_get_d1 (ref),
        !           208:                          mpfr_get_d1 (res));
        !           209:                 exit (1);
        !           210:               }
        !           211:
        !           212:               /* foo(c, a, b, c) */
        !           213:               mpfr_set (res, op3, rnd);
        !           214:               testfunc (res, op1, op2, res, rnd);
        !           215:
        !           216:              if (mpfr_compare (res, ref))
        !           217:               {
        !           218:                 fprintf (stderr,
        !           219:                          "Error for %s(c, a, b, c) for a=%e, b=%e, c=%e\n",
        !           220:                          foo,
        !           221:                          mpfr_get_d1 (op1), mpfr_get_d1 (op2), mpfr_get_d1 (op3));
        !           222:                 fprintf (stderr, "expected %e, got %e\n", mpfr_get_d1 (ref),
        !           223:                          mpfr_get_d1 (res));
        !           224:                 exit (1);
        !           225:               }
        !           226:
        !           227:               /* foo(a, a, a,c) */
        !           228:              testfunc (ref, op1, op1, op3, rnd);
        !           229:              mpfr_set (res, op1, rnd);
        !           230:              testfunc (res, res, res, op3, rnd);
        !           231:              if (mpfr_compare (res, ref))
        !           232:               {
        !           233:                 fprintf (stderr,
        !           234:                          "Error for %s(a, a, a, c) for a=%e, a=%e, c=%e\n",
        !           235:                          foo,
        !           236:                          mpfr_get_d1 (op1), mpfr_get_d1 (op2), mpfr_get_d1 (op3));
        !           237:                 fprintf (stderr, "expected %e, got %e\n", mpfr_get_d1 (ref),
        !           238:                          mpfr_get_d1 (res));
        !           239:                 exit (1);
        !           240:               }
        !           241:
        !           242:               /* foo(a, a, b,a) */
        !           243:               testfunc (ref, op1, op2, op1, rnd);
        !           244:               mpfr_set (res, op1, rnd);
        !           245:               testfunc (res, res, op2, res, rnd);
        !           246:               if (mpfr_compare (res, ref))
        !           247:                {
        !           248:                  fprintf (stderr,
        !           249:                           "Error for %s(a, a, b, a) for a=%e, a=%e, c=%e\n",
        !           250:                           foo,
        !           251:                        mpfr_get_d1 (op1), mpfr_get_d1 (op2), mpfr_get_d1 (op3));
        !           252:                  fprintf (stderr, "expected %e, got %e\n", mpfr_get_d1 (ref),
        !           253:                           mpfr_get_d1 (res));
        !           254:                  exit (1);
        !           255:                }
        !           256:
        !           257:               /* foo(b, a, b, b) */
        !           258:               testfunc (ref, op1, op2, op2, rnd);
        !           259:               mpfr_set (res, op2, rnd);
        !           260:               testfunc (res, op1, res, res, rnd);
        !           261:               if (mpfr_compare (res, ref))
        !           262:                {
        !           263:                  fprintf (stderr,
        !           264:                           "Error for %s(b, a, b, b) for a=%e, a=%e, c=%e\n",
        !           265:                           foo,
        !           266:                         mpfr_get_d1 (op1), mpfr_get_d1 (op2), mpfr_get_d1 (op3));
        !           267:                  fprintf (stderr, "expected %e, got %e\n", mpfr_get_d1 (ref),
        !           268:                           mpfr_get_d1 (res));
        !           269:                  exit (1);
        !           270:                }
        !           271:
        !           272:               /* foo (a, a, a, a) */
        !           273:               testfunc (ref, op1, op1, op1 ,rnd);
        !           274:               mpfr_set (res, op1, rnd);
        !           275:               testfunc (res, res, res, res, rnd);
        !           276:               if (mpfr_compare (res, ref))
        !           277:                {
        !           278:                  fprintf (stderr,
        !           279:                           "Error for %s(a, a, a, a) for a=%e\n", foo,
        !           280:                           mpfr_get_d1 (op1));
        !           281:                  fprintf (stderr, "expected %e, got %e\n", mpfr_get_d1 (ref),
        !           282:                           mpfr_get_d1 (res));
        !           283:                  exit (1);
        !           284:                }
        !           285:             }
        !           286:         }
        !           287:     }
        !           288:
        !           289:   mpfr_clear (ref);
        !           290:   mpfr_clear (op1);
        !           291:   mpfr_clear (op2);
        !           292:   mpfr_clear (op3);
        !           293:   mpfr_clear (res);
        !           294:
        !           295: }
        !           296:
        !           297: void
        !           298: test2ui (char *foo, mp_prec_t prec, mp_rnd_t rnd)
        !           299: {
        !           300:   mpfr_t ref1, ref2;
        !           301:   unsigned int ref3;
        !           302:   mp_limb_t c[1];
        !           303:   mpfr_t res1;
        !           304:   int i;
        !           305:
        !           306: #ifdef DEBUG
        !           307:   printf("checking %s\n", foo);
        !           308: #endif
        !           309:   mpfr_init2 (ref1, prec);
        !           310:   mpfr_init2 (ref2, prec);
        !           311:   mpfr_init2 (res1, prec);
        !           312:
        !           313:
        !           314:
        !           315:   /* ref2 can be NaN, +Inf, -Inf, +0, -0 or any number
        !           316:      ref3 can be 0 or any number */
        !           317:   for (i=0; i<12; i++)
        !           318:     {
        !           319:       if (i%6==0) mpfr_set_nan (ref2);
        !           320:       if (i%6==1) mpfr_set_inf (ref2, 1);
        !           321:       if (i%6==2) mpfr_set_inf (ref2, -1);
        !           322:       if (i%6==3) mpfr_set_d (ref2, 0.0, GMP_RNDN);
        !           323:       if (i%6==4) mpfr_set_d (ref2, -0.0, GMP_RNDN);
        !           324:       if (i%6==5) mpfr_random (ref2);
        !           325:
        !           326:       if (i/6==0)
        !           327:        ref3=0;
        !           328:       else
        !           329:        {
        !           330:          mpn_random (c, 1);
        !           331:          ref3 = (unsigned int) c[0];
        !           332:        }
        !           333:
        !           334:       /* reference call: foo(a, b, c) */
        !           335:       testfunc (ref1, ref2, ref3, rnd);
        !           336:
        !           337:       /* foo(a, a, c) */
        !           338:       mpfr_set (res1, ref2, rnd); /* exact operation */
        !           339:       testfunc (res1, res1, ref3, rnd);
        !           340:
        !           341:       if (mpfr_compare (res1, ref1))
        !           342:        {
        !           343:          fprintf (stderr, "Error for %s(a, a, c) for a=%e c=%u\n", foo,
        !           344:               mpfr_get_d1 (ref2), ref3);
        !           345:          fprintf (stderr, "expected %e, got %e\n", mpfr_get_d1 (ref1),
        !           346:               mpfr_get_d1 (res1));
        !           347:          exit (1);
        !           348:        }
        !           349:     }
        !           350:
        !           351:   mpfr_clear (ref1);
        !           352:   mpfr_clear (ref2);
        !           353:   mpfr_clear (res1);
        !           354: }
        !           355:
        !           356: void
        !           357: testui2 (char *foo, mp_prec_t prec, mp_rnd_t rnd)
        !           358: {
        !           359:   mpfr_t ref1, ref3;
        !           360:   unsigned int ref2;
        !           361:   mp_limb_t c[1];
        !           362:   mpfr_t res1;
        !           363:   int i;
        !           364:
        !           365: #ifdef DEBUG
        !           366:   printf("checking %s\n", foo);
        !           367: #endif
        !           368:   mpfr_init2 (ref1, prec);
        !           369:   mpfr_init2 (ref3, prec);
        !           370:   mpfr_init2 (res1, prec);
        !           371:   mpfr_random (ref3);
        !           372:   mpn_random (c, 1);
        !           373:   ref2 = (unsigned int) c[0];
        !           374:
        !           375:   for (i=0; i<12; i++) {
        !           376:     if (i%6==0) mpfr_set_nan (ref3);
        !           377:     if (i%6==1) mpfr_set_inf (ref3, 1);
        !           378:     if (i%6==2) mpfr_set_inf (ref3, -1);
        !           379:     if (i%6==3) mpfr_set_d (ref3, 0.0, GMP_RNDN);
        !           380:     if (i%6==4) mpfr_set_d (ref3, -0.0, GMP_RNDN);
        !           381:     if (i%6==5) mpfr_random (ref3);
        !           382:
        !           383:     if (i/6==0) ref2=0;
        !           384:     else {
        !           385:       mpn_random (c, 1);
        !           386:       ref2 = (unsigned int) c[0];
        !           387:     }
        !           388:
        !           389:     /* reference call: foo(a, b, c) */
        !           390:     testfunc (ref1, ref2, ref3, rnd);
        !           391:
        !           392:     /* foo(a, b, a) */
        !           393:     mpfr_set (res1, ref3, rnd); /* exact operation */
        !           394:     testfunc (res1, ref2, res1, rnd);
        !           395:     if (mpfr_compare (res1, ref1)) {
        !           396:       fprintf (stderr, "Error for %s(a, b, a) for b=%u a=%e\n", foo,
        !           397:               ref2, mpfr_get_d1 (ref3));
        !           398:       fprintf (stderr, "expected %e, got %e\n", mpfr_get_d1 (ref1),
        !           399:               mpfr_get_d1 (res1));
        !           400:       exit (1);
        !           401:     }
        !           402:   }
        !           403:
        !           404:   mpfr_clear (ref1);
        !           405:   mpfr_clear (ref3);
        !           406:   mpfr_clear (res1);
        !           407: }
        !           408:
        !           409: /* foo(mpfr_ptr, mpfr_srcptr, mp_rndt) */
        !           410: void
        !           411: test2 (char *foo, mp_prec_t prec, mp_rnd_t rnd)
        !           412: {
        !           413:   mpfr_t ref1, ref2;
        !           414:   mpfr_t res1;
        !           415:   int i;
        !           416:
        !           417: #ifdef DEBUG
        !           418:   printf("checking %s\n", foo);
        !           419: #endif
        !           420:   mpfr_init2 (ref1, prec);
        !           421:   mpfr_init2 (ref2, prec);
        !           422:   mpfr_init2 (res1, prec);
        !           423:   mpfr_random (ref2);
        !           424:
        !           425:   for (i=0; i<6; i++) {
        !           426:     if (i==0) mpfr_set_nan (ref2);
        !           427:     if (i==1) mpfr_set_inf (ref2, 1);
        !           428:     if (i==2) mpfr_set_inf (ref2, -1);
        !           429:     if (i==3) mpfr_set_d (ref2, 0.0, GMP_RNDN);
        !           430:     if (i==4) mpfr_set_d (ref2, -0.0, GMP_RNDN);
        !           431:     if (i==5) mpfr_random (ref2);
        !           432:
        !           433:     /* reference call: foo(a, b) */
        !           434:     testfunc (ref1, ref2, rnd);
        !           435:
        !           436:     /* foo(a, a) */
        !           437:     mpfr_set (res1, ref2, rnd); /* exact operation */
        !           438:     testfunc (res1, res1, rnd);
        !           439:     if (mpfr_compare (res1, ref1)) {
        !           440:       fprintf (stderr, "Error for %s(a, a) for a=%e\n", foo, mpfr_get_d1 (ref2));
        !           441:       fprintf (stderr, "expected %e, got %e\n", mpfr_get_d1 (ref1),
        !           442:               mpfr_get_d1 (res1));
        !           443:       exit (1);
        !           444:     }
        !           445:   }
        !           446:
        !           447:   mpfr_clear (ref1);
        !           448:   mpfr_clear (ref2);
        !           449:   mpfr_clear (res1);
        !           450: }
        !           451:
        !           452: /* foo(mpfr_ptr, mpfr_srcptr) */
        !           453: void
        !           454: test2a (char *foo, mp_prec_t prec)
        !           455: {
        !           456:   mpfr_t ref1, ref2;
        !           457:   mpfr_t res1;
        !           458:   int i;
        !           459:
        !           460: #ifdef DEBUG
        !           461:   printf("checking %s\n", foo);
        !           462: #endif
        !           463:   mpfr_init2 (ref1, prec);
        !           464:   mpfr_init2 (ref2, prec);
        !           465:   mpfr_init2 (res1, prec);
        !           466:   mpfr_random (ref2);
        !           467:
        !           468:   for (i=0; i<6; i++) {
        !           469:     if (i==0) mpfr_set_nan (ref2);
        !           470:     if (i==1) mpfr_set_inf (ref2, 1);
        !           471:     if (i==2) mpfr_set_inf (ref2, -1);
        !           472:     if (i==3) mpfr_set_d (ref2, 0.0, GMP_RNDN);
        !           473:     if (i==4) mpfr_set_d (ref2, -0.0, GMP_RNDN);
        !           474:     if (i==5) mpfr_random (ref2);
        !           475:
        !           476:     /* reference call: foo(a, b) */
        !           477:     testfunc (ref1, ref2);
        !           478:
        !           479:     /* foo(a, a) */
        !           480:     mpfr_set (res1, ref2, GMP_RNDN); /* exact operation */
        !           481:     testfunc (res1, res1);
        !           482:     if (mpfr_compare (res1, ref1)) {
        !           483:       fprintf (stderr, "Error for %s(a, a) for a=%e\n", foo, mpfr_get_d1 (ref2));
        !           484:       fprintf (stderr, "expected %e, got %e\n", mpfr_get_d1 (ref1),
        !           485:               mpfr_get_d1 (res1));
        !           486:       exit (1);
        !           487:     }
        !           488:   }
        !           489:
        !           490:   mpfr_clear (ref1);
        !           491:   mpfr_clear (ref2);
        !           492:   mpfr_clear (res1);
        !           493: }
        !           494:
        !           495: /* one operand, two results */
        !           496: void
        !           497: test3a (char *foo, mp_prec_t prec, mp_rnd_t rnd)
        !           498: {
        !           499:   mpfr_t ref1, ref2, ref3;
        !           500:   mpfr_t res1, res2;
        !           501:   int i;
        !           502:
        !           503: #ifdef DEBUG
        !           504:   printf("checking %s\n", foo);
        !           505: #endif
        !           506:   mpfr_init2 (ref1, prec);
        !           507:   mpfr_init2 (ref2, prec);
        !           508:   mpfr_init2 (ref3, prec);
        !           509:   mpfr_init2 (res1, prec);
        !           510:   mpfr_init2 (res2, prec);
        !           511:   mpfr_random (ref3);
        !           512:
        !           513:   for (i=0; i<6; i++) {
        !           514:     if (i==0) mpfr_set_nan (ref3);
        !           515:     if (i==1) mpfr_set_inf (ref3, 1);
        !           516:     if (i==2) mpfr_set_inf (ref3, -1);
        !           517:     if (i==3) mpfr_set_d (ref3, 0.0, GMP_RNDN);
        !           518:     if (i==4) mpfr_set_d (ref3, -0.0, GMP_RNDN);
        !           519:     if (i==5) mpfr_random (ref3);
        !           520:
        !           521:      /* reference call: foo(a, b, c) */
        !           522:      testfunc (ref1, ref2, ref3, rnd);
        !           523:
        !           524:      /* foo(a, b, a) */
        !           525:      mpfr_set (res1, ref3, rnd); /* exact operation */
        !           526:      testfunc (res1, res2, res1, rnd);
        !           527:      if (mpfr_compare (res1, ref1) || mpfr_compare (res2, ref2)) {
        !           528:        fprintf (stderr, "Error for %s(a, b, a) for a=%e\n", foo, mpfr_get_d1 (ref3));
        !           529:        fprintf (stderr, "expected (%e,%e), got (%e,%e)\n", mpfr_get_d1 (ref1),
        !           530:                mpfr_get_d1 (ref2), mpfr_get_d1 (res1), mpfr_get_d1 (res2));
        !           531:        exit (1);
        !           532:      }
        !           533:
        !           534:      /* foo(a, b, b) */
        !           535:      mpfr_set (res2, ref3, rnd); /* exact operation */
        !           536:      testfunc (res1, res2, res2, rnd);
        !           537:      if (mpfr_compare (res1, ref1) || mpfr_compare (res2, ref2)) {
        !           538:        fprintf (stderr, "Error for %s(a, b, b) for b=%e\n", foo, mpfr_get_d1 (ref3));
        !           539:        fprintf (stderr, "expected (%e,%e), got (%e,%e)\n", mpfr_get_d1 (ref1),
        !           540:                mpfr_get_d1 (ref2), mpfr_get_d1 (res1), mpfr_get_d1 (res2));
        !           541:        exit (1);
        !           542:      }
        !           543:   }
        !           544:
        !           545:   mpfr_clear (ref1);
        !           546:   mpfr_clear (ref2);
        !           547:   mpfr_clear (ref3);
        !           548:   mpfr_clear (res1);
        !           549:   mpfr_clear (res2);
        !           550: }
        !           551:
        !           552: int
        !           553: main (void)
        !           554: {
        !           555:   testfunc = (fct_t) mpfr_add; test3 ("mpfr_add", 53, GMP_RNDN);
        !           556:   testfunc = (fct_t) mpfr_add_ui; test2ui ("mpfr_add_ui", 53, GMP_RNDN);
        !           557:   testfunc = (fct_t) mpfr_agm; test3 ("mpfr_agm", 53, GMP_RNDN);
        !           558:   testfunc = (fct_t) mpfr_ceil; test2 ("mpfr_ceil", 53, GMP_RNDN);
        !           559:   testfunc = (fct_t) mpfr_div; test3 ("mpfr_div", 53, GMP_RNDN);
        !           560:   testfunc = (fct_t) mpfr_div_2exp; test2ui ("mpfr_div_2exp", 53, GMP_RNDN);
        !           561:   testfunc = (fct_t) mpfr_div_ui; test2ui ("mpfr_div_ui", 53, GMP_RNDN);
        !           562:   testfunc = (fct_t) mpfr_exp; test2 ("mpfr_exp", 53, GMP_RNDN);
        !           563:   testfunc = (fct_t) mpfr_floor; test2 ("mpfr_floor", 53, GMP_RNDN);
        !           564:   testfunc = (fct_t) mpfr_log; test2 ("mpfr_log", 53, GMP_RNDN);
        !           565:   testfunc = (fct_t) mpfr_mul; test3 ("mpfr_mul", 53, GMP_RNDN);
        !           566:   testfunc = (fct_t) mpfr_mul_2exp; test2ui ("mpfr_mul_2exp", 53, GMP_RNDN);
        !           567:   testfunc = (fct_t) mpfr_mul_ui; test2ui ("mpfr_mul_ui", 53, GMP_RNDN);
        !           568:   testfunc = (fct_t) mpfr_neg; test2 ("mpfr_neg", 53, GMP_RNDN);
        !           569:   testfunc = (fct_t) mpfr_pow_ui; test2ui ("mpfr_pow_ui", 53, GMP_RNDN);
        !           570:   testfunc = (fct_t) mpfr_reldiff; test3 ("mpfr_reldiff", 53, GMP_RNDN);
        !           571:   testfunc = (fct_t) mpfr_sub; test3 ("mpfr_sub", 53, GMP_RNDN);
        !           572:   testfunc = (fct_t) mpfr_sub_ui; test2ui ("mpfr_sub_ui", 53, GMP_RNDN);
        !           573:   testfunc = (fct_t) mpfr_sqrt; test2 ("mpfr_sqrt", 53, GMP_RNDN);
        !           574:   testfunc = (fct_t) mpfr_ui_div; testui2 ("mpfr_ui_div", 53, GMP_RNDN);
        !           575:   testfunc = (fct_t) mpfr_ui_sub; testui2 ("mpfr_ui_sub", 53, GMP_RNDN);
        !           576:   testfunc = (fct_t) mpfr_trunc; test2 ("mpfr_trunc", 53, GMP_RNDN);
        !           577:   testfunc = (fct_t) mpfr_asin; test2 ("mpfr_asin", 53, GMP_RNDN);
        !           578:   testfunc = (fct_t) mpfr_acos; test2 ("mpfr_acos", 53, GMP_RNDN);
        !           579:   testfunc = (fct_t) mpfr_atan; test2 ("mpfr_atan", 53, GMP_RNDN);
        !           580:   testfunc = (fct_t) mpfr_sinh; test2 ("mpfr_sinh", 53, GMP_RNDN);
        !           581:   testfunc = (fct_t) mpfr_cosh; test2 ("mpfr_cosh", 53, GMP_RNDN);
        !           582:   testfunc = (fct_t) mpfr_tanh; test2 ("mpfr_tanh", 53, GMP_RNDN);
        !           583:   testfunc = (fct_t) mpfr_asinh; test2 ("mpfr_asinh", 53, GMP_RNDN);
        !           584:   testfunc = (fct_t) mpfr_acosh; test2 ("mpfr_acosh", 53, GMP_RNDN);
        !           585:   testfunc = (fct_t) mpfr_atanh; test2 ("mpfr_atanh", 53, GMP_RNDN);
        !           586:   testfunc = (fct_t) mpfr_exp2; test2 ("mpfr_exp2", 53, GMP_RNDN);
        !           587:   testfunc = (fct_t) mpfr_cos; test2 ("mpfr_cos", 53, GMP_RNDN);
        !           588:   testfunc = (fct_t) mpfr_sin; test2 ("mpfr_sin", 53, GMP_RNDN);
        !           589:   testfunc = (fct_t) mpfr_tan; test2 ("mpfr_tan", 53, GMP_RNDN);
        !           590:   testfunc = (fct_t) mpfr_log10; test2 ("mpfr_log10", 53, GMP_RNDN);
        !           591:   testfunc = (fct_t) mpfr_log2; test2 ("mpfr_log2", 53, GMP_RNDN);
        !           592:   testfunc = (fct_t) mpfr_pow; test3 ("mpfr_pow", 53, GMP_RNDN);
        !           593:   testfunc = (fct_t) mpfr_fma; test4 ("mpfr_fma", 53, GMP_RNDN);
        !           594:   return 0;
        !           595: }

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