1# Mainly want to test that:
2# inf and nan are handled correctly when passed to overloaded subs (including when they're passed as strings)
3# valid floating point NV's are handled correctly when passed to overloaded subs
4# valid floating point values are a fatal error when passed as a string
5
6use strict;
7use warnings;
8use Math::GMPz;
9
10print "1..155\n";
11
12my $inf  = 999 ** (999 ** 999);
13my $ninf = $inf * -1;
14my $nan  = $inf / $inf;
15my $strinf = 999 ** (999 ** 999);
16my $strninf = $strinf * -1;
17my $strnan = $strinf / $strinf;
18my ($ret, $x);
19
20eval{$ret = Math::GMPz->new(10) *  $inf };
21if($@ =~ /In Math::GMPz::overload_mul, cannot coerce an Inf to a Math::GMPz value/) {print "ok 1\n"}
22else {
23  warn "\n\$\@: $@\n";
24  print "not ok 1\n";
25}
26
27eval{$ret = Math::GMPz->new(10) * "$strinf"};
28if($@ =~ /supplied to Math::GMPz::overload_mul/) {print "ok 2\n"}
29else {
30  warn "\n\$\@: $@\n";
31  print "not ok 2\n";
32}
33
34eval{$ret = Math::GMPz->new(10) *  $nan };
35if($@ =~ /In Math::GMPz::overload_mul, cannot coerce a NaN to a Math::GMPz value/) {print "ok 3\n"}
36else {
37  warn "\n\$\@: $@\n";
38  print "not ok 3\n";
39}
40
41eval{$ret = Math::GMPz->new(10) * "$strnan"};
42if($@ =~ /supplied to Math::GMPz::overload_mul/) {print "ok 4\n"}
43else {
44  warn "\n\$\@: $@\n";
45  print "not ok 4\n";
46}
47
48eval{$ret = Math::GMPz->new(10) * "61.2"};
49if($@ =~ /supplied to Math::GMPz::overload_mul/) {print "ok 5\n"}
50else {
51  warn "\n\$\@: $@\n";
52  print "not ok 5\n";
53}
54
55if(Math::GMPz->new(10) * 61.2 == 610) {print "ok 6\n"}
56else {
57  warn "\n Expected 610\nGot: ", Math::GMPz->new(10) * 61.2, "\n";
58  print "not ok 6\n";
59}
60
61eval{$ret = Math::GMPz->new(10) +  $inf };
62if($@ =~ /In Math::GMPz::overload_add, cannot coerce an Inf to a Math::GMPz value/) {print "ok 7\n"}
63else {
64  warn "\n\$\@: $@\n";
65  print "not ok 7\n";
66}
67
68eval{$ret = Math::GMPz->new(10) + "$strinf"};
69if($@ =~ /supplied to Math::GMPz::overload_add/) {print "ok 8\n"}
70else {
71  warn "\n\$\@: $@\n";
72  print "not ok 8\n";
73}
74
75eval{$ret = Math::GMPz->new(10) +  $nan };
76if($@ =~ /In Math::GMPz::overload_add, cannot coerce a NaN to a Math::GMPz value/) {print "ok 9\n"}
77else {
78  warn "\n\$\@: $@\n";
79  print "not ok 9\n";
80}
81
82eval{$ret = Math::GMPz->new(10) + "$strnan"};
83if($@ =~ /supplied to Math::GMPz::overload_add/) {print "ok 10\n"}
84else {
85  warn "\n\$\@: $@\n";
86  print "not ok 10\n";
87}
88eval{$ret = Math::GMPz->new(10) + "61.2"};
89if($@ =~ /supplied to Math::GMPz::overload_add/) {print "ok 11\n"}
90else {
91  warn "\n\$\@: $@\n";
92  print "not ok 11\n";
93}
94
95if(Math::GMPz->new(10) + 61.2 == 71) {print "ok 12\n"}
96else {
97  warn "\n Expected 71\nGot: ", Math::GMPz->new(10) + 61.2, "\n";
98  print "not ok 12\n";
99}
100
101eval{$ret = Math::GMPz->new(10) /  $inf };
102if($@ =~ /In Math::GMPz::overload_div, cannot coerce an Inf to a Math::GMPz value/) {print "ok 13\n"}
103else {
104  warn "\n\$\@: $@\n";
105  print "not ok 13\n";
106}
107
108eval{$ret = Math::GMPz->new(10) / "$strinf"};
109if($@ =~ /supplied to Math::GMPz::overload_div/) {print "ok 14\n"}
110else {
111  warn "\n\$\@: $@\n";
112  print "not ok 14\n";
113}
114
115eval{$ret = Math::GMPz->new(10) /  $nan };
116if($@ =~ /In Math::GMPz::overload_div, cannot coerce a NaN to a Math::GMPz value/) {print "ok 15\n"}
117else {
118  warn "\n\$\@: $@\n";
119  print "not ok 15\n";
120}
121
122eval{$ret = Math::GMPz->new(10) / "$strnan"};
123if($@ =~ /supplied to Math::GMPz::overload_div/) {print "ok 16\n"}
124else {
125  warn "\n\$\@: $@\n";
126  print "not ok 16\n";
127}
128
129eval{$ret = Math::GMPz->new(10) / "61.2"};
130if($@ =~ /supplied to Math::GMPz::overload_div/) {print "ok 17\n"}
131else {
132  warn "\n\$\@: $@\n";
133  print "not ok 17\n";
134}
135
136if(Math::GMPz->new(10) / 61.2 == 0) {print "ok 18\n"}
137else {
138  warn "\n Expected 0\nGot: ", Math::GMPz->new(10) / 61.2, "\n";
139  print "not ok 18\n";
140}
141
142eval{$ret = Math::GMPz->new(10) -  $inf };
143if($@ =~ /In Math::GMPz::overload_sub, cannot coerce an Inf to a Math::GMPz value/) {print "ok 19\n"}
144else {
145  warn "\n\$\@: $@\n";
146  print "not ok 19\n";
147}
148
149eval{$ret = Math::GMPz->new(10) - "$strinf"};
150if($@ =~ /supplied to Math::GMPz::overload_sub/) {print "ok 20\n"}
151else {
152  warn "\n\$\@: $@\n";
153  print "not ok 20\n";
154}
155
156eval{$ret = Math::GMPz->new(10) -  $nan };
157if($@ =~ /In Math::GMPz::overload_sub, cannot coerce a NaN to a Math::GMPz value/) {print "ok 21\n"}
158else {
159  warn "\n\$\@: $@\n";
160  print "not ok 21\n";
161}
162
163eval{$ret = Math::GMPz->new(10) - "$strnan"};
164if($@ =~ /supplied to Math::GMPz::overload_sub/) {print "ok 22\n"}
165else {
166  warn "\n\$\@: $@\n";
167  print "not ok 22\n";
168}
169
170eval{$ret = Math::GMPz->new(10) - "61.2"};
171if($@ =~ /supplied to Math::GMPz::overload_sub/) {print "ok 23\n"}
172else {
173  warn "\n\$\@: $@\n";
174  print "not ok 23\n";
175}
176
177if(Math::GMPz->new(10) - 61.2 == -51) {print "ok 24\n"}
178else {
179  warn "\n Expected -51\nGot: ", Math::GMPz->new(10) - 61.2, "\n";
180  print "not ok 24\n";
181}
182
183$ret = Math::GMPz->new(10);
184
185eval{$ret *=  $inf };
186if($@ =~ /In Math::GMPz::overload_mul_eq, cannot coerce an Inf to a Math::GMPz value/) {print "ok 25\n"}
187else {
188  warn "\n\$\@: $@\n";
189  print "not ok 25\n";
190}
191
192eval{$ret *= "$strinf"};
193if($@ =~ /supplied to Math::GMPz::overload_mul_eq/) {print "ok 26\n"}
194else {
195  warn "\n\$\@: $@\n";
196  print "not ok 26\n";
197}
198
199eval{$ret *=  $nan };
200if($@ =~ /In Math::GMPz::overload_mul_eq, cannot coerce a NaN to a Math::GMPz value/) {print "ok 27\n"}
201else {
202  warn "\n\$\@: $@\n";
203  print "not ok 27\n";
204}
205
206eval{$ret *= "$strnan"};
207if($@ =~ /supplied to Math::GMPz::overload_mul_eq/) {print "ok 28\n"}
208else {
209  warn "\n\$\@: $@\n";
210  print "not ok 28\n";
211}
212
213eval{$ret *= "61.2"};
214if($@ =~ /supplied to Math::GMPz::overload_mul_eq/) {print "ok 29\n"}
215else {
216  warn "\n\$\@: $@\n";
217  print "not ok 29\n";
218}
219
220$ret *= 61.2;
221
222if($ret == 610) {print "ok 30\n"}
223else {
224  warn "\n Expected 610\nGot: $ret\n";
225  print "not ok 30\n";
226}
227
228eval{$ret +=  $inf };
229if($@ =~ /In Math::GMPz::overload_add_eq, cannot coerce an Inf to a Math::GMPz value/) {print "ok 31\n"}
230else {
231  warn "\n\$\@: $@\n";
232  print "not ok 31\n";
233}
234
235eval{$ret += "$strinf"};
236if($@ =~ /supplied to Math::GMPz::overload_add_eq/) {print "ok 32\n"}
237else {
238  warn "\n\$\@: $@\n";
239  print "not ok 32\n";
240}
241
242eval{$ret +=  $nan };
243if($@ =~ /In Math::GMPz::overload_add_eq, cannot coerce a NaN to a Math::GMPz value/) {print "ok 33\n"}
244else {
245  warn "\n\$\@: $@\n";
246  print "not ok 33\n";
247}
248
249eval{$ret += "$strnan"};
250if($@ =~ /supplied to Math::GMPz::overload_add_eq/) {print "ok 34\n"}
251else {
252  warn "\n\$\@: $@\n";
253  print "not ok 34\n";
254}
255
256eval{$ret += "61.2"};
257if($@ =~ /supplied to Math::GMPz::overload_add_eq/) {print "ok 35\n"}
258else {
259  warn "\n\$\@: $@\n";
260  print "not ok 35\n";
261}
262
263$ret += 61.2;
264
265if($ret == 671) {print "ok 36\n"}
266else {
267  warn "\n Expected 671\nGot: $ret\n";
268  print "not ok 36\n";
269}
270
271eval{$ret -=  $inf };
272if($@ =~ /In Math::GMPz::overload_sub_eq, cannot coerce an Inf to a Math::GMPz value/) {print "ok 37\n"}
273else {
274  warn "\n\$\@: $@\n";
275  print "not ok 37\n";
276}
277
278eval{$ret -= "$strinf"};
279if($@ =~ /supplied to Math::GMPz::overload_sub_eq/) {print "ok 38\n"}
280else {
281  warn "\n\$\@: $@\n";
282  print "not ok 38\n";
283}
284
285eval{$ret -=  $nan };
286if($@ =~ /In Math::GMPz::overload_sub_eq, cannot coerce a NaN to a Math::GMPz value/) {print "ok 39\n"}
287else {
288  warn "\n\$\@: $@\n";
289  print "not ok 39\n";
290}
291
292eval{$ret -= "$strnan"};
293if($@ =~ /supplied to Math::GMPz::overload_sub_eq/) {print "ok 40\n"}
294else {
295  warn "\n\$\@: $@\n";
296  print "not ok 40\n";
297}
298
299eval{$ret -= "61.2"};
300if($@ =~ /supplied to Math::GMPz::overload_sub_eq/) {print "ok 41\n"}
301else {
302  warn "\n\$\@: $@\n";
303  print "not ok 41\n";
304}
305
306$ret -= 61.2;
307
308if($ret == 610) {print "ok 42\n"}
309else {
310  warn "\n Expected 610\nGot: $ret\n";
311  print "not ok 42\n";
312}
313
314eval{$ret /=  $inf };
315if($@ =~ /In Math::GMPz::overload_div_eq, cannot coerce an Inf to a Math::GMPz value/) {print "ok 43\n"}
316else {
317  warn "\n\$\@: $@\n";
318  print "not ok 43\n";
319}
320
321eval{$ret /= "$strinf"};
322if($@ =~ /supplied to Math::GMPz::overload_div_eq/) {print "ok 44\n"}
323else {
324  warn "\n\$\@: $@\n";
325  print "not ok 44\n";
326}
327
328eval{$ret /=  $nan };
329if($@ =~ /In Math::GMPz::overload_div_eq, cannot coerce a NaN to a Math::GMPz value/) {print "ok 45\n"}
330else {
331  warn "\n\$\@: $@\n";
332  print "not ok 45\n";
333}
334
335eval{$ret /= "$strnan"};
336if($@ =~ /supplied to Math::GMPz::overload_div_eq/) {print "ok 46\n"}
337else {
338  warn "\n\$\@: $@\n";
339  print "not ok 46\n";
340}
341
342eval{$ret /= "61.2"};
343if($@ =~ /supplied to Math::GMPz::overload_div_eq/) {print "ok 47\n"}
344else {
345  warn "\n\$\@: $@\n";
346  print "not ok 47\n";
347}
348
349$ret /= 61.2;
350
351if($ret == 10) {print "ok 48\n"}
352else {
353  warn "\n Expected 10\nGot: $ret\n";
354  print "not ok 48\n";
355}
356
357if(Math::GMPz->new(10) ==  $inf ) {
358  warn "\n 10 == $inf\n";
359  print "not ok 49\n";
360}
361else {print "ok 49\n"}
362
363if(Math::GMPz->new(10) ==  $ninf ) {
364  warn "\n 10 == $ninf\n";
365  print "not ok 50\n";
366}
367else {print "ok 50\n"}
368
369if("$strinf" =~ /^inf/i || $^O =~ /MSWin/) {
370  if(Math::GMPz->new(10) == "$strinf") {
371    warn "\n 10 == infinity\n";
372    print "not ok 51\n";
373  }
374  else {print "ok 51\n"}
375}
376else {
377  eval {$x = (Math::GMPz->new(10) == "$strinf")};
378  if($@ =~ /supplied to Math::GMPz::overload_equiv/) {print "ok 51\n"}
379  else {
380    warn "\n\$\@: $@\n";
381    print "not ok 51\n";
382  }
383}
384
385eval{$x = (Math::GMPz->new(10) ==  $nan )};
386if($@ =~ /cannot compare a NaN to a Math::GMPz value/) {print "ok 52\n"}
387else {
388  warn "\n\$\@: $@\n";
389  print "not ok 52\n";
390}
391eval{$x = (Math::GMPz->new(10) == "$strnan")};
392if($@ =~ /supplied to Math::GMPz::overload_equiv/) {print "ok 53\n"}
393else {
394  warn "\n\$\@: $@\n";
395  print "not ok 53\n";
396}
397
398eval{$x = (Math::GMPz->new(10) == "61.2")};
399if($@ =~ /supplied to Math::GMPz::overload_equiv/) {print "ok 54\n"}
400else {
401  warn "\n\$\@: $@\n";
402  print "not ok 54\n";
403}
404
405my $dec = 10.0;
406if(Math::GMPz->new(10) == $dec) {print "ok 55\n"}
407else {
408  warn "\n ", Math::GMPz->new(10), " != $dec\n";
409  print "not ok 55\n";
410}
411
412if(Math::GMPz->new(10) !=  $inf ) {print "ok 56\n"}
413else {
414  warn "\n 10 == $inf\n";
415  print "not ok 56\n";
416}
417
418if(Math::GMPz->new(10) !=  $ninf ) {print "ok 57\n"}
419else {
420  warn "\n 10 == $ninf\n";
421  print "not ok 57\n";
422}
423
424if("$strinf" =~ /^inf/i || $^O =~ /MSWin/) {
425  if(Math::GMPz->new(10) != "$strinf") {print "ok 58\n"}
426  else {
427    warn "\n 10 == infinity\n";
428    print "not ok 58\n";
429  }
430}
431else {
432  eval{$x = (Math::GMPz->new(10) != "$strinf")};
433  if($@ =~ /supplied to Math::GMPz::overload_not_equiv/) {print "ok 58\n"}
434  else {
435    warn "\n\$\@: $@\n";
436    print "not ok 58\n";
437  }
438}
439
440eval{$x = (Math::GMPz->new(10) !=  $nan )};
441if($@ =~ /cannot compare a NaN to a Math::GMPz value/) {print "ok 59\n"}
442else {
443  warn "\n\$\@: $@\n";
444  print "not ok 59\n";
445}
446
447eval{$x = (Math::GMPz->new(10) != "$strnan")};
448if($@ =~ /supplied to Math::GMPz::overload_not_equiv/) {print "ok 60\n"}
449else {
450  warn "\n\$\@: $@\n";
451  print "not ok 60\n";
452}
453
454eval{$x = (Math::GMPz->new(10) != "61.2")};
455if($@ =~ /supplied to Math::GMPz::overload_not_equiv/) {print "ok 61\n"}
456else {
457  warn "\n\$\@: $@\n";
458  print "not ok 61\n";
459}
460
461$dec += 0.9;;
462if(Math::GMPz->new(10) != $dec) {print "ok 62\n"}
463else {
464  warn "\n ", Math::GMPz->new(10), " == $dec\n";
465  print "not ok 62\n";
466}
467
468if(Math::GMPz->new(10) <  $inf ) {print "ok 63\n"}
469else {
470  warn "\n 10 >= $inf\n";
471  print "not ok 63\n";
472}
473
474if(Math::GMPz->new(10) <  $ninf ) {
475  warn "\n10 < $ninf\n";
476  print "not ok 64\n";
477}
478else {print "ok 64\n"}
479
480if("$strinf" =~ /^inf/i || $^O =~ /MSWin/) {
481  if(Math::GMPz->new(10) < "$strinf") {print "ok 65\n"}
482  else {
483    warn "\n 10 >= infinity\n";
484    print "not ok 65\n";
485  }
486}
487else {
488  eval{$x = (Math::GMPz->new(10) < "$strinf")};
489  if($@ =~ /supplied to Math::GMPz::overload_lt/) {print "ok 65\n"}
490  else {
491    warn "\n\$\@: $@\n";
492    print "not ok 65\n";
493  }
494}
495
496eval{$x = (Math::GMPz->new(10) <  $nan )};
497if($@ =~ /In Rmpz_cmp_NV, cannot compare a NaN to a Math::GMPz value/) {print "ok 66\n"}
498else {
499  warn "\n\$\@: $@\n";
500  print "not ok 66\n";
501}
502
503eval{$x = (Math::GMPz->new(10) < "$strnan")};
504if($@ =~ /supplied to Math::GMPz::overload_lt/) {print "ok 67\n"}
505else {
506  warn "\n\$\@: $@\n";
507  print "not ok 67\n";
508}
509
510eval{$x = (Math::GMPz->new(10) < "61.2")};
511if($@ =~ /supplied to Math::GMPz::overload_lt/) {print "ok 68\n"}
512else {
513  warn "\n\$\@: $@\n";
514  print "not ok 68\n";
515}
516
517
518$dec += 2.0;;
519if(Math::GMPz->new(10) < $dec) {print "ok 69\n"}
520else {
521  warn "\n ", Math::GMPz->new(10), " !< $dec\n";
522  print "not ok 69\n";
523}
524
525if(Math::GMPz->new(10) <=  $inf ) {print "ok 70\n"}
526else {
527  warn "\n 10 > $inf\n";
528  print "not ok 70\n";
529}
530
531if(Math::GMPz->new(10) <=  $ninf ) {
532  warn "\n10 <= $ninf\n";
533  print "not ok 71\n";
534}
535else {print "ok 71\n"}
536
537if("$strinf" =~ /^inf/i || $^O =~ /MSWin/) {
538  if(Math::GMPz->new(10) <= "$strinf") {print "ok 72\n"}
539  else {
540    warn "\n 10 > infinity\n";
541    print "not ok 72\n";
542  }
543}
544else {
545  eval{$x = (Math::GMPz->new(10) <= "$strinf")};
546  if($@ =~ /supplied to Math::GMPz::overload_lte/) {print "ok 72\n"}
547  else {
548    warn "\n\$\@: $@\n";
549    print "not ok 72\n";
550  }
551}
552
553eval{$x = (Math::GMPz->new(10) <=  $nan )};
554if($@ =~ /In Rmpz_cmp_NV, cannot compare a NaN to a Math::GMPz value/) {print "ok 73\n"}
555else {
556  warn "\n\$\@: $@\n";
557  print "not ok 73\n";
558}
559
560eval{$x = (Math::GMPz->new(10) <= "$strnan")};
561if($@ =~ /supplied to Math::GMPz::overload_lte/) {print "ok 74\n"}
562else {
563  warn "\n\$\@: $@\n";
564  print "not ok 74\n";
565}
566
567eval{$x = (Math::GMPz->new(10) <= "61.2")};
568if($@ =~ /supplied to Math::GMPz::overload_lte/) {print "ok 75\n"}
569else {
570  warn "\n\$\@: $@\n";
571  print "not ok 75\n";
572}
573
574$dec -= 2.0;
575if(Math::GMPz->new(10) <= $dec) {print "ok 76\n"}
576else {
577  warn "\n ", Math::GMPz->new(10), " > $dec\n";
578  print "not ok 76\n";
579}
580
581if(Math::GMPz->new(10) >=  $inf ) {
582  warn "\n 10 >= $inf\n";
583  print "not ok 77\n";
584}
585else {print "ok 77\n"}
586
587if(Math::GMPz->new(10) >= $ninf) {print "ok 78\n"}
588else {
589  warn "\n 10 < $ninf\n";
590  print "not ok 78\n";
591}
592
593if("$strinf" =~ /^inf/i || $^O =~ /MSWin/) {
594  if(Math::GMPz->new(10) >= "$strinf") {
595    warn "\n 10 >= infinity\n";
596    print "not ok 79\n";
597  }
598  else {print "ok 79\n"}
599}
600else {
601  eval{$x = (Math::GMPz->new(10) >= "$strinf")};
602  if($@ =~ /supplied to Math::GMPz::overload_gte/) {print "ok 79\n"}
603  else {
604    warn "\n\$\@: $@\n";
605    print "not ok 79\n";
606  }
607}
608
609eval{$x = (Math::GMPz->new(10) >=  $nan )};
610if($@ =~ /In Rmpz_cmp_NV, cannot compare a NaN to a Math::GMPz value/) {print "ok 80\n"}
611else {
612  warn "\n\$\@: $@\n";
613  print "not ok 80\n";
614}
615
616eval{$x = (Math::GMPz->new(10) >= "$strnan")};
617if($@ =~ /supplied to Math::GMPz::overload_gte/) {print "ok 81\n"}
618else {
619  warn "\n\$\@: $@\n";
620  print "not ok 81\n";
621}
622
623eval{$x = (Math::GMPz->new(10) >= "61.2")};
624if($@ =~ /supplied to Math::GMPz::overload_gte/) {print "ok 82\n"}
625else {
626  warn "\n\$\@: $@\n";
627  print "not ok 82\n";
628}
629
630$dec -= 1.0;
631if(Math::GMPz->new(10) >= $dec) {print "ok 83\n"}
632else {
633  warn "\n ", Math::GMPz->new(10), " < $dec\n";
634  print "not ok 83\n";
635}
636
637if(Math::GMPz->new(10) >  $inf ) {
638  warn "\n 10 > $inf\n";
639  print "not ok 84\n";
640}
641else {print "ok 84\n"}
642
643if(Math::GMPz->new(10) > $ninf) {print "ok 85\n"}
644else {
645  warn "\n 10 <= $ninf\n";
646  print "not ok 85\n";
647}
648
649if("$strinf" =~ /^inf/i || $^O =~ /MSWin/) {
650  if(Math::GMPz->new(10) > "$strinf") {
651    warn "\n 10 > infinity\n";
652    print "not ok 86\n";
653  }
654  else {print "ok 86\n"}
655}
656else {
657  eval{$x = (Math::GMPz->new(10) > "$strinf")};
658  if($@ =~ /supplied to Math::GMPz::overload_gt/) {print "ok 86\n"}
659  else {
660    warn "\n\$\@: $@\n";
661    print "not ok 86\n";
662  }
663}
664
665eval{$x = (Math::GMPz->new(10) >  $nan )};
666if($@ =~ /In Rmpz_cmp_NV, cannot compare a NaN to a Math::GMPz value/) {print "ok 87\n"}
667else {
668  warn "\n\$\@: $@\n";
669  print "not ok 87\n";
670}
671
672eval{$x = (Math::GMPz->new(10) > "$strnan")};
673if($@ =~ /supplied to Math::GMPz::overload_gt/) {print "ok 88\n"}
674else {
675  warn "\n\$\@: $@\n";
676  print "not ok 88\n";
677}
678
679eval{$x = (Math::GMPz->new(10) > "61.2")};
680if($@ =~ /supplied to Math::GMPz::overload_gt/) {print "ok 89\n"}
681else {
682  warn "\n\$\@: $@\n";
683  print "not ok 89\n";
684}
685
686$dec -= 1.0;
687if(Math::GMPz->new(10) > $dec) {print "ok 90\n"}
688else {
689  warn "\n ", Math::GMPz->new(10), " !> $dec\n";
690  print "not ok 90\n";
691}
692
693if(Math::GMPz->new(6) < 6.5) {print  "ok 91\n"}
694else {
695  warn "\n 6 >= 6.5\n";
696  print "not ok 91\n";
697}
698
699if(Math::GMPz->new(6) <= 6.5) {print  "ok 92\n"}
700else {
701  warn "\n 6 > 6.5\n";
702  print "not ok 92\n";
703}
704
705if(Math::GMPz->new(-6) > -6.5) {print  "ok 93\n"}
706else {
707  warn "\n -6 <= -6.5\n";
708  print "not ok 93\n";
709}
710
711if(Math::GMPz->new(-6) >= -6.5) {print  "ok 94\n"}
712else {
713  warn "\n -6 < -6.5\n";
714  print "not ok 94\n";
715}
716
717if(Math::GMPz->new(10) == $inf * -1) {
718  warn "\n 10 == -inf\n";
719  print "ok 95\n";
720}
721else {print "ok 95\n"}
722
723if(Math::GMPz->new(10) < $inf * -1) {
724  warn "\n 10 < -inf\n";
725  print "ok 96\n";
726}
727else {print "ok 96\n"}
728
729if(Math::GMPz->new(10) <= $inf * -1) {
730  warn "\n 10 <= -inf\n";
731  print "ok 97\n";
732}
733else {print "ok 97\n"}
734
735if(Math::GMPz->new(10) > $inf * -1) {print "ok 98\n"}
736else {
737  warn "\n 10 <= -inf\n";
738  print "ok 98\n";
739}
740
741if(Math::GMPz->new(10) >= $inf * -1) {print "ok 99\n"}
742else {
743  warn "\n 10 < -inf\n";
744  print "ok 99\n";
745}
746
747if(Math::GMPz->new(10) != $inf * -1) {print "ok 100\n"}
748else {
749  warn "\n 10 == -inf\n";
750  print "ok 100\n";
751}
752
753#########################
754#########################
755
756if("$strinf" =~ /^inf/i || $^O =~ /MSWin/) {
757  if((Math::GMPz->new(10) <=> "$strinf") < 0) {print "ok 101\n"}
758  else {
759    warn "\n 10 !< inf\n";
760    print "not ok 101\n";
761  }
762}
763else {
764  eval{$x = (Math::GMPz->new(10) <=> "$strinf")};
765  if($@ =~ /supplied to Math::GMPz::overload_spaceship/) {print "ok 101\n"}
766  else {
767    warn "\n\$\@: $@\n";
768    print "not ok 101\n";
769  }
770}
771
772eval{$x = (Math::GMPz->new(10) <=>  $nan )};
773if($@ =~ /In Rmpz_cmp_NV, cannot compare a NaN to a Math::GMPz value/) {print "ok 102\n"}
774else {
775  warn "\n\$\@: $@\n";
776  print "not ok 102\n";
777}
778
779eval{$x = (Math::GMPz->new(10) <=> "$strnan")};
780if($@ =~ /supplied to Math::GMPz::overload_spaceship/) {print "ok 103\n"}
781else {
782  warn "\n\$\@: $@\n";
783  print "not ok 103\n";
784}
785
786eval{$x = (Math::GMPz->new(10) <=> "61.2")};
787if($@ =~ /supplied to Math::GMPz::overload_spaceship/) {print "ok 104\n"}
788else {
789  warn "\n\$\@: $@\n";
790  print "not ok 104\n";
791}
792
793if((Math::GMPz->new(10) <=> $inf) < 0){print "ok 105\n"}
794else {
795  warn "\n 10 !< inf\n";
796  print "not ok 105\n";
797}
798
799if((Math::GMPz->new(10) <=> $inf * -1) > 0){print "ok 106\n"}
800else {
801  warn "\n 10 !> inf\n";
802  print "not ok 106\n";
803}
804
805##########################
806##########################
807
808eval{$ret = Math::GMPz->new(10) &  $inf };
809if($@ =~ /In Math::GMPz::overload_and, cannot coerce an Inf to a Math::GMPz value/) {print "ok 107\n"}
810else {
811  warn "\n\$\@: $@\n";
812  print "not ok 107\n";
813}
814
815eval{$ret = Math::GMPz->new(10) &  -$inf };
816if($@ =~ /In Math::GMPz::overload_and, cannot coerce an Inf to a Math::GMPz value/) {print "ok 108\n"}
817else {
818  warn "\n\$\@: $@\n";
819  print "not ok 108\n";
820}
821
822eval{$ret = Math::GMPz->new(10) & "$strinf"};
823if($@ =~ /supplied to Math::GMPz::overload_and/) {print "ok 109\n"}
824else {
825  warn "\n\$\@: $@\n";
826  print "not ok 109\n";
827}
828
829eval{$ret = Math::GMPz->new(10) &  $nan };
830if($@ =~ /In Math::GMPz::overload_and, cannot coerce a NaN to a Math::GMPz value/) {print "ok 110\n"}
831else {
832  warn "\n\$\@: $@\n";
833  print "not ok 110\n";
834}
835
836eval{$ret = Math::GMPz->new(10) & "$strnan"};
837if($@ =~ /supplied to Math::GMPz::overload_and/) {print "ok 111\n"}
838else {
839  warn "\n\$\@: $@\n";
840  print "not ok 111\n";
841}
842
843eval{$ret = Math::GMPz->new(10) & "61.2"};
844if($@ =~ /supplied to Math::GMPz::overload_and/) {print "ok 112\n"}
845else {
846  warn "\n\$\@: $@\n";
847  print "not ok 112\n";
848}
849
850eval{$ret = Math::GMPz->new(10) |  $inf };
851if($@ =~ /In Math::GMPz::overload_ior, cannot coerce an Inf to a Math::GMPz value/) {print "ok 113\n"}
852else {
853  warn "\n\$\@: $@\n";
854  print "not ok 113\n";
855}
856
857eval{$ret = Math::GMPz->new(10) |  -$inf };
858if($@ =~ /In Math::GMPz::overload_ior, cannot coerce an Inf to a Math::GMPz value/) {print "ok 114\n"}
859else {
860  warn "\n\$\@: $@\n";
861  print "not ok 114\n";
862}
863
864eval{$ret = Math::GMPz->new(10) | "$strinf"};
865if($@ =~ /supplied to Math::GMPz::overload_ior/) {print "ok 115\n"}
866else {
867  warn "\n\$\@: $@\n";
868  print "not ok 115\n";
869}
870
871eval{$ret = Math::GMPz->new(10) |  $nan };
872if($@ =~ /In Math::GMPz::overload_ior, cannot coerce a NaN to a Math::GMPz value/) {print "ok 116\n"}
873else {
874  warn "\n\$\@: $@\n";
875  print "not ok 116\n";
876}
877
878eval{$ret = Math::GMPz->new(10) | "$strnan"};
879if($@ =~ /supplied to Math::GMPz::overload_ior/) {print "ok 117\n"}
880else {
881  warn "\n\$\@: $@\n";
882  print "not ok 117\n";
883}
884
885eval{$ret = Math::GMPz->new(10) | "61.2"};
886if($@ =~ /supplied to Math::GMPz::overload_ior/) {print "ok 118\n"}
887else {
888  warn "\n\$\@: $@\n";
889  print "not ok 118\n";
890}
891
892eval{$ret = Math::GMPz->new(10) ^  $inf };
893if($@ =~ /In Math::GMPz::overload_xor, cannot coerce an Inf to a Math::GMPz value/) {print "ok 119\n"}
894else {
895  warn "\n\$\@: $@\n";
896  print "not ok 119\n";
897}
898
899eval{$ret = Math::GMPz->new(10) ^  -$inf };
900if($@ =~ /In Math::GMPz::overload_xor, cannot coerce an Inf to a Math::GMPz value/) {print "ok 120\n"}
901else {
902  warn "\n\$\@: $@\n";
903  print "not ok 120\n";
904}
905
906eval{$ret = Math::GMPz->new(10) ^ "$strinf"};
907if($@ =~ /supplied to Math::GMPz::overload_xor/) {print "ok 121\n"}
908else {
909  warn "\n\$\@: $@\n";
910  print "not ok 121\n";
911}
912
913eval{$ret = Math::GMPz->new(10) ^  $nan };
914if($@ =~ /In Math::GMPz::overload_xor, cannot coerce a NaN to a Math::GMPz value/) {print "ok 122\n"}
915else {
916  warn "\n\$\@: $@\n";
917  print "not ok 122\n";
918}
919
920eval{$ret = Math::GMPz->new(10) ^ "$strnan"};
921if($@ =~ /supplied to Math::GMPz::overload_xor/) {print "ok 123\n"}
922else {
923  warn "\n\$\@: $@\n";
924  print "not ok 123\n";
925}
926
927eval{$ret = Math::GMPz->new(10) ^ "61.2"};
928if($@ =~ /supplied to Math::GMPz::overload_xor/) {print "ok 124\n"}
929else {
930  warn "\n\$\@: $@\n";
931  print "not ok 124\n";
932}
933
934eval{$ret &=  $inf };
935if($@ =~ /In Math::GMPz::overload_and_eq, cannot coerce an Inf to a Math::GMPz value/) {print "ok 125\n"}
936else {
937  warn "\n\$\@: $@\n";
938  print "not ok 125\n";
939}
940
941eval{$ret &=  -$inf };
942if($@ =~ /In Math::GMPz::overload_and_eq, cannot coerce an Inf to a Math::GMPz value/) {print "ok 126\n"}
943else {
944  warn "\n\$\@: $@\n";
945  print "not ok 126\n";
946}
947
948eval{$ret &= "$strinf"};
949if($@ =~ /supplied to Math::GMPz::overload_and_eq/) {print "ok 127\n"}
950else {
951  warn "\n\$\@: $@\n";
952  print "not ok 127\n";
953}
954
955eval{$ret &=  $nan };
956if($@ =~ /In Math::GMPz::overload_and_eq, cannot coerce a NaN to a Math::GMPz value/) {print "ok 128\n"}
957else {
958  warn "\n\$\@: $@\n";
959  print "not ok 128\n";
960}
961
962eval{$ret &= "$strnan"};
963if($@ =~ /supplied to Math::GMPz::overload_and_eq/) {print "ok 129\n"}
964else {
965  warn "\n\$\@: $@\n";
966  print "not ok 129\n";
967}
968
969eval{$ret &= "61.2"};
970if($@ =~ /supplied to Math::GMPz::overload_and_eq/) {print "ok 130\n"}
971else {
972  warn "\n\$\@: $@\n";
973  print "not ok 130\n";
974}
975
976eval{$ret |=  $inf };
977if($@ =~ /In Math::GMPz::overload_ior_eq, cannot coerce an Inf to a Math::GMPz value/) {print "ok 131\n"}
978else {
979  warn "\n\$\@: $@\n";
980  print "not ok 131\n";
981}
982
983eval{$ret |=  -$inf };
984if($@ =~ /In Math::GMPz::overload_ior_eq, cannot coerce an Inf to a Math::GMPz value/) {print "ok 132\n"}
985else {
986  warn "\n\$\@: $@\n";
987  print "not ok 132\n";
988}
989
990eval{$ret |= "$strinf"};
991if($@ =~ /supplied to Math::GMPz::overload_ior_eq/) {print "ok 133\n"}
992else {
993  warn "\n\$\@: $@\n";
994  print "not ok 133\n";
995}
996
997eval{$ret |=  $nan };
998if($@ =~ /In Math::GMPz::overload_ior_eq, cannot coerce a NaN to a Math::GMPz value/) {print "ok 134\n"}
999else {
1000  warn "\n\$\@: $@\n";
1001  print "not ok 134\n";
1002}
1003
1004eval{$ret |= "$strnan"};
1005if($@ =~ /supplied to Math::GMPz::overload_ior_eq/) {print "ok 135\n"}
1006else {
1007  warn "\n\$\@: $@\n";
1008  print "not ok 135\n";
1009}
1010
1011eval{$ret |= "61.2"};
1012if($@ =~ /supplied to Math::GMPz::overload_ior_eq/) {print "ok 136\n"}
1013else {
1014  warn "\n\$\@: $@\n";
1015  print "not ok 136\n";
1016}
1017
1018eval{$ret ^=  $inf };
1019if($@ =~ /In Math::GMPz::overload_xor_eq, cannot coerce an Inf to a Math::GMPz value/) {print "ok 137\n"}
1020else {
1021  warn "\n\$\@: $@\n";
1022  print "not ok 137\n";
1023}
1024
1025eval{$ret ^=  -$inf };
1026if($@ =~ /In Math::GMPz::overload_xor_eq, cannot coerce an Inf to a Math::GMPz value/) {print "ok 138\n"}
1027else {
1028  warn "\n\$\@: $@\n";
1029  print "not ok 138\n";
1030}
1031
1032eval{$ret ^= "$strinf"};
1033if($@ =~ /supplied to Math::GMPz::overload_xor_eq/) {print "ok 139\n"}
1034else {
1035  warn "\n\$\@: $@\n";
1036  print "not ok 139\n";
1037}
1038
1039eval{$ret ^=  $nan };
1040if($@ =~ /In Math::GMPz::overload_xor_eq, cannot coerce a NaN to a Math::GMPz value/) {print "ok 140\n"}
1041else {
1042  warn "\n\$\@: $@\n";
1043  print "not ok 140\n";
1044}
1045
1046eval{$ret ^= "$strnan"};
1047if($@ =~ /supplied to Math::GMPz::overload_xor_eq/) {print "ok 141\n"}
1048else {
1049  warn "\n\$\@: $@\n";
1050  print "not ok 141\n";
1051}
1052
1053eval{$ret ^= "61.2"};
1054if($@ =~ /supplied to Math::GMPz::overload_xor_eq/) {print "ok 142\n"}
1055else {
1056  warn "\n\$\@: $@\n";
1057  print "not ok 142\n";
1058}
1059
1060
1061if((Math::GMPz->new(50) & 40.1) == (50 & 40)) {print "ok 143\n"}
1062else {
1063  warn "\n Expected ", 50 & 40, "\n Got ", Math::GMPz->new(50) & 40.1,"\n";
1064  print "not ok 143\n";
1065}
1066
1067if((Math::GMPz->new(50) | 40.9) == (50 | 40)) {print "ok 144\n"}
1068else {
1069  warn "\n Expected ", 50 | 40, "\n Got ", Math::GMPz->new(50) | 40.9,"\n";
1070  print "not ok 144\n";
1071}
1072
1073if((Math::GMPz->new(50) ^ 40.1) == (50 ^ 40)) {print "ok 145\n"}
1074else {
1075  warn "\n Expected ", 50 ^ 40, "\n Got ", Math::GMPz->new(50) ^ 40.1,"\n";
1076  print "not ok 145\n";
1077}
1078
1079my $z = Math::GMPz->new('1234567');
1080my $i  = 1234567;
1081
1082$z &= 699999.6;
1083$i &= 699999;
1084
1085if($z == $i) {print "ok 146\n"}
1086else {
1087  warn "\n Expected $i\n Got $z\n";
1088  print "not ok 146\n";
1089}
1090
1091$z |= 233333.6;
1092$i |= 233333;
1093
1094if($z == $i) {print "ok 147\n"}
1095else {
1096  warn "\n Expected $i\n Got $z\n";
1097  print "not ok 147\n";
1098}
1099
1100$z ^= 101010.6;
1101$i ^= 101010;
1102
1103if($z == $i) {print "ok 148\n"}
1104else {
1105  warn "\n Expected $i\n Got $z\n";
1106  print "not ok 148\n";
1107}
1108
1109if("$strninf" =~ /^\-inf/i || $^O =~ /MSWin/) {
1110  my $z = Math::GMPz->new(-3);
1111
1112  if($z == "$strninf") {
1113    warn "\n $z == infinity\n";
1114    print "not ok 149\n";
1115  }
1116  else {print "ok 149\n"}
1117
1118  if($z != "$strninf") {print "ok 150\n"}
1119  else {
1120    warn "\n $z == infinity\n";
1121    print "not ok 150\n";
1122  }
1123
1124  if($z > "$strninf") {print "ok 151\n"}
1125  else {
1126    warn "\n $z <= infinity\n";
1127    print "not ok 151\n";
1128  }
1129
1130  if($z >= "$strninf") {print "ok 152\n"}
1131  else {
1132    warn "\n $z < infinity\n";
1133    print "not ok 152\n";
1134  }
1135
1136  if($z < "$strninf") {
1137    warn "\n $z < infinity\n";
1138    print "not ok 153\n";
1139  }
1140  else {print "ok 153\n"}
1141
1142  if($z <= "$strninf") {
1143    warn "\n $z <= infinity\n";
1144    print "not ok 154\n";
1145  }
1146  else {print "ok 154\n"}
1147
1148  if(($z <=> "$strninf") > 0) {print "ok 155\n"}
1149  else {
1150    warn "\n $z !> infinity\n";
1151    print "not ok 155\n";
1152  }
1153
1154}
1155else {
1156  warn "\n Skipping tests 149..155 (not MSWin, and -iNf !~ /^\\-inf/i)\n";
1157  for(149 .. 155 ) {print "ok $_\n"}
1158}
1159