3 Copyright 2001, 2002 Free Software Foundation, Inc.
5 This file is part of the GNU MP Library.
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 3 of the License, or (at your
10 option) any later version.
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.
17 You should have received a copy of the GNU Lesser General Public License
18 along with the GNU MP Library. If not, see http://www.gnu.org/licenses/. */
27 /* Nothing sophisticated here, just exercise mpf_fits_*_p on a small amount
30 #define EXPECT_S(fun,name,answer) \
34 printf ("%s (%s) got %d want %d\n", name, expr, got, answer); \
35 printf (" f size %d exp %ld\n", SIZ(f), EXP(f)); \
36 printf (" f dec "); mpf_out_str (stdout, 10, 0, f); printf ("\n"); \
37 printf (" f hex "); mpf_out_str (stdout, 16, 0, f); printf ("\n"); \
42 #define EXPECT(fun,answer) EXPECT_S(fun,#fun,answer)
44 #define EXPECT(fun,answer) EXPECT_S(fun,"fun",answer)
57 mpf_init2 (f0p5, 200L);
60 mpf_set_ui (f0p5, 1L);
61 mpf_div_2exp (f0p5, f0p5, 1L);
65 EXPECT (mpf_fits_ulong_p, 1);
66 EXPECT (mpf_fits_uint_p, 1);
67 EXPECT (mpf_fits_ushort_p, 1);
68 EXPECT (mpf_fits_slong_p, 1);
69 EXPECT (mpf_fits_sint_p, 1);
70 EXPECT (mpf_fits_sshort_p, 1);
74 EXPECT (mpf_fits_ulong_p, 1);
75 EXPECT (mpf_fits_uint_p, 1);
76 EXPECT (mpf_fits_ushort_p, 1);
77 EXPECT (mpf_fits_slong_p, 1);
78 EXPECT (mpf_fits_sint_p, 1);
79 EXPECT (mpf_fits_sshort_p, 1);
83 EXPECT (mpf_fits_ulong_p, 0);
84 EXPECT (mpf_fits_uint_p, 0);
85 EXPECT (mpf_fits_ushort_p, 0);
86 EXPECT (mpf_fits_slong_p, 1);
87 EXPECT (mpf_fits_sint_p, 1);
88 EXPECT (mpf_fits_sshort_p, 1);
91 mpf_set_ui (f, (unsigned long) USHRT_MAX);
93 EXPECT (mpf_fits_ulong_p, 1);
94 EXPECT (mpf_fits_uint_p, 1);
95 EXPECT (mpf_fits_ushort_p, 1);
97 mpf_set_ui (f, (unsigned long) USHRT_MAX);
99 expr = "USHRT_MAX + 0.5";
100 EXPECT (mpf_fits_ulong_p, 1);
101 EXPECT (mpf_fits_uint_p, 1);
102 EXPECT (mpf_fits_ushort_p, 1);
104 mpf_set_ui (f, (unsigned long) USHRT_MAX);
105 mpf_add_ui (f, f, 1L);
106 expr = "USHRT_MAX + 1";
107 EXPECT (mpf_fits_ushort_p, 0);
110 mpf_set_ui (f, (unsigned long) UINT_MAX);
112 EXPECT (mpf_fits_ulong_p, 1);
113 EXPECT (mpf_fits_uint_p, 1);
115 mpf_set_ui (f, (unsigned long) UINT_MAX);
116 mpf_add (f, f, f0p5);
117 expr = "UINT_MAX + 0.5";
118 EXPECT (mpf_fits_ulong_p, 1);
119 EXPECT (mpf_fits_uint_p, 1);
121 mpf_set_ui (f, (unsigned long) UINT_MAX);
122 mpf_add_ui (f, f, 1L);
123 expr = "UINT_MAX + 1";
124 EXPECT (mpf_fits_uint_p, 0);
127 mpf_set_ui (f, ULONG_MAX);
129 EXPECT (mpf_fits_ulong_p, 1);
131 mpf_set_ui (f, ULONG_MAX);
132 mpf_add (f, f, f0p5);
133 expr = "ULONG_MAX + 0.5";
134 EXPECT (mpf_fits_ulong_p, 1);
136 mpf_set_ui (f, ULONG_MAX);
137 mpf_add_ui (f, f, 1L);
138 expr = "ULONG_MAX + 1";
139 EXPECT (mpf_fits_ulong_p, 0);
142 mpf_set_si (f, (long) SHRT_MAX);
144 EXPECT (mpf_fits_slong_p, 1);
145 EXPECT (mpf_fits_sint_p, 1);
146 EXPECT (mpf_fits_sshort_p, 1);
148 mpf_set_si (f, (long) SHRT_MAX);
149 expr = "SHRT_MAX + 0.5";
150 mpf_add (f, f, f0p5);
151 EXPECT (mpf_fits_slong_p, 1);
152 EXPECT (mpf_fits_sint_p, 1);
153 EXPECT (mpf_fits_sshort_p, 1);
155 mpf_set_si (f, (long) SHRT_MAX);
156 mpf_add_ui (f, f, 1L);
157 expr = "SHRT_MAX + 1";
158 EXPECT (mpf_fits_sshort_p, 0);
161 mpf_set_si (f, (long) INT_MAX);
163 EXPECT (mpf_fits_slong_p, 1);
164 EXPECT (mpf_fits_sint_p, 1);
166 mpf_set_si (f, (long) INT_MAX);
167 mpf_add (f, f, f0p5);
168 expr = "INT_MAX + 0.5";
169 EXPECT (mpf_fits_slong_p, 1);
170 EXPECT (mpf_fits_sint_p, 1);
172 mpf_set_si (f, (long) INT_MAX);
173 mpf_add_ui (f, f, 1L);
174 expr = "INT_MAX + 1";
175 EXPECT (mpf_fits_sint_p, 0);
178 mpf_set_si (f, LONG_MAX);
180 EXPECT (mpf_fits_slong_p, 1);
182 mpf_set_si (f, LONG_MAX);
183 mpf_add (f, f, f0p5);
184 expr = "LONG_MAX + 0.5";
185 EXPECT (mpf_fits_slong_p, 1);
187 mpf_set_si (f, LONG_MAX);
188 mpf_add_ui (f, f, 1L);
189 expr = "LONG_MAX + 1";
190 EXPECT (mpf_fits_slong_p, 0);
193 mpf_set_si (f, (long) SHRT_MIN);
195 EXPECT (mpf_fits_slong_p, 1);
196 EXPECT (mpf_fits_sint_p, 1);
197 EXPECT (mpf_fits_sshort_p, 1);
199 mpf_set_si (f, (long) SHRT_MIN);
200 mpf_sub (f, f, f0p5);
201 expr = "SHRT_MIN - 0.5";
202 EXPECT (mpf_fits_slong_p, 1);
203 EXPECT (mpf_fits_sint_p, 1);
204 EXPECT (mpf_fits_sshort_p, 1);
206 mpf_set_si (f, (long) SHRT_MIN);
207 mpf_sub_ui (f, f, 1L);
208 expr = "SHRT_MIN + 1";
209 EXPECT (mpf_fits_sshort_p, 0);
212 mpf_set_si (f, (long) INT_MIN);
214 EXPECT (mpf_fits_slong_p, 1);
215 EXPECT (mpf_fits_sint_p, 1);
217 mpf_set_si (f, (long) INT_MIN);
218 mpf_sub (f, f, f0p5);
219 expr = "INT_MIN - 0.5";
220 EXPECT (mpf_fits_slong_p, 1);
221 EXPECT (mpf_fits_sint_p, 1);
223 mpf_set_si (f, (long) INT_MIN);
224 mpf_sub_ui (f, f, 1L);
225 expr = "INT_MIN + 1";
226 EXPECT (mpf_fits_sint_p, 0);
229 mpf_set_si (f, LONG_MIN);
231 EXPECT (mpf_fits_slong_p, 1);
233 mpf_set_si (f, LONG_MIN);
234 mpf_sub (f, f, f0p5);
235 expr = "LONG_MIN - 0.5";
236 EXPECT (mpf_fits_slong_p, 1);
238 mpf_set_si (f, LONG_MIN);
239 mpf_sub_ui (f, f, 1L);
240 expr = "LONG_MIN + 1";
241 EXPECT (mpf_fits_slong_p, 0);
244 mpf_set_str_or_abort (f, "0.5", 10);
246 EXPECT (mpf_fits_ulong_p, 1);
247 EXPECT (mpf_fits_uint_p, 1);
248 EXPECT (mpf_fits_ushort_p, 1);
249 EXPECT (mpf_fits_slong_p, 1);
250 EXPECT (mpf_fits_sint_p, 1);
251 EXPECT (mpf_fits_sshort_p, 1);
253 mpf_set_str_or_abort (f, "-0.5", 10);
255 EXPECT (mpf_fits_ulong_p, 0);
256 EXPECT (mpf_fits_uint_p, 0);
257 EXPECT (mpf_fits_ushort_p, 0);
258 EXPECT (mpf_fits_slong_p, 1);
259 EXPECT (mpf_fits_sint_p, 1);
260 EXPECT (mpf_fits_sshort_p, 1);
263 mpf_set_str_or_abort (f, "1.000000000000000000000000000000000001", 16);
264 expr = "1.000000000000000000000000000000000001 base 16";
265 EXPECT (mpf_fits_ulong_p, 1);
266 EXPECT (mpf_fits_uint_p, 1);
267 EXPECT (mpf_fits_ushort_p, 1);
268 EXPECT (mpf_fits_slong_p, 1);
269 EXPECT (mpf_fits_sint_p, 1);
270 EXPECT (mpf_fits_sshort_p, 1);
272 mpf_set_str_or_abort (f, "1@1000", 16);
273 expr = "1@1000 base 16";
274 EXPECT (mpf_fits_ulong_p, 0);
275 EXPECT (mpf_fits_uint_p, 0);
276 EXPECT (mpf_fits_ushort_p, 0);
277 EXPECT (mpf_fits_slong_p, 0);
278 EXPECT (mpf_fits_sint_p, 0);
279 EXPECT (mpf_fits_sshort_p, 0);
283 mpf_mul_2exp (f, f, BITS_PER_ULONG + 1);
284 mpf_sub_ui (f, f, 1L);
285 expr = "2^(BITS_PER_ULONG+1) - 1";
286 EXPECT (mpf_fits_ulong_p, 0);
287 EXPECT (mpf_fits_uint_p, 0);
288 EXPECT (mpf_fits_ushort_p, 0);
289 EXPECT (mpf_fits_slong_p, 0);
290 EXPECT (mpf_fits_sint_p, 0);
291 EXPECT (mpf_fits_sshort_p, 0);
294 mpf_mul_2exp (f, f, BITS_PER_ULONG + 1);
295 mpf_sub_ui (f, f, 1L);
297 expr = "- (2^(BITS_PER_ULONG+1) - 1)";
298 EXPECT (mpf_fits_ulong_p, 0);
299 EXPECT (mpf_fits_uint_p, 0);
300 EXPECT (mpf_fits_ushort_p, 0);
301 EXPECT (mpf_fits_slong_p, 0);
302 EXPECT (mpf_fits_sint_p, 0);
303 EXPECT (mpf_fits_sshort_p, 0);
306 mpf_mul_2exp (f, f, BITS_PER_ULONG + 5);
307 mpf_sub_ui (f, f, 1L);
308 expr = "2^(BITS_PER_ULONG+5) - 1";
309 EXPECT (mpf_fits_ulong_p, 0);
310 EXPECT (mpf_fits_uint_p, 0);
311 EXPECT (mpf_fits_ushort_p, 0);
312 EXPECT (mpf_fits_slong_p, 0);
313 EXPECT (mpf_fits_sint_p, 0);
314 EXPECT (mpf_fits_sshort_p, 0);