~ubuntu-branches/ubuntu/quantal/gclcvs/quantal

« back to all changes in this revision

Viewing changes to gmp3/tests/mpz/t-fits.c

  • Committer: Bazaar Package Importer
  • Author(s): Camm Maguire
  • Date: 2004-06-24 15:13:46 UTC
  • Revision ID: james.westby@ubuntu.com-20040624151346-xh0xaaktyyp7aorc
Tags: 2.7.0-26
C_GC_OFFSET is 2 on m68k-linux

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* Test mpz_fits_*_p */
 
2
 
 
3
/*
 
4
Copyright 2001 Free Software Foundation, Inc.
 
5
 
 
6
This file is part of the GNU MP Library.
 
7
 
 
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 2.1 of the License, or (at your
 
11
option) any later version.
 
12
 
 
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.
 
17
 
 
18
You should have received a copy of the GNU Lesser General Public License
 
19
along with the GNU MP Library; see the file COPYING.LIB.  If not, write to
 
20
the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
 
21
MA 02111-1307, USA.
 
22
*/
 
23
 
 
24
#include <stdio.h>
 
25
#include <stdlib.h>
 
26
#include "gmp.h"
 
27
#include "gmp-impl.h"
 
28
#include "tests.h"
 
29
 
 
30
 
 
31
/* Nothing sophisticated here, just exercise mpz_fits_*_p on a small amount
 
32
   of data. */
 
33
 
 
34
#define EXPECT_S(fun,name,answer)                                       \
 
35
  got = fun (z);                                                        \
 
36
  if (got != answer)                                                    \
 
37
    {                                                                   \
 
38
      printf ("%s (%s) got %d want %d\n", name, expr, got, answer);     \
 
39
      printf (" z size %d\n", SIZ(z));                                  \
 
40
      printf (" z dec "); mpz_out_str (stdout, 10, z); printf ("\n");   \
 
41
      printf (" z hex "); mpz_out_str (stdout, 16, z); printf ("\n");   \
 
42
      error = 1;                                                        \
 
43
    }
 
44
 
 
45
#if HAVE_STRINGIZE
 
46
#define EXPECT(fun,answer)  EXPECT_S(fun,#fun,answer)
 
47
#else
 
48
#define EXPECT(fun,answer)  EXPECT_S(fun,"fun",answer)
 
49
#endif
 
50
 
 
51
int
 
52
main (void)
 
