Commit | Line | Data |
b3abae2a |
1 | #!/usr/bin/perl -w |
2 | |
3 | use Test; |
4 | use strict; |
5 | |
6 | BEGIN |
7 | { |
8 | $| = 1; |
9 | plan tests => 7*6*4; |
10 | chdir 't' if -d 't'; |
11 | unshift @INC, '../lib'; |
12 | } |
13 | |
14 | use Math::BigInt; |
15 | |
16 | my (@args,$x,$y,$z); |
17 | |
18 | # + |
19 | foreach (qw/ |
20 | -inf:-inf:-inf |
21 | -1:-inf:-inf |
22 | -0:-inf:-inf |
23 | 0:-inf:-inf |
24 | 1:-inf:-inf |
25 | inf:-inf:NaN |
26 | NaN:-inf:NaN |
27 | |
28 | -inf:-1:-inf |
29 | -1:-1:-2 |
30 | -0:-1:-1 |
31 | 0:-1:-1 |
32 | 1:-1:0 |
33 | inf:-1:inf |
34 | NaN:-1:NaN |
35 | |
36 | -inf:0:-inf |
37 | -1:0:-1 |
38 | -0:0:0 |
39 | 0:0:0 |
40 | 1:0:1 |
41 | inf:0:inf |
42 | NaN:0:NaN |
43 | |
44 | -inf:1:-inf |
45 | -1:1:0 |
46 | -0:1:1 |
47 | 0:1:1 |
48 | 1:1:2 |
49 | inf:1:inf |
50 | NaN:1:NaN |
51 | |
52 | -inf:inf:NaN |
53 | -1:inf:inf |
54 | -0:inf:inf |
55 | 0:inf:inf |
56 | 1:inf:inf |
57 | inf:inf:inf |
58 | NaN:inf:NaN |
59 | |
60 | -inf:NaN:NaN |
61 | -1:NaN:NaN |
62 | -0:NaN:NaN |
63 | 0:NaN:NaN |
64 | 1:NaN:NaN |
65 | inf:NaN:NaN |
66 | NaN:NaN:NaN |
67 | /) |
68 | { |
69 | @args = split /:/,$_; |
70 | $x = Math::BigInt->new($args[0]); |
71 | $y = Math::BigInt->new($args[1]); |
72 | $args[2] = '0' if $args[2] eq '-0'; # BigInt hasn't got -0 |
73 | print "# $args[0] + $args[1] should be $args[2] but is ",$x->bstr(),"\n" |
74 | if !ok ($x->badd($y)->bstr(),$args[2]); |
75 | } |
76 | |
77 | # - |
78 | foreach (qw/ |
79 | -inf:-inf:NaN |
80 | -1:-inf:inf |
81 | -0:-inf:inf |
82 | 0:-inf:inf |
83 | 1:-inf:inf |
84 | inf:-inf:inf |
85 | NaN:-inf:NaN |
86 | |
87 | -inf:-1:-inf |
88 | -1:-1:0 |
89 | -0:-1:1 |
90 | 0:-1:1 |
91 | 1:-1:2 |
92 | inf:-1:inf |
93 | NaN:-1:NaN |
94 | |
95 | -inf:0:-inf |
96 | -1:0:-1 |
97 | -0:0:-0 |
98 | 0:0:0 |
99 | 1:0:1 |
100 | inf:0:inf |
101 | NaN:0:NaN |
102 | |
103 | -inf:1:-inf |
104 | -1:1:-2 |
105 | -0:1:-1 |
106 | 0:1:-1 |
107 | 1:1:0 |
108 | inf:1:inf |
109 | NaN:1:NaN |
110 | |
111 | -inf:inf:-inf |
112 | -1:inf:-inf |
113 | -0:inf:-inf |
114 | 0:inf:-inf |
115 | 1:inf:-inf |
116 | inf:inf:NaN |
117 | NaN:inf:NaN |
118 | |
119 | -inf:NaN:NaN |
120 | -1:NaN:NaN |
121 | -0:NaN:NaN |
122 | 0:NaN:NaN |
123 | 1:NaN:NaN |
124 | inf:NaN:NaN |
125 | NaN:NaN:NaN |
126 | /) |
127 | { |
128 | @args = split /:/,$_; |
129 | $x = Math::BigInt->new($args[0]); |
130 | $y = Math::BigInt->new($args[1]); |
131 | $args[2] = '0' if $args[2] eq '-0'; # BigInt hasn't got -0 |
132 | print "# $args[0] - $args[1] should be $args[2] but is $x\n" |
133 | if !ok ($x->bsub($y)->bstr(),$args[2]); |
134 | } |
135 | |
136 | # * |
137 | foreach (qw/ |
138 | -inf:-inf:inf |
139 | -1:-inf:inf |
140 | -0:-inf:NaN |
141 | 0:-inf:NaN |
142 | 1:-inf:-inf |
143 | inf:-inf:-inf |
144 | NaN:-inf:NaN |
145 | |
146 | -inf:-1:inf |
147 | -1:-1:1 |
148 | -0:-1:0 |
149 | 0:-1:-0 |
150 | 1:-1:-1 |
151 | inf:-1:-inf |
152 | NaN:-1:NaN |
153 | |
154 | -inf:0:NaN |
155 | -1:0:-0 |
156 | -0:0:-0 |
157 | 0:0:0 |
158 | 1:0:0 |
159 | inf:0:NaN |
160 | NaN:0:NaN |
161 | |
162 | -inf:1:-inf |
163 | -1:1:-1 |
164 | -0:1:-0 |
165 | 0:1:0 |
166 | 1:1:1 |
167 | inf:1:inf |
168 | NaN:1:NaN |
169 | |
170 | -inf:inf:-inf |
171 | -1:inf:-inf |
172 | -0:inf:NaN |
173 | 0:inf:NaN |
174 | 1:inf:inf |
175 | inf:inf:inf |
176 | NaN:inf:NaN |
177 | |
178 | -inf:NaN:NaN |
179 | -1:NaN:NaN |
180 | -0:NaN:NaN |
181 | 0:NaN:NaN |
182 | 1:NaN:NaN |
183 | inf:NaN:NaN |
184 | NaN:NaN:NaN |
185 | /) |
186 | { |
187 | @args = split /:/,$_; |
188 | $x = Math::BigInt->new($args[0]); |
189 | $y = Math::BigInt->new($args[1]); |
190 | $args[2] = '0' if $args[2] eq '-0'; # BigInt hasn't got -0 |
191 | print "# $args[0] * $args[1] should be $args[2] but is $x\n" |
192 | if !ok ($x->bmul($y)->bstr(),$args[2]); |
193 | } |
194 | |
195 | # / |
196 | foreach (qw/ |
197 | -inf:-inf:NaN |
198 | -1:-inf:0 |
199 | -0:-inf:0 |
200 | 0:-inf:-0 |
201 | 1:-inf:-0 |
202 | inf:-inf:NaN |
203 | NaN:-inf:NaN |
204 | |
205 | -inf:-1:inf |
206 | -1:-1:1 |
207 | -0:-1:0 |
208 | 0:-1:-0 |
209 | 1:-1:-1 |
210 | inf:-1:-inf |
211 | NaN:-1:NaN |
212 | |
213 | -inf:0:-inf |
214 | -1:0:-inf |
215 | -0:0:NaN |
216 | 0:0:NaN |
217 | 1:0:inf |
218 | inf:0:inf |
219 | NaN:0:NaN |
220 | |
221 | -inf:1:-inf |
222 | -1:1:-1 |
223 | -0:1:-0 |
224 | 0:1:0 |
225 | 1:1:1 |
226 | inf:1:inf |
227 | NaN:1:NaN |
228 | |
229 | -inf:inf:NaN |
230 | -1:inf:-0 |
231 | -0:inf:-0 |
232 | 0:inf:0 |
233 | 1:inf:0 |
234 | inf:inf:NaN |
235 | NaN:inf:NaN |
236 | |
237 | -inf:NaN:NaN |
238 | -1:NaN:NaN |
239 | -0:NaN:NaN |
240 | 0:NaN:NaN |
241 | 1:NaN:NaN |
242 | inf:NaN:NaN |
243 | NaN:NaN:NaN |
244 | /) |
245 | { |
246 | @args = split /:/,$_; |
247 | $x = Math::BigInt->new($args[0]); |
248 | $y = Math::BigInt->new($args[1]); |
249 | $args[2] = '0' if $args[2] eq '-0'; # BigInt hasn't got -0 |
250 | print "# $args[0] / $args[1] should be $args[2] but is $x\n" |
251 | if !ok ($x->bdiv($y)->bstr(),$args[2]); |
252 | |
253 | } |
254 | |
255 | |