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