53
{
 
54
  mpz_t       z;
 
55
  int         got;
 
56
  const char  *expr;
 
57
  int         error = 0;
 
58
 
 
59
  tests_start ();
 
60
  mpz_init (z);
 
61
 
 
62
  mpz_set_ui (z, 0L);
 
63
  expr = "0";
 
64
  EXPECT (mpz_fits_ulong_p, 1);
 
65
  EXPECT (mpz_fits_uint_p, 1);
 
66
  EXPECT (mpz_fits_ushort_p, 1);
 
67
  EXPECT (mpz_fits_slong_p, 1);
 
68
  EXPECT (mpz_fits_sint_p, 1);
 
69
  EXPECT (mpz_fits_sshort_p, 1);
 
70
 
 
71
  mpz_set_ui (z, 1L);
 
72
  expr = "1";
 
73
  EXPECT (mpz_fits_ulong_p, 1);
 
74
  EXPECT (mpz_fits_uint_p, 1);
 
75
  EXPECT (mpz_fits_ushort_p, 1);
 
76
  EXPECT (mpz_fits_slong_p, 1);
 
77
  EXPECT (mpz_fits_sint_p, 1);
 
78
  EXPECT (mpz_fits_sshort_p, 1);
 
79
 
 
80
  mpz_set_si (z, -1L);
 
81
  expr = "-1";
 
82
  EXPECT (mpz_fits_ulong_p, 0);
 
83
  EXPECT (mpz_fits_uint_p, 0);
 
84
  EXPECT (mpz_fits_ushort_p, 0);
 
85
  EXPECT (mpz_fits_slong_p, 1);
 
86
  EXPECT (mpz_fits_sint_p, 1);
 
87
  EXPECT (mpz_fits_sshort_p, 1);
 
88
 
 
89
  mpz_set_ui (z, 1L);
 
90
  mpz_mul_2exp (z, z, 5L*BITS_PER_MP_LIMB);
 
91
  expr = "2^(5*BPML)";
 
92
  EXPECT (mpz_fits_ulong_p, 0);
 
93
  EXPECT (mpz_fits_uint_p, 0);
 
94
  EXPECT (mpz_fits_ushort_p, 0);
 
95
  EXPECT (mpz_fits_slong_p, 0);
 
96
  EXPECT (mpz_fits_sint_p, 0);
 
97
  EXPECT (mpz_fits_sshort_p, 0);
 
98
 
 
99
 
 
100
  mpz_set_ui (z, (unsigned long) USHRT_MAX);
 
101
  expr = "USHRT_MAX";
 
102
  EXPECT (mpz_fits_ulong_p, 1);
 
103
  EXPECT (mpz_fits_uint_p, 1);
 
104
  EXPECT (mpz_fits_ushort_p, 1);
 
105
 
 
106
  mpz_set_ui (z, (unsigned long) USHRT_MAX);
 
107
  mpz_add_ui (z, z, 1L);
 
108
  expr = "USHRT_MAX + 1";
 
109
  EXPECT (mpz_fits_ushort_p, 0);
 
110
 
 
111
 
 
112
  mpz_set_ui (z, (unsigned long) UINT_MAX);
 
113
  expr = "UINT_MAX";
 
114
  EXPECT (mpz_fits_ulong_p, 1);
 
115
  EXPECT (mpz_fits_uint_p, 1);
 
116
 
 
117
  mpz_set_ui (z, (unsigned long) UINT_MAX);
 
118
  mpz_add_ui (z, z, 1L);
 
119
  expr = "UINT_MAX + 1";
 
120
  EXPECT (mpz_fits_uint_p, 0);
 
121
 
 
122
 
 
123
  mpz_set_ui (z, ULONG_MAX);
 
124
  expr = "ULONG_MAX";
 
125
  EXPECT (mpz_fits_ulong_p, 1);
 
126
 
 
127
  mpz_set_ui (z, ULONG_MAX);
 
128
  mpz_add_ui (z, z, 1L);
 
129
  expr = "ULONG_MAX + 1";
 
130
  EXPECT (mpz_fits_ulong_p, 0);
 
131
 
 
132
 
 
133
  mpz_set_si (z, (long) SHRT_MAX);
 
134
  expr = "SHRT_MAX";
 
135
  EXPECT (mpz_fits_slong_p, 1);
 
136
  EXPECT (mpz_fits_sint_p, 1);
 
137
  EXPECT (mpz_fits_sshort_p, 1);
 
138
 
 
139
  mpz_set_si (z, (long) SHRT_MAX);
 
140
  mpz_add_ui (z, z, 1L);
 
141
  expr = "SHRT_MAX + 1";
 
142
  EXPECT (mpz_fits_sshort_p, 0);
 
143
 
 
144
 
 
145
  mpz_set_si (z, (long) INT_MAX);
 
146
  expr = "INT_MAX";
 
147
  EXPECT (mpz_fits_slong_p, 1);
 
148
  EXPECT (mpz_fits_sint_p, 1);
 
149
 
 
150
  mpz_set_si (z, (long) INT_MAX);
 
151
  mpz_add_ui (z, z, 1L);
 
152
  expr = "INT_MAX + 1";
 
153
  EXPECT (mpz_fits_sint_p, 0);
 
154
 
 
155
 
 
156
  mpz_set_si (z, LONG_MAX);
 
157
  expr = "LONG_MAX";
 
158
  EXPECT (mpz_fits_slong_p, 1);
 
159
 
 
160
  mpz_set_si (z, LONG_MAX);
 
161
  mpz_add_ui (z, z, 1L);
 
162
  expr = "LONG_MAX + 1";
 
163
  EXPECT (mpz_fits_slong_p, 0);
 
164
 
 
165
 
 
166
  mpz_set_si (z, (long) SHRT_MIN);
 
167
  expr = "SHRT_MIN";
 
168
  EXPECT (mpz_fits_slong_p, 1);
 
169
  EXPECT (mpz_fits_sint_p, 1);
 
170
  EXPECT (mpz_fits_sshort_p, 1);
 
171
 
 
172
  mpz_set_si (z, (long) SHRT_MIN);
 
173
  mpz_sub_ui (z, z, 1L);
 
174
  expr = "SHRT_MIN + 1";
 
175
  EXPECT (mpz_fits_sshort_p, 0);
 
176
 
 
177
 
 
178
  mpz_set_si (z, (long) INT_MIN);
 
179
  expr = "INT_MIN";
 
180
  EXPECT (mpz_fits_slong_p, 1);
 
181
  EXPECT (mpz_fits_sint_p, 1);
 
182
 
 
183
  mpz_set_si (z, (long) INT_MIN);
 
184
  mpz_sub_ui (z, z, 1L);
 
185
  expr = "INT_MIN + 1";
 
186
  EXPECT (mpz_fits_sint_p, 0);
 
187
 
 
188
 
 
189
  mpz_set_si (z, LONG_MIN);
 
190
  expr = "LONG_MIN";
 
191
  EXPECT (mpz_fits_slong_p, 1);
 
192
 
 
193
  mpz_set_si (z, LONG_MIN);
 
194
  mpz_sub_ui (z, z, 1L);
 
195
  expr = "LONG_MIN + 1";
 
196
  EXPECT (mpz_fits_slong_p, 0);
 
197
 
 
198
 
 
199
  if (error)
 
200
    abort ();
 
201
 
 
202
  mpz_clear (z);
 
203
  tests_end ();
 
204
  exit (0);
 
205
}