1/* Test mpz_fits_*_p */ 2 3/* 4Copyright 2001 Free Software Foundation, Inc. 5 6This file is part of the GNU MP Library test suite. 7 8The GNU MP Library test suite is free software; you can redistribute it 9and/or modify it under the terms of the GNU General Public License as 10published by the Free Software Foundation; either version 3 of the License, 11or (at your option) any later version. 12 13The GNU MP Library test suite is distributed in the hope that it will be 14useful, but WITHOUT ANY WARRANTY; without even the implied warranty of 15MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General 16Public License for more details. 17 18You should have received a copy of the GNU General Public License along with 19the GNU MP Library test suite. If not, see https://www.gnu.org/licenses/. */ 20 21#include <stdio.h> 22#include <stdlib.h> 23#include "gmp-impl.h" 24#include "tests.h" 25 26 27/* Nothing sophisticated here, just exercise mpz_fits_*_p on a small amount 28 of data. */ 29 30#define EXPECT_S(fun,name,answer) \ 31 got = fun (z); \ 32 if (got != answer) \ 33 { \ 34 printf ("%s (%s) got %d want %d\n", name, expr, got, answer); \ 35 printf (" z size %d\n", SIZ(z)); \ 36 printf (" z dec "); mpz_out_str (stdout, 10, z); printf ("\n"); \ 37 printf (" z hex "); mpz_out_str (stdout, 16, z); printf ("\n"); \ 38 error = 1; \ 39 } 40 41#define EXPECT(fun,answer) EXPECT_S(fun,#fun,answer) 42 43int 44main (void) 45{ 46 mpz_t z; 47 int got; 48 const char *expr; 49 int error = 0; 50 51 tests_start (); 52 mpz_init (z); 53 54 mpz_set_ui (z, 0L); 55 expr = "0"; 56 EXPECT (mpz_fits_ulong_p, 1); 57 EXPECT (mpz_fits_uint_p, 1); 58 EXPECT (mpz_fits_ushort_p, 1); 59 EXPECT (mpz_fits_slong_p, 1); 60 EXPECT (mpz_fits_sint_p, 1); 61 EXPECT (mpz_fits_sshort_p, 1); 62 63 mpz_set_ui (z, 1L); 64 expr = "1"; 65 EXPECT (mpz_fits_ulong_p, 1); 66 EXPECT (mpz_fits_uint_p, 1); 67 EXPECT (mpz_fits_ushort_p, 1); 68 EXPECT (mpz_fits_slong_p, 1); 69 EXPECT (mpz_fits_sint_p, 1); 70 EXPECT (mpz_fits_sshort_p, 1); 71 72 mpz_set_si (z, -1L); 73 expr = "-1"; 74 EXPECT (mpz_fits_ulong_p, 0); 75 EXPECT (mpz_fits_uint_p, 0); 76 EXPECT (mpz_fits_ushort_p, 0); 77 EXPECT (mpz_fits_slong_p, 1); 78 EXPECT (mpz_fits_sint_p, 1); 79 EXPECT (mpz_fits_sshort_p, 1); 80 81 mpz_set_ui (z, 1L); 82 mpz_mul_2exp (z, z, 5L*GMP_LIMB_BITS); 83 expr = "2^(5*BPML)"; 84 EXPECT (mpz_fits_ulong_p, 0); 85 EXPECT (mpz_fits_uint_p, 0); 86 EXPECT (mpz_fits_ushort_p, 0); 87 EXPECT (mpz_fits_slong_p, 0); 88 EXPECT (mpz_fits_sint_p, 0); 89 EXPECT (mpz_fits_sshort_p, 0); 90 91 92 mpz_set_ui (z, (unsigned long) USHRT_MAX); 93 expr = "USHRT_MAX"; 94 EXPECT (mpz_fits_ulong_p, 1); 95 EXPECT (mpz_fits_uint_p, 1); 96 EXPECT (mpz_fits_ushort_p, 1); 97 98 mpz_set_ui (z, (unsigned long) USHRT_MAX); 99 mpz_add_ui (z, z, 1L); 100 expr = "USHRT_MAX + 1"; 101 EXPECT (mpz_fits_ushort_p, 0); 102 103 104 mpz_set_ui (z, (unsigned long) UINT_MAX); 105 expr = "UINT_MAX"; 106 EXPECT (mpz_fits_ulong_p, 1); 107 EXPECT (mpz_fits_uint_p, 1); 108 109 mpz_set_ui (z, (unsigned long) UINT_MAX); 110 mpz_add_ui (z, z, 1L); 111 expr = "UINT_MAX + 1"; 112 EXPECT (mpz_fits_uint_p, 0); 113 114 115 mpz_set_ui (z, ULONG_MAX); 116 expr = "ULONG_MAX"; 117 EXPECT (mpz_fits_ulong_p, 1); 118 119 mpz_set_ui (z, ULONG_MAX); 120 mpz_add_ui (z, z, 1L); 121 expr = "ULONG_MAX + 1"; 122 EXPECT (mpz_fits_ulong_p, 0); 123 124 125 mpz_set_si (z, (long) SHRT_MAX); 126 expr = "SHRT_MAX"; 127 EXPECT (mpz_fits_slong_p, 1); 128 EXPECT (mpz_fits_sint_p, 1); 129 EXPECT (mpz_fits_sshort_p, 1); 130 131 mpz_set_si (z, (long) SHRT_MAX); 132 mpz_add_ui (z, z, 1L); 133 expr = "SHRT_MAX + 1"; 134 EXPECT (mpz_fits_sshort_p, 0); 135 136 137 mpz_set_si (z, (long) INT_MAX); 138 expr = "INT_MAX"; 139 EXPECT (mpz_fits_slong_p, 1); 140 EXPECT (mpz_fits_sint_p, 1); 141 142 mpz_set_si (z, (long) INT_MAX); 143 mpz_add_ui (z, z, 1L); 144 expr = "INT_MAX + 1"; 145 EXPECT (mpz_fits_sint_p, 0); 146 147 148 mpz_set_si (z, LONG_MAX); 149 expr = "LONG_MAX"; 150 EXPECT (mpz_fits_slong_p, 1); 151 152 mpz_set_si (z, LONG_MAX); 153 mpz_add_ui (z, z, 1L); 154 expr = "LONG_MAX + 1"; 155 EXPECT (mpz_fits_slong_p, 0); 156 157 158 mpz_set_si (z, (long) SHRT_MIN); 159 expr = "SHRT_MIN"; 160 EXPECT (mpz_fits_slong_p, 1); 161 EXPECT (mpz_fits_sint_p, 1); 162 EXPECT (mpz_fits_sshort_p, 1); 163 164 mpz_set_si (z, (long) SHRT_MIN); 165 mpz_sub_ui (z, z, 1L); 166 expr = "SHRT_MIN + 1"; 167 EXPECT (mpz_fits_sshort_p, 0); 168 169 170 mpz_set_si (z, (long) INT_MIN); 171 expr = "INT_MIN"; 172 EXPECT (mpz_fits_slong_p, 1); 173 EXPECT (mpz_fits_sint_p, 1); 174 175 mpz_set_si (z, (long) INT_MIN); 176 mpz_sub_ui (z, z, 1L); 177 expr = "INT_MIN + 1"; 178 EXPECT (mpz_fits_sint_p, 0); 179 180 181 mpz_set_si (z, LONG_MIN); 182 expr = "LONG_MIN"; 183 EXPECT (mpz_fits_slong_p, 1); 184 185 mpz_set_si (z, LONG_MIN); 186 mpz_sub_ui (z, z, 1L); 187 expr = "LONG_MIN + 1"; 188 EXPECT (mpz_fits_slong_p, 0); 189 190 191 if (error) 192 abort (); 193 194 mpz_clear (z); 195 tests_end (); 196 exit (0); 197} 198