t-fits.c revision 1.1.1.2 1 1.1 mrg /* Test mpf_fits_*_p
2 1.1 mrg
3 1.1 mrg Copyright 2001, 2002 Free Software Foundation, Inc.
4 1.1 mrg
5 1.1.1.2 mrg This file is part of the GNU MP Library test suite.
6 1.1 mrg
7 1.1.1.2 mrg The GNU MP Library test suite is free software; you can redistribute it
8 1.1.1.2 mrg and/or modify it under the terms of the GNU General Public License as
9 1.1.1.2 mrg published by the Free Software Foundation; either version 3 of the License,
10 1.1.1.2 mrg or (at your option) any later version.
11 1.1.1.2 mrg
12 1.1.1.2 mrg The GNU MP Library test suite is distributed in the hope that it will be
13 1.1.1.2 mrg useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
14 1.1.1.2 mrg MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
15 1.1.1.2 mrg Public License for more details.
16 1.1 mrg
17 1.1.1.2 mrg You should have received a copy of the GNU General Public License along with
18 1.1.1.2 mrg the GNU MP Library test suite. If not, see http://www.gnu.org/licenses/. */
19 1.1 mrg
20 1.1 mrg #include <stdio.h>
21 1.1 mrg #include <stdlib.h>
22 1.1 mrg #include "gmp.h"
23 1.1 mrg #include "gmp-impl.h"
24 1.1 mrg #include "tests.h"
25 1.1 mrg
26 1.1 mrg
27 1.1 mrg /* Nothing sophisticated here, just exercise mpf_fits_*_p on a small amount
28 1.1 mrg of data. */
29 1.1 mrg
30 1.1 mrg #define EXPECT_S(fun,name,answer) \
31 1.1 mrg got = fun (f); \
32 1.1 mrg if (got != answer) \
33 1.1 mrg { \
34 1.1 mrg printf ("%s (%s) got %d want %d\n", name, expr, got, answer); \
35 1.1 mrg printf (" f size %d exp %ld\n", SIZ(f), EXP(f)); \
36 1.1 mrg printf (" f dec "); mpf_out_str (stdout, 10, 0, f); printf ("\n"); \
37 1.1 mrg printf (" f hex "); mpf_out_str (stdout, 16, 0, f); printf ("\n"); \
38 1.1 mrg error = 1; \
39 1.1 mrg }
40 1.1 mrg
41 1.1 mrg #if HAVE_STRINGIZE
42 1.1 mrg #define EXPECT(fun,answer) EXPECT_S(fun,#fun,answer)
43 1.1 mrg #else
44 1.1 mrg #define EXPECT(fun,answer) EXPECT_S(fun,"fun",answer)
45 1.1 mrg #endif
46 1.1 mrg
47 1.1 mrg int
48 1.1 mrg main (void)
49 1.1 mrg {
50 1.1 mrg mpf_t f, f0p5;
51 1.1 mrg int got;
52 1.1 mrg const char *expr;
53 1.1 mrg int error = 0;
54 1.1 mrg
55 1.1 mrg tests_start ();
56 1.1 mrg mpf_init2 (f, 200L);
57 1.1 mrg mpf_init2 (f0p5, 200L);
58 1.1 mrg
59 1.1 mrg /* 0.5 */
60 1.1 mrg mpf_set_ui (f0p5, 1L);
61 1.1 mrg mpf_div_2exp (f0p5, f0p5, 1L);
62 1.1 mrg
63 1.1 mrg mpf_set_ui (f, 0L);
64 1.1 mrg expr = "0";
65 1.1 mrg EXPECT (mpf_fits_ulong_p, 1);
66 1.1 mrg EXPECT (mpf_fits_uint_p, 1);
67 1.1 mrg EXPECT (mpf_fits_ushort_p, 1);
68 1.1 mrg EXPECT (mpf_fits_slong_p, 1);
69 1.1 mrg EXPECT (mpf_fits_sint_p, 1);
70 1.1 mrg EXPECT (mpf_fits_sshort_p, 1);
71 1.1 mrg
72 1.1 mrg mpf_set_ui (f, 1L);
73 1.1 mrg expr = "1";
74 1.1 mrg EXPECT (mpf_fits_ulong_p, 1);
75 1.1 mrg EXPECT (mpf_fits_uint_p, 1);
76 1.1 mrg EXPECT (mpf_fits_ushort_p, 1);
77 1.1 mrg EXPECT (mpf_fits_slong_p, 1);
78 1.1 mrg EXPECT (mpf_fits_sint_p, 1);
79 1.1 mrg EXPECT (mpf_fits_sshort_p, 1);
80 1.1 mrg
81 1.1 mrg mpf_set_si (f, -1L);
82 1.1 mrg expr = "-1";
83 1.1 mrg EXPECT (mpf_fits_ulong_p, 0);
84 1.1 mrg EXPECT (mpf_fits_uint_p, 0);
85 1.1 mrg EXPECT (mpf_fits_ushort_p, 0);
86 1.1 mrg EXPECT (mpf_fits_slong_p, 1);
87 1.1 mrg EXPECT (mpf_fits_sint_p, 1);
88 1.1 mrg EXPECT (mpf_fits_sshort_p, 1);
89 1.1 mrg
90 1.1 mrg
91 1.1 mrg mpf_set_ui (f, (unsigned long) USHRT_MAX);
92 1.1 mrg expr = "USHRT_MAX";
93 1.1 mrg EXPECT (mpf_fits_ulong_p, 1);
94 1.1 mrg EXPECT (mpf_fits_uint_p, 1);
95 1.1 mrg EXPECT (mpf_fits_ushort_p, 1);
96 1.1 mrg
97 1.1 mrg mpf_set_ui (f, (unsigned long) USHRT_MAX);
98 1.1 mrg mpf_add (f, f, f0p5);
99 1.1 mrg expr = "USHRT_MAX + 0.5";
100 1.1 mrg EXPECT (mpf_fits_ulong_p, 1);
101 1.1 mrg EXPECT (mpf_fits_uint_p, 1);
102 1.1 mrg EXPECT (mpf_fits_ushort_p, 1);
103 1.1 mrg
104 1.1 mrg mpf_set_ui (f, (unsigned long) USHRT_MAX);
105 1.1 mrg mpf_add_ui (f, f, 1L);
106 1.1 mrg expr = "USHRT_MAX + 1";
107 1.1 mrg EXPECT (mpf_fits_ushort_p, 0);
108 1.1 mrg
109 1.1 mrg
110 1.1 mrg mpf_set_ui (f, (unsigned long) UINT_MAX);
111 1.1 mrg expr = "UINT_MAX";
112 1.1 mrg EXPECT (mpf_fits_ulong_p, 1);
113 1.1 mrg EXPECT (mpf_fits_uint_p, 1);
114 1.1 mrg
115 1.1 mrg mpf_set_ui (f, (unsigned long) UINT_MAX);
116 1.1 mrg mpf_add (f, f, f0p5);
117 1.1 mrg expr = "UINT_MAX + 0.5";
118 1.1 mrg EXPECT (mpf_fits_ulong_p, 1);
119 1.1 mrg EXPECT (mpf_fits_uint_p, 1);
120 1.1 mrg
121 1.1 mrg mpf_set_ui (f, (unsigned long) UINT_MAX);
122 1.1 mrg mpf_add_ui (f, f, 1L);
123 1.1 mrg expr = "UINT_MAX + 1";
124 1.1 mrg EXPECT (mpf_fits_uint_p, 0);
125 1.1 mrg
126 1.1 mrg
127 1.1 mrg mpf_set_ui (f, ULONG_MAX);
128 1.1 mrg expr = "ULONG_MAX";
129 1.1 mrg EXPECT (mpf_fits_ulong_p, 1);
130 1.1 mrg
131 1.1 mrg mpf_set_ui (f, ULONG_MAX);
132 1.1 mrg mpf_add (f, f, f0p5);
133 1.1 mrg expr = "ULONG_MAX + 0.5";
134 1.1 mrg EXPECT (mpf_fits_ulong_p, 1);
135 1.1 mrg
136 1.1 mrg mpf_set_ui (f, ULONG_MAX);
137 1.1 mrg mpf_add_ui (f, f, 1L);
138 1.1 mrg expr = "ULONG_MAX + 1";
139 1.1 mrg EXPECT (mpf_fits_ulong_p, 0);
140 1.1 mrg
141 1.1 mrg
142 1.1 mrg mpf_set_si (f, (long) SHRT_MAX);
143 1.1 mrg expr = "SHRT_MAX";
144 1.1 mrg EXPECT (mpf_fits_slong_p, 1);
145 1.1 mrg EXPECT (mpf_fits_sint_p, 1);
146 1.1 mrg EXPECT (mpf_fits_sshort_p, 1);
147 1.1 mrg
148 1.1 mrg mpf_set_si (f, (long) SHRT_MAX);
149 1.1 mrg expr = "SHRT_MAX + 0.5";
150 1.1 mrg mpf_add (f, f, f0p5);
151 1.1 mrg EXPECT (mpf_fits_slong_p, 1);
152 1.1 mrg EXPECT (mpf_fits_sint_p, 1);
153 1.1 mrg EXPECT (mpf_fits_sshort_p, 1);
154 1.1 mrg
155 1.1 mrg mpf_set_si (f, (long) SHRT_MAX);
156 1.1 mrg mpf_add_ui (f, f, 1L);
157 1.1 mrg expr = "SHRT_MAX + 1";
158 1.1 mrg EXPECT (mpf_fits_sshort_p, 0);
159 1.1 mrg
160 1.1 mrg
161 1.1 mrg mpf_set_si (f, (long) INT_MAX);
162 1.1 mrg expr = "INT_MAX";
163 1.1 mrg EXPECT (mpf_fits_slong_p, 1);
164 1.1 mrg EXPECT (mpf_fits_sint_p, 1);
165 1.1 mrg
166 1.1 mrg mpf_set_si (f, (long) INT_MAX);
167 1.1 mrg mpf_add (f, f, f0p5);
168 1.1 mrg expr = "INT_MAX + 0.5";
169 1.1 mrg EXPECT (mpf_fits_slong_p, 1);
170 1.1 mrg EXPECT (mpf_fits_sint_p, 1);
171 1.1 mrg
172 1.1 mrg mpf_set_si (f, (long) INT_MAX);
173 1.1 mrg mpf_add_ui (f, f, 1L);
174 1.1 mrg expr = "INT_MAX + 1";
175 1.1 mrg EXPECT (mpf_fits_sint_p, 0);
176 1.1 mrg
177 1.1 mrg
178 1.1 mrg mpf_set_si (f, LONG_MAX);
179 1.1 mrg expr = "LONG_MAX";
180 1.1 mrg EXPECT (mpf_fits_slong_p, 1);
181 1.1 mrg
182 1.1 mrg mpf_set_si (f, LONG_MAX);
183 1.1 mrg mpf_add (f, f, f0p5);
184 1.1 mrg expr = "LONG_MAX + 0.5";
185 1.1 mrg EXPECT (mpf_fits_slong_p, 1);
186 1.1 mrg
187 1.1 mrg mpf_set_si (f, LONG_MAX);
188 1.1 mrg mpf_add_ui (f, f, 1L);
189 1.1 mrg expr = "LONG_MAX + 1";
190 1.1 mrg EXPECT (mpf_fits_slong_p, 0);
191 1.1 mrg
192 1.1 mrg
193 1.1 mrg mpf_set_si (f, (long) SHRT_MIN);
194 1.1 mrg expr = "SHRT_MIN";
195 1.1 mrg EXPECT (mpf_fits_slong_p, 1);
196 1.1 mrg EXPECT (mpf_fits_sint_p, 1);
197 1.1 mrg EXPECT (mpf_fits_sshort_p, 1);
198 1.1 mrg
199 1.1 mrg mpf_set_si (f, (long) SHRT_MIN);
200 1.1 mrg mpf_sub (f, f, f0p5);
201 1.1 mrg expr = "SHRT_MIN - 0.5";
202 1.1 mrg EXPECT (mpf_fits_slong_p, 1);
203 1.1 mrg EXPECT (mpf_fits_sint_p, 1);
204 1.1 mrg EXPECT (mpf_fits_sshort_p, 1);
205 1.1 mrg
206 1.1 mrg mpf_set_si (f, (long) SHRT_MIN);
207 1.1 mrg mpf_sub_ui (f, f, 1L);
208 1.1 mrg expr = "SHRT_MIN + 1";
209 1.1 mrg EXPECT (mpf_fits_sshort_p, 0);
210 1.1 mrg
211 1.1 mrg
212 1.1 mrg mpf_set_si (f, (long) INT_MIN);
213 1.1 mrg expr = "INT_MIN";
214 1.1 mrg EXPECT (mpf_fits_slong_p, 1);
215 1.1 mrg EXPECT (mpf_fits_sint_p, 1);
216 1.1 mrg
217 1.1 mrg mpf_set_si (f, (long) INT_MIN);
218 1.1 mrg mpf_sub (f, f, f0p5);
219 1.1 mrg expr = "INT_MIN - 0.5";
220 1.1 mrg EXPECT (mpf_fits_slong_p, 1);
221 1.1 mrg EXPECT (mpf_fits_sint_p, 1);
222 1.1 mrg
223 1.1 mrg mpf_set_si (f, (long) INT_MIN);
224 1.1 mrg mpf_sub_ui (f, f, 1L);
225 1.1 mrg expr = "INT_MIN + 1";
226 1.1 mrg EXPECT (mpf_fits_sint_p, 0);
227 1.1 mrg
228 1.1 mrg
229 1.1 mrg mpf_set_si (f, LONG_MIN);
230 1.1 mrg expr = "LONG_MIN";
231 1.1 mrg EXPECT (mpf_fits_slong_p, 1);
232 1.1 mrg
233 1.1 mrg mpf_set_si (f, LONG_MIN);
234 1.1 mrg mpf_sub (f, f, f0p5);
235 1.1 mrg expr = "LONG_MIN - 0.5";
236 1.1 mrg EXPECT (mpf_fits_slong_p, 1);
237 1.1 mrg
238 1.1 mrg mpf_set_si (f, LONG_MIN);
239 1.1 mrg mpf_sub_ui (f, f, 1L);
240 1.1 mrg expr = "LONG_MIN + 1";
241 1.1 mrg EXPECT (mpf_fits_slong_p, 0);
242 1.1 mrg
243 1.1 mrg
244 1.1 mrg mpf_set_str_or_abort (f, "0.5", 10);
245 1.1 mrg expr = "0.5";
246 1.1 mrg EXPECT (mpf_fits_ulong_p, 1);
247 1.1 mrg EXPECT (mpf_fits_uint_p, 1);
248 1.1 mrg EXPECT (mpf_fits_ushort_p, 1);
249 1.1 mrg EXPECT (mpf_fits_slong_p, 1);
250 1.1 mrg EXPECT (mpf_fits_sint_p, 1);
251 1.1 mrg EXPECT (mpf_fits_sshort_p, 1);
252 1.1 mrg
253 1.1 mrg mpf_set_str_or_abort (f, "-0.5", 10);
254 1.1 mrg expr = "-0.5";
255 1.1 mrg EXPECT (mpf_fits_ulong_p, 0);
256 1.1 mrg EXPECT (mpf_fits_uint_p, 0);
257 1.1 mrg EXPECT (mpf_fits_ushort_p, 0);
258 1.1 mrg EXPECT (mpf_fits_slong_p, 1);
259 1.1 mrg EXPECT (mpf_fits_sint_p, 1);
260 1.1 mrg EXPECT (mpf_fits_sshort_p, 1);
261 1.1 mrg
262 1.1 mrg
263 1.1 mrg mpf_set_str_or_abort (f, "1.000000000000000000000000000000000001", 16);
264 1.1 mrg expr = "1.000000000000000000000000000000000001 base 16";
265 1.1 mrg EXPECT (mpf_fits_ulong_p, 1);
266 1.1 mrg EXPECT (mpf_fits_uint_p, 1);
267 1.1 mrg EXPECT (mpf_fits_ushort_p, 1);
268 1.1 mrg EXPECT (mpf_fits_slong_p, 1);
269 1.1 mrg EXPECT (mpf_fits_sint_p, 1);
270 1.1 mrg EXPECT (mpf_fits_sshort_p, 1);
271 1.1 mrg
272 1.1 mrg mpf_set_str_or_abort (f, "1@1000", 16);
273 1.1 mrg expr = "1@1000 base 16";
274 1.1 mrg EXPECT (mpf_fits_ulong_p, 0);
275 1.1 mrg EXPECT (mpf_fits_uint_p, 0);
276 1.1 mrg EXPECT (mpf_fits_ushort_p, 0);
277 1.1 mrg EXPECT (mpf_fits_slong_p, 0);
278 1.1 mrg EXPECT (mpf_fits_sint_p, 0);
279 1.1 mrg EXPECT (mpf_fits_sshort_p, 0);
280 1.1 mrg
281 1.1 mrg
282 1.1 mrg mpf_set_ui (f, 1L);
283 1.1 mrg mpf_mul_2exp (f, f, BITS_PER_ULONG + 1);
284 1.1 mrg mpf_sub_ui (f, f, 1L);
285 1.1 mrg expr = "2^(BITS_PER_ULONG+1) - 1";
286 1.1 mrg EXPECT (mpf_fits_ulong_p, 0);
287 1.1 mrg EXPECT (mpf_fits_uint_p, 0);
288 1.1 mrg EXPECT (mpf_fits_ushort_p, 0);
289 1.1 mrg EXPECT (mpf_fits_slong_p, 0);
290 1.1 mrg EXPECT (mpf_fits_sint_p, 0);
291 1.1 mrg EXPECT (mpf_fits_sshort_p, 0);
292 1.1 mrg
293 1.1 mrg mpf_set_ui (f, 1L);
294 1.1 mrg mpf_mul_2exp (f, f, BITS_PER_ULONG + 1);
295 1.1 mrg mpf_sub_ui (f, f, 1L);
296 1.1 mrg mpf_neg (f, f);
297 1.1 mrg expr = "- (2^(BITS_PER_ULONG+1) - 1)";
298 1.1 mrg EXPECT (mpf_fits_ulong_p, 0);
299 1.1 mrg EXPECT (mpf_fits_uint_p, 0);
300 1.1 mrg EXPECT (mpf_fits_ushort_p, 0);
301 1.1 mrg EXPECT (mpf_fits_slong_p, 0);
302 1.1 mrg EXPECT (mpf_fits_sint_p, 0);
303 1.1 mrg EXPECT (mpf_fits_sshort_p, 0);
304 1.1 mrg
305 1.1 mrg mpf_set_ui (f, 1L);
306 1.1 mrg mpf_mul_2exp (f, f, BITS_PER_ULONG + 5);
307 1.1 mrg mpf_sub_ui (f, f, 1L);
308 1.1 mrg expr = "2^(BITS_PER_ULONG+5) - 1";
309 1.1 mrg EXPECT (mpf_fits_ulong_p, 0);
310 1.1 mrg EXPECT (mpf_fits_uint_p, 0);
311 1.1 mrg EXPECT (mpf_fits_ushort_p, 0);
312 1.1 mrg EXPECT (mpf_fits_slong_p, 0);
313 1.1 mrg EXPECT (mpf_fits_sint_p, 0);
314 1.1 mrg EXPECT (mpf_fits_sshort_p, 0);
315 1.1 mrg
316 1.1 mrg
317 1.1 mrg if (error)
318 1.1 mrg abort ();
319 1.1 mrg
320 1.1 mrg mpf_clear (f);
321 1.1 mrg mpf_clear (f0p5);
322 1.1 mrg tests_end ();
323 1.1 mrg exit (0);
324 1.1 mrg }
325