1 /* Test mpz_fits_*_p */
4 Copyright 2001 Free Software Foundation, Inc.
6 This file is part of the GNU MP Library.
8 The GNU MP 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 3 of the License, or (at your
11 option) any later version.
13 The GNU MP 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.
18 You should have received a copy of the GNU Lesser General Public License
19 along with the GNU MP Library. If not, see http://www.gnu.org/licenses/. */
28 /* Nothing sophisticated here, just exercise mpz_fits_*_p on a small amount
31 #define EXPECT_S(fun,name,answer) \
35 printf ("%s (%s) got %d want %d\n", name, expr, got, answer); \
36 printf (" z size %d\n", SIZ(z)); \
37 printf (" z dec "); mpz_out_str (stdout, 10, z); printf ("\n"); \
38 printf (" z hex "); mpz_out_str (stdout, 16, z); printf ("\n"); \
43 #define EXPECT(fun,answer) EXPECT_S(fun,#fun,answer)
45 #define EXPECT(fun,answer) EXPECT_S(fun,"fun",answer)
61 EXPECT (mpz_fits_ulong_p, 1);
62 EXPECT (mpz_fits_uint_p, 1);
63 EXPECT (mpz_fits_ushort_p, 1);
64 EXPECT (mpz_fits_slong_p, 1);
65 EXPECT (mpz_fits_sint_p, 1);
66 EXPECT (mpz_fits_sshort_p, 1);
70 EXPECT (mpz_fits_ulong_p, 1);
71 EXPECT (mpz_fits_uint_p, 1);
72 EXPECT (mpz_fits_ushort_p, 1);
73 EXPECT (mpz_fits_slong_p, 1);
74 EXPECT (mpz_fits_sint_p, 1);
75 EXPECT (mpz_fits_sshort_p, 1);
79 EXPECT (mpz_fits_ulong_p, 0);
80 EXPECT (mpz_fits_uint_p, 0);
81 EXPECT (mpz_fits_ushort_p, 0);
82 EXPECT (mpz_fits_slong_p, 1);
83 EXPECT (mpz_fits_sint_p, 1);
84 EXPECT (mpz_fits_sshort_p, 1);
87 mpz_mul_2exp (z, z, 5L*GMP_LIMB_BITS);
89 EXPECT (mpz_fits_ulong_p, 0);
90 EXPECT (mpz_fits_uint_p, 0);
91 EXPECT (mpz_fits_ushort_p, 0);
92 EXPECT (mpz_fits_slong_p, 0);
93 EXPECT (mpz_fits_sint_p, 0);
94 EXPECT (mpz_fits_sshort_p, 0);
97 mpz_set_ui (z, (unsigned long) USHRT_MAX);
99 EXPECT (mpz_fits_ulong_p, 1);
100 EXPECT (mpz_fits_uint_p, 1);
101 EXPECT (mpz_fits_ushort_p, 1);
103 mpz_set_ui (z, (unsigned long) USHRT_MAX);
104 mpz_add_ui (z, z, 1L);
105 expr = "USHRT_MAX + 1";
106 EXPECT (mpz_fits_ushort_p, 0);
109 mpz_set_ui (z, (unsigned long) UINT_MAX);
111 EXPECT (mpz_fits_ulong_p, 1);
112 EXPECT (mpz_fits_uint_p, 1);
114 mpz_set_ui (z, (unsigned long) UINT_MAX);
115 mpz_add_ui (z, z, 1L);
116 expr = "UINT_MAX + 1";
117 EXPECT (mpz_fits_uint_p, 0);
120 mpz_set_ui (z, ULONG_MAX);
122 EXPECT (mpz_fits_ulong_p, 1);
124 mpz_set_ui (z, ULONG_MAX);
125 mpz_add_ui (z, z, 1L);
126 expr = "ULONG_MAX + 1";
127 EXPECT (mpz_fits_ulong_p, 0);
130 mpz_set_si (z, (long) SHRT_MAX);
132 EXPECT (mpz_fits_slong_p, 1);
133 EXPECT (mpz_fits_sint_p, 1);
134 EXPECT (mpz_fits_sshort_p, 1);
136 mpz_set_si (z, (long) SHRT_MAX);
137 mpz_add_ui (z, z, 1L);
138 expr = "SHRT_MAX + 1";
139 EXPECT (mpz_fits_sshort_p, 0);
142 mpz_set_si (z, (long) INT_MAX);
144 EXPECT (mpz_fits_slong_p, 1);
145 EXPECT (mpz_fits_sint_p, 1);
147 mpz_set_si (z, (long) INT_MAX);
148 mpz_add_ui (z, z, 1L);
149 expr = "INT_MAX + 1";
150 EXPECT (mpz_fits_sint_p, 0);
153 mpz_set_si (z, LONG_MAX);
155 EXPECT (mpz_fits_slong_p, 1);
157 mpz_set_si (z, LONG_MAX);
158 mpz_add_ui (z, z, 1L);
159 expr = "LONG_MAX + 1";
160 EXPECT (mpz_fits_slong_p, 0);
163 mpz_set_si (z, (long) SHRT_MIN);
165 EXPECT (mpz_fits_slong_p, 1);
166 EXPECT (mpz_fits_sint_p, 1);
167 EXPECT (mpz_fits_sshort_p, 1);
169 mpz_set_si (z, (long) SHRT_MIN);
170 mpz_sub_ui (z, z, 1L);
171 expr = "SHRT_MIN + 1";
172 EXPECT (mpz_fits_sshort_p, 0);
175 mpz_set_si (z, (long) INT_MIN);
177 EXPECT (mpz_fits_slong_p, 1);
178 EXPECT (mpz_fits_sint_p, 1);
180 mpz_set_si (z, (long) INT_MIN);
181 mpz_sub_ui (z, z, 1L);
182 expr = "INT_MIN + 1";
183 EXPECT (mpz_fits_sint_p, 0);
186 mpz_set_si (z, LONG_MIN);
188 EXPECT (mpz_fits_slong_p, 1);
190 mpz_set_si (z, LONG_MIN);
191 mpz_sub_ui (z, z, 1L);
192 expr = "LONG_MIN + 1";
193 EXPECT (mpz_fits_slong_p, 0);