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