| OLD | NEW |
| (Empty) |
| 1 /* Test file for mpfr_eint. | |
| 2 | |
| 3 Copyright 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. | |
| 4 Contributed by the Arenaire and Cacao projects, INRIA. | |
| 5 | |
| 6 This file is part of the GNU MPFR Library. | |
| 7 | |
| 8 The GNU MPFR 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 MPFR 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 MPFR Library; see the file COPYING.LIB. If not, write to | |
| 20 the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, | |
| 21 MA 02110-1301, USA. */ | |
| 22 | |
| 23 #include <stdio.h> | |
| 24 #include <stdlib.h> | |
| 25 | |
| 26 #include "mpfr-test.h" | |
| 27 | |
| 28 #define TEST_FUNCTION mpfr_eint | |
| 29 #define TEST_RANDOM_POS 8 | |
| 30 #define TEST_RANDOM_EMAX 40 | |
| 31 #include "tgeneric.c" | |
| 32 | |
| 33 static void | |
| 34 check_specials (void) | |
| 35 { | |
| 36 mpfr_t x, y; | |
| 37 | |
| 38 mpfr_init2 (x, 123L); | |
| 39 mpfr_init2 (y, 123L); | |
| 40 | |
| 41 mpfr_set_nan (x); | |
| 42 mpfr_eint (y, x, GMP_RNDN); | |
| 43 if (! mpfr_nan_p (y)) | |
| 44 { | |
| 45 printf ("Error: eint(NaN) != NaN\n"); | |
| 46 exit (1); | |
| 47 } | |
| 48 | |
| 49 mpfr_set_inf (x, 1); | |
| 50 mpfr_eint (y, x, GMP_RNDN); | |
| 51 if (! (mpfr_inf_p (y) && mpfr_sgn (y) > 0)) | |
| 52 { | |
| 53 printf ("Error: eint(+Inf) != +Inf\n"); | |
| 54 exit (1); | |
| 55 } | |
| 56 | |
| 57 mpfr_set_inf (x, -1); | |
| 58 mpfr_eint (y, x, GMP_RNDN); | |
| 59 if (! mpfr_nan_p (y)) | |
| 60 { | |
| 61 printf ("Error: eint(-Inf) != NaN\n"); | |
| 62 exit (1); | |
| 63 } | |
| 64 | |
| 65 /* eint(+/-0) = -Inf */ | |
| 66 mpfr_set_ui (x, 0, GMP_RNDN); | |
| 67 mpfr_eint (y, x, GMP_RNDN); | |
| 68 if (! (mpfr_inf_p (y) && mpfr_sgn (y) < 0)) | |
| 69 { | |
| 70 printf ("Error: eint(+0) != -Inf\n"); | |
| 71 exit (1); | |
| 72 } | |
| 73 mpfr_neg (x, x, GMP_RNDN); | |
| 74 mpfr_eint (y, x, GMP_RNDN); | |
| 75 if (! (mpfr_inf_p (y) && mpfr_sgn (y) < 0)) | |
| 76 { | |
| 77 printf ("Error: eint(-0) != -Inf\n"); | |
| 78 exit (1); | |
| 79 } | |
| 80 | |
| 81 /* eint(x) = NaN for x < 0 */ | |
| 82 mpfr_set_si (x, -1, GMP_RNDN); | |
| 83 mpfr_eint (y, x, GMP_RNDN); | |
| 84 if (! mpfr_nan_p (y)) | |
| 85 { | |
| 86 printf ("Error: eint(-1) != NaN\n"); | |
| 87 exit (1); | |
| 88 } | |
| 89 | |
| 90 mpfr_set_prec (x, 17); | |
| 91 mpfr_set_prec (y, 17); | |
| 92 mpfr_set_str_binary (x, "1.0111110100100110e-2"); | |
| 93 mpfr_set_str_binary (y, "-1.0010101001110100e-10"); | |
| 94 mpfr_eint (x, x, GMP_RNDZ); | |
| 95 if (mpfr_cmp (x, y)) | |
| 96 { | |
| 97 printf ("Error for x=1.0111110100100110e-2, GMP_RNDZ\n"); | |
| 98 printf ("expected "); mpfr_dump (y); | |
| 99 printf ("got "); mpfr_dump (x); | |
| 100 exit (1); | |
| 101 } | |
| 102 | |
| 103 mpfr_set_prec (x, 53); | |
| 104 mpfr_set_prec (y, 53); | |
| 105 mpfr_set_str_binary (x, "0.10E4"); | |
| 106 mpfr_eint (x, x, GMP_RNDN); | |
| 107 mpfr_set_str (y, "440.37989953483827", 10, GMP_RNDN); | |
| 108 if (mpfr_cmp (x, y) != 0) | |
| 109 { | |
| 110 printf ("Error for x=0.10E4, GMP_RNDZ\n"); | |
| 111 printf ("expected "); mpfr_dump (y); | |
| 112 printf ("got "); mpfr_dump (x); | |
| 113 exit (1); | |
| 114 } | |
| 115 | |
| 116 mpfr_set_prec (x, 63); | |
| 117 mpfr_set_prec (y, 63); | |
| 118 mpfr_set_str_binary (x, "1.011111010111001110000110100010001011010110000110011
11101011010e-2"); | |
| 119 mpfr_eint (x, x, GMP_RNDZ); | |
| 120 mpfr_set_str_binary (y, "1.110101100011010000010100100001000011110010001001000
00001011100e-17"); | |
| 121 if (mpfr_cmp (x, y) != 0) | |
| 122 { | |
| 123 printf ("Error (1) for GMP_RNDZ\n"); | |
| 124 printf ("expected "); mpfr_dump (y); | |
| 125 printf ("got "); mpfr_dump (x); | |
| 126 exit (1); | |
| 127 } | |
| 128 | |
| 129 /* check large x */ | |
| 130 mpfr_set_prec (x, 53); | |
| 131 mpfr_set_prec (y, 53); | |
| 132 mpfr_set_str_binary (x, "1E6"); | |
| 133 mpfr_eint (x, x, GMP_RNDN); | |
| 134 mpfr_set_str_binary (y, "10100011110001101001110000110010111000100111010001E37
"); | |
| 135 if (mpfr_cmp (x, y) != 0) | |
| 136 { | |
| 137 printf ("Error for x=2^6, GMP_RNDN\n"); | |
| 138 printf ("expected "); mpfr_dump (y); | |
| 139 printf ("got "); mpfr_dump (x); | |
| 140 exit (1); | |
| 141 } | |
| 142 mpfr_set_str_binary (x, "1E7"); | |
| 143 mpfr_eint (x, x, GMP_RNDN); | |
| 144 mpfr_set_str_binary (y, "11001100100011110000101001011010110111111011110011E12
8"); | |
| 145 if (mpfr_cmp (x, y) != 0) | |
| 146 { | |
| 147 printf ("Error for x=2^7, GMP_RNDN\n"); | |
| 148 printf ("expected "); mpfr_dump (y); | |
| 149 printf ("got "); mpfr_dump (x); | |
| 150 exit (1); | |
| 151 } | |
| 152 mpfr_set_str_binary (x, "1E8"); | |
| 153 mpfr_eint (x, x, GMP_RNDN); | |
| 154 mpfr_set_str_binary (y, "1010000110000101111111011011000101001000101011101001E
310"); | |
| 155 if (mpfr_cmp (x, y) != 0) | |
| 156 { | |
| 157 printf ("Error for x=2^8, GMP_RNDN\n"); | |
| 158 printf ("expected "); mpfr_dump (y); | |
| 159 printf ("got "); mpfr_dump (x); | |
| 160 exit (1); | |
| 161 } | |
| 162 mpfr_set_str_binary (x, "1E9"); | |
| 163 mpfr_eint (x, x, GMP_RNDN); | |
| 164 mpfr_set_str_binary (y, "11001010101000001010101101110000010110011101110010101
E677"); | |
| 165 if (mpfr_cmp (x, y) != 0) | |
| 166 { | |
| 167 printf ("Error for x=2^9, GMP_RNDN\n"); | |
| 168 printf ("expected "); mpfr_dump (y); | |
| 169 printf ("got "); mpfr_dump (x); | |
| 170 exit (1); | |
| 171 } | |
| 172 mpfr_set_str_binary (x, "1E10"); | |
| 173 mpfr_eint (x, x, GMP_RNDN); | |
| 174 mpfr_set_str_binary (y, "10011111111010010110110101101000101100101010101101101
E1415"); | |
| 175 if (mpfr_cmp (x, y) != 0) | |
| 176 { | |
| 177 printf ("Error for x=2^10, GMP_RNDN\n"); | |
| 178 printf ("expected "); mpfr_dump (y); | |
| 179 printf ("got "); mpfr_dump (x); | |
| 180 exit (1); | |
| 181 } | |
| 182 | |
| 183 mpfr_clear (x); | |
| 184 mpfr_clear (y); | |
| 185 } | |
| 186 | |
| 187 int | |
| 188 main (int argc, char *argv[]) | |
| 189 { | |
| 190 tests_start_mpfr (); | |
| 191 | |
| 192 if (argc != 1) /* teint x [prec] */ | |
| 193 { | |
| 194 mpfr_t x; | |
| 195 mp_prec_t p; | |
| 196 p = (argc < 3) ? 53 : atoi (argv[2]); | |
| 197 mpfr_init2 (x, p); | |
| 198 mpfr_set_str (x, argv[1], 10, GMP_RNDN); | |
| 199 printf ("eint("); | |
| 200 mpfr_out_str (stdout, 10, 0, x, GMP_RNDN); | |
| 201 printf (")="); | |
| 202 mpfr_eint (x, x, GMP_RNDN); | |
| 203 mpfr_out_str (stdout, 10, 0, x, GMP_RNDN); | |
| 204 printf ("\n"); | |
| 205 mpfr_clear (x); | |
| 206 } | |
| 207 else | |
| 208 { | |
| 209 check_specials (); | |
| 210 | |
| 211 test_generic (2, 100, 100); | |
| 212 } | |
| 213 | |
| 214 tests_end_mpfr (); | |
| 215 return 0; | |
| 216 } | |
| OLD | NEW |