t-fits.c revision 1.1.1.1
1/* Test mpz_fits_*_p */ 2 3/* 4Copyright 2001 Free Software Foundation, Inc. 5 6This file is part of the GNU MP Library. 7 8The GNU MP Library is free software; you can redistribute it and/or modify 9it under the terms of the GNU Lesser General Public License as published by 10the Free Software Foundation; either version 3 of the License, or (at your 11option) any later version. 12 13The GNU MP Library is distributed in the hope that it will be useful, but 14WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 15or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public 16License for more details. 17 18You should have received a copy of the GNU Lesser General Public License 19along with the GNU MP Library. If not, see http://www.gnu.org/licenses/. */ 20 21#include <stdio.h> 22#include <stdlib.h> 23#include "gmp.h" 24#include "gmp-impl.h" 25#include "tests.h" 26 27 28/* Nothing sophisticated here, just exercise mpz_fits_*_p on a small amount 29 of data. */ 30 31#define EXPECT_S(fun,name,answer) \ 32 got = fun (z); \ 33 if (got != answer) \ 34 { \ 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"); \ 39 error = 1; \ 40 } 41 42#if HAVE_STRINGIZE 43#define EXPECT(fun,answer) EXPECT_S(fun,#fun,answer) 44#else 45#define EXPECT(fun,answer) EXPECT_S(fun,"fun",answer) 46#endif 47 48int 49main (void) 50{ 51 mpz_t z; 52 int got; 53 const char *expr; 54 int error = 0; 55 56 tests_start (); 57 mpz_init (z); 58 59 mpz_set_ui (z, 0L); 60 expr = "0"; 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); 67 68 mpz_set_ui (z, 1L); 69 expr = "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); 76 77 mpz_set_si (z, -1L); 78 expr = "-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); 85 86 mpz_set_ui (z, 1L); 87 mpz_mul_2exp (z, z, 5L*GMP_LIMB_BITS); 88 expr = "2^(5*BPML)"; 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); 95 96 97 mpz_set_ui (z, (unsigned long) USHRT_MAX); 98 expr = "USHRT_MAX"; 99 EXPECT (mpz_fits_ulong_p, 1); 100 EXPECT (mpz_fits_uint_p, 1); 101 EXPECT (mpz_fits_ushort_p, 1); 102 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); 107 108 109 mpz_set_ui (z, (unsigned long) UINT_MAX); 110 expr = "UINT_MAX"; 111 EXPECT (mpz_fits_ulong_p, 1); 112 EXPECT (mpz_fits_uint_p, 1); 113 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); 118 119 120 mpz_set_ui (z, ULONG_MAX); 121 expr = "ULONG_MAX"; 122 EXPECT (mpz_fits_ulong_p, 1); 123 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); 128 129 130 mpz_set_si (z, (long) SHRT_MAX); 131 expr = "SHRT_MAX"; 132 EXPECT (mpz_fits_slong_p, 1); 133 EXPECT (mpz_fits_sint_p, 1); 134 EXPECT (mpz_fits_sshort_p, 1); 135 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); 140 141 142 mpz_set_si (z, (long) INT_MAX); 143 expr = "INT_MAX"; 144 EXPECT (mpz_fits_slong_p, 1); 145 EXPECT (mpz_fits_sint_p, 1); 146 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); 151 152 153 mpz_set_si (z, LONG_MAX); 154 expr = "LONG_MAX"; 155 EXPECT (mpz_fits_slong_p, 1); 156 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); 161 162 163 mpz_set_si (z, (long) SHRT_MIN); 164 expr = "SHRT_MIN"; 165 EXPECT (mpz_fits_slong_p, 1); 166 EXPECT (mpz_fits_sint_p, 1); 167 EXPECT (mpz_fits_sshort_p, 1); 168 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); 173 174 175 mpz_set_si (z, (long) INT_MIN); 176 expr = "INT_MIN"; 177 EXPECT (mpz_fits_slong_p, 1); 178 EXPECT (mpz_fits_sint_p, 1); 179 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); 184 185 186 mpz_set_si (z, LONG_MIN); 187 expr = "LONG_MIN"; 188 EXPECT (mpz_fits_slong_p, 1); 189 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); 194 195 196 if (error) 197 abort (); 198 199 mpz_clear (z); 200 tests_end (); 201 exit (0); 202} 203