This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
lib/blib.t tweak for VMS
[perl5.git] / lib / Math / BigInt / t / upgrade.inc
CommitLineData
b3abae2a
JH
1#include this file into another for subclass testing
2
3# This file is nearly identical to bigintpm.t, except that certain results
4# are _requird_ to be different due to "upgrading" or "promoting" to BigFloat.
5# The reverse is not true, any unmarked results can be either BigInt or
79c55733
JH
6# BigFloat, depending on how good the internal optimization is (e.g. it
7# is usually desirable to have 2 ** 2 return an BigInt, not an BigFloat).
b3abae2a 8
79c55733
JH
9# Results that are required to be BigFloat are marked with an "^" at the end.
10
11# Please note that the testcount goes up by two for each extra result marked
b3abae2a
JH
12# with ^, since then we test whether it has the proper class and that it left
13# the upgrade variable alone.
14
15my $version = ${"$class\::VERSION"};
16
17##############################################################################
18# for testing inheritance of _swap
19
20package Math::Foo;
21
22use Math::BigInt lib => $main::CL;
23use vars qw/@ISA/;
24@ISA = (qw/Math::BigInt/);
25
26use overload
27# customized overload for sub, since original does not use swap there
28'-' => sub { my @a = ref($_[0])->_swap(@_);
29 $a[0]->bsub($a[1])};
30
31sub _swap
32 {
33 # a fake _swap, which reverses the params
34 my $self = shift; # for override in subclass
35 if ($_[2])
36 {
37 my $c = ref ($_[0] ) || 'Math::Foo';
38 return ( $_[0]->copy(), $_[1] );
39 }
40 else
41 {
42 return ( Math::Foo->new($_[1]), $_[0] );
43 }
44 }
45
46##############################################################################
47package main;
48
49my $CALC = $class->config()->{lib}; ok ($CALC,$CL);
50
51my ($f,$z,$a,$exp,@a,$m,$e,$round_mode,$expected_class);
52
53while (<DATA>)
54 {
55 chop;
56 next if /^#/; # skip comments
57 if (s/^&//)
58 {
59 $f = $_; next;
60 }
61 elsif (/^\$/)
62 {
63 $round_mode = $_; $round_mode =~ s/^\$/$class\->/; next;
64 }
65
66 @args = split(/:/,$_,99); $ans = pop(@args);
67 $expected_class = $class;
68 if ($ans =~ /\^$/)
69 {
70 $expected_class = $ECL; $ans =~ s/\^$//;
71 }
72 $try = "\$x = $class->new(\"$args[0]\");";
73 if ($f eq "bnorm")
74 {
75 $try = "\$x = $class->bnorm(\"$args[0]\");";
76 # some is_xxx tests
77 } elsif ($f =~ /^is_(zero|one|odd|even|negative|positive|nan|int)$/) {
78 $try .= "\$x->$f();";
79 } elsif ($f eq "as_hex") {
80 $try .= '$x->as_hex();';
81 } elsif ($f eq "as_bin") {
82 $try .= '$x->as_bin();';
83 } elsif ($f eq "is_inf") {
84 $try .= "\$x->is_inf('$args[1]');";
85 } elsif ($f eq "binf") {
86 $try .= "\$x->binf('$args[1]');";
87 } elsif ($f eq "bone") {
88 $try .= "\$x->bone('$args[1]');";
89 # some unary ops
90 } elsif ($f =~ /^b(nan|floor|ceil|sstr|neg|abs|inc|dec|not|sqrt|fac)$/) {
91 $try .= "\$x->$f();";
92 } elsif ($f eq "length") {
93 $try .= '$x->length();';
94 } elsif ($f eq "exponent"){
95 # ->bstr() to see if an object is returned
96 $try .= '$x = $x->exponent()->bstr();';
97 } elsif ($f eq "mantissa"){
98 # ->bstr() to see if an object is returned
99 $try .= '$x = $x->mantissa()->bstr();';
100 } elsif ($f eq "parts"){
101 $try .= '($m,$e) = $x->parts();';
102 # ->bstr() to see if an object is returned
103 $try .= '$m = $m->bstr(); $m = "NaN" if !defined $m;';
104 $try .= '$e = $e->bstr(); $e = "NaN" if !defined $e;';
105 $try .= '"$m,$e";';
106 } else {
79c55733
JH
107 if ($args[1] !~ /\./)
108 {
109 $try .= "\$y = $class->new(\"$args[1]\");"; # BigInt
110 }
111 else
112 {
113 $try .= "\$y = $ECL->new(\"$args[1]\");"; # BigFloat
114 }
b3abae2a
JH
115 if ($f eq "bcmp")
116 {
117 $try .= '$x <=> $y;';
118 } elsif ($f eq "bround") {
119 $try .= "$round_mode; \$x->bround(\$y);";
120 } elsif ($f eq "bacmp"){
121 $try .= '$x->bacmp($y);';
122 } elsif ($f eq "badd"){
123 $try .= '$x + $y;';
124 } elsif ($f eq "bsub"){
125 $try .= '$x - $y;';
126 } elsif ($f eq "bmul"){
127 $try .= '$x * $y;';
128 } elsif ($f eq "bdiv"){
129 $try .= '$x / $y;';
130 } elsif ($f eq "bdiv-list"){
131 $try .= 'join (",",$x->bdiv($y));';
132 # overload via x=
133 } elsif ($f =~ /^.=$/){
134 $try .= "\$x $f \$y;";
135 # overload via x
136 } elsif ($f =~ /^.$/){
137 $try .= "\$x $f \$y;";
138 } elsif ($f eq "bmod"){
139 $try .= '$x % $y;';
140 } elsif ($f eq "bgcd")
141 {
142 if (defined $args[2])
143 {
144 $try .= " \$z = $class->new('$args[2]'); ";
145 }
146 $try .= "$class\::bgcd(\$x, \$y";
147 $try .= ", \$z" if (defined $args[2]);
148 $try .= " );";
149 }
150 elsif ($f eq "blcm")
151 {
152 if (defined $args[2])
153 {
154 $try .= " \$z = $class->new('$args[2]'); ";
155 }
156 $try .= "$class\::blcm(\$x, \$y";
157 $try .= ", \$z" if (defined $args[2]);
158 $try .= " );";
159 }elsif ($f eq "blsft"){
160 if (defined $args[2])
161 {
162 $try .= "\$x->blsft(\$y,$args[2]);";
163 }
164 else
165 {
166 $try .= "\$x << \$y;";
167 }
168 }elsif ($f eq "brsft"){
169 if (defined $args[2])
170 {
171 $try .= "\$x->brsft(\$y,$args[2]);";
172 }
173 else
174 {
175 $try .= "\$x >> \$y;";
176 }
177 }elsif ($f eq "band"){
178 $try .= "\$x & \$y;";
179 }elsif ($f eq "bior"){
180 $try .= "\$x | \$y;";
181 }elsif ($f eq "bxor"){
182 $try .= "\$x ^ \$y;";
183 }elsif ($f eq "bpow"){
184 $try .= "\$x ** \$y;";
185 }elsif ($f eq "digit"){
186 $try = "\$x = $class->new('$args[0]'); \$x->digit($args[1]);";
187 } else { warn "Unknown op '$f'"; }
188 } # end else all other ops
189
190 $ans1 = eval $try;
191 # convert hex/binary targets to decimal
192 if ($ans =~ /^(0x0x|0b0b)/)
193 {
194 $ans =~ s/^0[xb]//; $ans = Math::BigInt->new($ans)->bstr();
195 }
196 if ($ans eq "")
197 {
198 ok_undef ($ans1);
199 }
200 else
201 {
202 # print "try: $try ans: $ans1 $ans\n";
203 print "# Tried: '$try'\n" if !ok ($ans1, $ans);
204 if ($expected_class ne $class)
205 {
206 ok (ref($ans1),$expected_class); # also checks that it really is ref!
207 ok ($Math::BigInt::upgrade,'Math::BigFloat'); # still okay?
208 }
209 }
210 # check internal state of number objects
211 is_valid($ans1,$f) if ref $ans1;
212 } # endwhile data tests
213close DATA;
214
215# all tests done
216
2171;
218
219###############################################################################
220###############################################################################
221# Perl 5.005 does not like ok ($x,undef)
222
223sub ok_undef
224 {
225 my $x = shift;
226
227 ok (1,1) and return if !defined $x;
228 ok ($x,'undef');
229 }
230
231###############################################################################
232# sub to check validity of a BigInt internally, to ensure that no op leaves a
233# number object in an invalid state (f.i. "-0")
234
235sub is_valid
236 {
237 my ($x,$f,$c) = @_;
238
239 # The checks here are loosened a bit to allow BigInt or BigFloats to pass
240
241 my $e = 0; # error?
242 # ok as reference?
243 # $e = "Not a reference to $c" if (ref($x) || '') ne $c;
244
245 # has ok sign?
246 $e = "Illegal sign $x->{sign} (expected: '+', '-', '-inf', '+inf' or 'NaN'"
247 if $e eq '0' && $x->{sign} !~ /^(\+|-|\+inf|-inf|NaN)$/;
248
249 $e = "-0 is invalid!" if $e ne '0' && $x->{sign} eq '-' && $x == 0;
250 #$e = $CALC->_check($x->{value}) if $e eq '0';
251
252 # test done, see if error did crop up
253 ok (1,1), return if ($e eq '0');
254
255 ok (1,$e." after op '$f'");
256 }
257
258__DATA__
259&.=
2601234:-345:1234-345
261&+=
2621:2:3
263-1:-2:-3
264&-=
2651:2:-1
266-1:-2:1
267&*=
2682:3:6
269-1:5:-5
270&%=
271100:3:1
2728:9:8
273&/=
79c55733 274100:3:33.33333333333333333333333333333333333333
b3abae2a
JH
275-8:2:-4
276&|=
2772:1:3
278&&=
2795:7:5
280&^=
2815:7:2
282&is_negative
2830:0
284-1:1
2851:0
286+inf:0
287-inf:1
288NaNneg:0
289&is_positive
2900:1
291-1:0
2921:1
293+inf:1
294-inf:0
295NaNneg:0
296&is_odd
297abc:0
2980:0
2991:1
3003:1
301-1:1
302-3:1
30310000001:1
30410000002:0
3052:0
306120:0
307121:1
308&is_int
309NaN:0
310inf:0
311-inf:0
3121:1
31312:1
314123e12:1
315&is_even
316abc:0
3170:1
3181:0
3193:0
320-1:0
321-3:0
32210000001:0
32310000002:1
3242:1
325120:1
326121:0
327&bacmp
328+0:-0:0
329+0:+1:-1
330-1:+1:0
331+1:-1:0
332-1:+2:-1
333+2:-1:1
334-123456789:+987654321:-1
335+123456789:-987654321:-1
336+987654321:+123456789:1
337-987654321:+123456789:1
338-123:+4567889:-1
339# NaNs
340acmpNaN:123:
341123:acmpNaN:
342acmpNaN:acmpNaN:
343# infinity
344+inf:+inf:0
345-inf:-inf:0
346+inf:-inf:0
347-inf:+inf:0
348+inf:123:1
349-inf:123:1
350+inf:-123:1
351-inf:-123:1
352# return undef
353+inf:NaN:
354NaN:inf:
355-inf:NaN:
356NaN:-inf:
357&bnorm
358123:123
35912.3:12.3^
360# binary input
3610babc:NaN
3620b123:NaN
3630b0:0
364-0b0:0
365-0b1:-1
3660b0001:1
3670b001:1
3680b011:3
3690b101:5
3700b1001:9
3710b10001:17
3720b100001:33
3730b1000001:65
3740b10000001:129
3750b100000001:257
3760b1000000001:513
3770b10000000001:1025
3780b100000000001:2049
3790b1000000000001:4097
3800b10000000000001:8193
3810b100000000000001:16385
3820b1000000000000001:32769
3830b10000000000000001:65537
3840b100000000000000001:131073
3850b1000000000000000001:262145
3860b10000000000000000001:524289
3870b100000000000000000001:1048577
3880b1000000000000000000001:2097153
3890b10000000000000000000001:4194305
3900b100000000000000000000001:8388609
3910b1000000000000000000000001:16777217
3920b10000000000000000000000001:33554433
3930b100000000000000000000000001:67108865
3940b1000000000000000000000000001:134217729
3950b10000000000000000000000000001:268435457
3960b100000000000000000000000000001:536870913
3970b1000000000000000000000000000001:1073741825
3980b10000000000000000000000000000001:2147483649
3990b100000000000000000000000000000001:4294967297
4000b1000000000000000000000000000000001:8589934593
4010b10000000000000000000000000000000001:17179869185
4020b_101:NaN
4030b1_0_1:5
4040b0_0_0_1:1
405# hex input
406-0x0:0
4070xabcdefgh:NaN
4080x1234:4660
4090xabcdef:11259375
410-0xABCDEF:-11259375
411-0x1234:-4660
4120x12345678:305419896
4130x1_2_3_4_56_78:305419896
4140xa_b_c_d_e_f:11259375
4150x_123:NaN
4160x9:9
4170x11:17
4180x21:33
4190x41:65
4200x81:129
4210x101:257
4220x201:513
4230x401:1025
4240x801:2049
4250x1001:4097
4260x2001:8193
4270x4001:16385
4280x8001:32769
4290x10001:65537
4300x20001:131073
4310x40001:262145
4320x80001:524289
4330x100001:1048577
4340x200001:2097153
4350x400001:4194305
4360x800001:8388609
4370x1000001:16777217
4380x2000001:33554433
4390x4000001:67108865
4400x8000001:134217729
4410x10000001:268435457
4420x20000001:536870913
4430x40000001:1073741825
4440x80000001:2147483649
4450x100000001:4294967297
4460x200000001:8589934593
4470x400000001:17179869185
4480x800000001:34359738369
449# inf input
450inf:inf
451+inf:inf
452-inf:-inf
4530inf:NaN
454# abnormal input
455:NaN
456abc:NaN
457 1 a:NaN
4581bcd2:NaN
45911111b:NaN
460+1z:NaN
461-1z:NaN
462# only one underscore between two digits
463_123:NaN
464_123_:NaN
465123_:NaN
4661__23:NaN
4671E1__2:NaN
4681_E12:NaN
4691E_12:NaN
4701_E_12:NaN
471+_1E12:NaN
472+0_1E2:100
473+0_0_1E2:100
474-0_0_1E2:-100
475-0_0_1E+0_0_2:-100
476E1:NaN
477E23:NaN
4781.23E1:12.3^
4791.23E-1:0.123^
480# bug with two E's in number beeing valid
4811e2e3:NaN
4821e2r:NaN
4831e2.0:NaN
484# leading zeros
485012:12
4860123:123
48701234:1234
488012345:12345
4890123456:123456
49001234567:1234567
491012345678:12345678
4920123456789:123456789
49301234567891:1234567891
494012345678912:12345678912
4950123456789123:123456789123
49601234567891234:1234567891234
497# normal input
4980:0
499+0:0
500+00:0
501+000:0
502000000000000000000:0
503-0:0
504-0000:0
505+1:1
506+01:1
507+001:1
508+00000100000:100000
509123456789:123456789
510-1:-1
511-01:-1
512-001:-1
513-123456789:-123456789
514-00000100000:-100000
5151_2_3:123
51610000000000E-1_0:1
5171E2:100
5181E1:10
5191E0:1
5201.23E2:123
521100E-1:10
522# floating point input
523# .2e2:20
5241.E3:1000
5251.01E2:101
5261010E-1:101
527-1010E0:-1010
528-1010E1:-10100
5291234.00:1234
530# non-integer numbers
531-1010E-2:-10.1^
532-1.01E+1:-10.1^
533-1.01E-1:-0.101^
534&bnan
5351:NaN
5362:NaN
537abc:NaN
538&bone
5392:+:1
5402:-:-1
541boneNaN:-:-1
542boneNaN:+:1
5432:abc:1
5443::1
545&binf
5461:+:inf
5472:-:-inf
5483:abc:inf
549&is_nan
550123:0
551abc:1
552NaN:1
553-123:0
554&is_inf
555+inf::1
556-inf::1
557abc::0
5581::0
559NaN::0
560-1::0
561+inf:-:0
562+inf:+:1
563-inf:-:1
564-inf:+:0
565# it must be exactly /^[+-]inf$/
566+infinity::0
567-infinity::0
568&blsft
569abc:abc:NaN
570+2:+2:8
571+1:+32:4294967296
572+1:+48:281474976710656
573+8:-2:NaN
574# excercise base 10
575+12345:4:10:123450000
576-1234:0:10:-1234
577+1234:0:10:1234
578+2:2:10:200
579+12:2:10:1200
580+1234:-3:10:NaN
5811234567890123:12:10:1234567890123000000000000
582&brsft
583abc:abc:NaN
584+8:+2:2
585+4294967296:+32:1
586+281474976710656:+48:1
587+2:-2:NaN
588# excercise base 10
589-1234:0:10:-1234
590+1234:0:10:1234
591+200:2:10:2
592+1234:3:10:1
593+1234:2:10:12
594+1234:-3:10:NaN
595310000:4:10:31
59612300000:5:10:123
5971230000000000:10:10:123
59809876123456789067890:12:10:9876123
5991234561234567890123:13:10:123456
600&bsstr
6011e+34:1e+34
602123.456E3:123456e+0
603100:1e+2
604abc:NaN
605&bneg
606bnegNaN:NaN
607+inf:-inf
608-inf:inf
609abd:NaN
6100:0
6111:-1
612-1:1
613+123456789:-123456789
614-123456789:123456789
615&babs
616babsNaN:NaN
617+inf:inf
618-inf:inf
6190:0
6201:1
621-1:1
622+123456789:123456789
623-123456789:123456789
624&bcmp
625bcmpNaN:bcmpNaN:
626bcmpNaN:0:
6270:bcmpNaN:
6280:0:0
629-1:0:-1
6300:-1:1
6311:0:1
6320:1:-1
633-1:1:-1
6341:-1:1
635-1:-1:0
6361:1:0
637123:123:0
638123:12:1
63912:123:-1
640-123:-123:0
641-123:-12:-1
642-12:-123:1
643123:124:-1
644124:123:1
645-123:-124:1
646-124:-123:-1
647100:5:1
648-123456789:987654321:-1
649+123456789:-987654321:1
650-987654321:123456789:-1
651-inf:5432112345:-1
652+inf:5432112345:1
653-inf:-5432112345:-1
654+inf:-5432112345:1
655+inf:+inf:0
656-inf:-inf:0
657+inf:-inf:1
658-inf:+inf:-1
6595:inf:-1
6605:inf:-1
661-5:-inf:1
662-5:-inf:1
663# return undef
664+inf:NaN:
665NaN:inf:
666-inf:NaN:
667NaN:-inf:
668&binc
669abc:NaN
670+inf:inf
671-inf:-inf
672+0:1
673+1:2
674-1:0
675&bdec
676abc:NaN
677+inf:inf
678-inf:-inf
679+0:-1
680+1:0
681-1:-2
682&badd
683abc:abc:NaN
684abc:0:NaN
685+0:abc:NaN
686+inf:-inf:NaN
687-inf:+inf:NaN
688+inf:+inf:inf
689-inf:-inf:-inf
690baddNaN:+inf:NaN
691baddNaN:+inf:NaN
692+inf:baddNaN:NaN
693-inf:baddNaN:NaN
6940:0:0
6951:0:1
6960:1:1
6971:1:2
698-1:0:-1
6990:-1:-1
700-1:-1:-2
701-1:+1:0
702+1:-1:0
703+9:+1:10
704+99:+1:100
705+999:+1:1000
706+9999:+1:10000
707+99999:+1:100000
708+999999:+1:1000000
709+9999999:+1:10000000
710+99999999:+1:100000000
711+999999999:+1:1000000000
712+9999999999:+1:10000000000
713+99999999999:+1:100000000000
714+10:-1:9
715+100:-1:99
716+1000:-1:999
717+10000:-1:9999
718+100000:-1:99999
719+1000000:-1:999999
720+10000000:-1:9999999
721+100000000:-1:99999999
722+1000000000:-1:999999999
723+10000000000:-1:9999999999
724+123456789:987654321:1111111110
725-123456789:987654321:864197532
726-123456789:-987654321:-1111111110
727+123456789:-987654321:-864197532
56b9c951
JH
7282:2.5:4.5^
729-123:-1.5:-124.5^
730-1.2:1:-0.2^
b3abae2a
JH
731&bsub
732abc:abc:NaN
733abc:+0:NaN
734+0:abc:NaN
735+inf:-inf:inf
736-inf:+inf:-inf
737+inf:+inf:NaN
738-inf:-inf:NaN
739+0:+0:0
740+1:+0:1
741+0:+1:-1
742+1:+1:0
743-1:+0:-1
744+0:-1:1
745-1:-1:0
746-1:+1:-2
747+1:-1:2
748+9:+1:8
749+99:+1:98
750+999:+1:998
751+9999:+1:9998
752+99999:+1:99998
753+999999:+1:999998
754+9999999:+1:9999998
755+99999999:+1:99999998
756+999999999:+1:999999998
757+9999999999:+1:9999999998
758+99999999999:+1:99999999998
759+10:-1:11
760+100:-1:101
761+1000:-1:1001
762+10000:-1:10001
763+100000:-1:100001
764+1000000:-1:1000001
765+10000000:-1:10000001
766+100000000:-1:100000001
767+1000000000:-1:1000000001
768+10000000000:-1:10000000001
769+123456789:+987654321:-864197532
770-123456789:+987654321:-1111111110
771-123456789:-987654321:864197532
772+123456789:-987654321:1111111110
773&bmul
774abc:abc:NaN
775abc:+0:NaN
776+0:abc:NaN
777NaNmul:+inf:NaN
778NaNmul:-inf:NaN
779-inf:NaNmul:NaN
780+inf:NaNmul:NaN
781+inf:+inf:inf
782+inf:-inf:-inf
783-inf:+inf:-inf
784-inf:-inf:inf
785+0:+0:0
786+0:+1:0
787+1:+0:0
788+0:-1:0
789-1:+0:0
790123456789123456789:0:0
7910:123456789123456789:0
792-1:-1:1
793-1:+1:-1
794+1:-1:-1
795+1:+1:1
796+2:+3:6
797-2:+3:-6
798+2:-3:-6
799-2:-3:6
800111:111:12321
80110101:10101:102030201
8021001001:1001001:1002003002001
803100010001:100010001:10002000300020001
80410000100001:10000100001:100002000030000200001
80511111111111:9:99999999999
80622222222222:9:199999999998
80733333333333:9:299999999997
80844444444444:9:399999999996
80955555555555:9:499999999995
81066666666666:9:599999999994
81177777777777:9:699999999993
81288888888888:9:799999999992
81399999999999:9:899999999991
814+25:+25:625
815+12345:+12345:152399025
816+99999:+11111:1111088889
8179999:10000:99990000
81899999:100000:9999900000
819999999:1000000:999999000000
8209999999:10000000:99999990000000
82199999999:100000000:9999999900000000
822999999999:1000000000:999999999000000000
8239999999999:10000000000:99999999990000000000
82499999999999:100000000000:9999999999900000000000
825999999999999:1000000000000:999999999999000000000000
8269999999999999:10000000000000:99999999999990000000000000
82799999999999999:100000000000000:9999999999999900000000000000
828999999999999999:1000000000000000:999999999999999000000000000000
8299999999999999999:10000000000000000:99999999999999990000000000000000
83099999999999999999:100000000000000000:9999999999999999900000000000000000
831999999999999999999:1000000000000000000:999999999999999999000000000000000000
8329999999999999999999:10000000000000000000:99999999999999999990000000000000000000
79c55733
JH
8333:3.5:10.5^
8343.5:3:10.5^
b3abae2a
JH
835&bdiv-list
836100:20:5,0
8374095:4095:1,0
838-4095:-4095:1,0
8394095:-4095:-1,0
840-4095:4095:-1,0
79c55733
JH
841123:2:61.5,1
8429:5:1.8,4
8439:4:2.25,1
b3abae2a
JH
844# inf handling and general remainder
8455:8:0.625,5
8460:8:0,0
79c55733
JH
84711:2:5.5,1
84811:-2:-5.5,-1
849-11:2:-5.5,1
b3abae2a
JH
850# see table in documentation in MBI
8510:inf:0,0
8520:-inf:0,0
8535:inf:0,5
8545:-inf:0,5
855-5:inf:0,-5
856-5:-inf:0,-5
857inf:5:inf,0
858-inf:5:-inf,0
859inf:-5:-inf,0
860-inf:-5:inf,0
8615:5:1,0
862-5:-5:1,0
863inf:inf:NaN,NaN
864-inf:-inf:NaN,NaN
865-inf:inf:NaN,NaN
866inf:-inf:NaN,NaN
8678:0:inf,8
868inf:0:inf,inf
869# exceptions to reminder rule
870-8:0:-inf,-8
871-inf:0:-inf,-inf
8720:0:NaN,NaN
873&bdiv
874abc:abc:NaN
875abc:1:NaN
8761:abc:NaN
8770:0:NaN
878# inf handling (see table in doc)
8790:inf:0
8800:-inf:0
8815:inf:0
8825:-inf:0
883-5:inf:0
884-5:-inf:0
885inf:5:inf
886-inf:5:-inf
887inf:-5:-inf
888-inf:-5:inf
8895:5:1
890-5:-5:1
891inf:inf:NaN
892-inf:-inf:NaN
893-inf:inf:NaN
894inf:-inf:NaN
8958:0:inf
896inf:0:inf
897-8:0:-inf
898-inf:0:-inf
8990:0:NaN
79c55733
JH
90011:2:5.5^
901-11:-2:5.5^
902-11:2:-5.5^
90311:-2:-5.5^
b3abae2a
JH
9040:1:0
9050:-1:0
9061:1:1
907-1:-1:1
9081:-1:-1
909-1:1:-1
9101:2:0.5^
9112:1:2
79c55733
JH
9121000000000:9:111111111.1111111111111111111111111111111^
9132000000000:9:222222222.2222222222222222222222222222222^
9143000000000:9:333333333.3333333333333333333333333333333^
9154000000000:9:444444444.4444444444444444444444444444444^
9165000000000:9:555555555.5555555555555555555555555555556^
9176000000000:9:666666666.6666666666666666666666666666667^
9187000000000:9:777777777.7777777777777777777777777777778^
9198000000000:9:888888888.8888888888888888888888888888889^
b3abae2a 9209000000000:9:1000000000
79c55733
JH
92135500000:113:314159.2920353982300884955752212389380531^
92271000000:226:314159.2920353982300884955752212389380531^
923106500000:339:314159.2920353982300884955752212389380531^
9241000000000:3:333333333.3333333333333333333333333333333^
b3abae2a
JH
925+10:+5:2
926+100:+4:25
927+1000:+8:125
928+10000:+16:625
929999999999999:9:111111111111
930999999999999:99:10101010101
931999999999999:999:1001001001
932999999999999:9999:100010001
933999999999999999:99999:10000100001
934+1111088889:99999:11111
79c55733
JH
935-5:-3:1.666666666666666666666666666666666666667^
936-5:3:-1.666666666666666666666666666666666666667^
9374:3:1.333333333333333333333333333333333333333^
9384:-3:-1.333333333333333333333333333333333333333^
9391:3:0.3333333333333333333333333333333333333333^
9401:-3:-0.3333333333333333333333333333333333333333^
941-2:-3:0.6666666666666666666666666666666666666667^
942-2:3:-0.6666666666666666666666666666666666666667^
9438:5:1.6^
944-8:5:-1.6^
94514:-3:-4.666666666666666666666666666666666666667^
946-14:3:-4.666666666666666666666666666666666666667^
947-14:-3:4.666666666666666666666666666666666666667^
94814:3:4.666666666666666666666666666666666666667^
b3abae2a 949# bug in Calc with '99999' vs $BASE-1
79c55733 950#10000000000000000000000000000000000000000000000000000000000000000000000000000000000:10000000375084540248994272022843165711074:999999962491547381984643365663244474111576
b3abae2a
JH
95112:24:0.5^
952&bmod
953# inf handling, see table in doc
9540:inf:0
9550:-inf:0
9565:inf:5
9575:-inf:5
958-5:inf:-5
959-5:-inf:-5
960inf:5:0
961-inf:5:0
962inf:-5:0
963-inf:-5:0
9645:5:0
965-5:-5:0
966inf:inf:NaN
967-inf:-inf:NaN
968-inf:inf:NaN
969inf:-inf:NaN
9708:0:8
971inf:0:inf
972# exceptions to reminder rule
973-inf:0:-inf
974-8:0:-8
9750:0:NaN
976abc:abc:NaN
977abc:1:abc:NaN
9781:abc:NaN
9790:0:NaN
9800:1:0
9811:0:1
9820:-1:0
983-1:0:-1
9841:1:0
985-1:-1:0
9861:-1:0
987-1:1:0
9881:2:1
9892:1:0
9901000000000:9:1
9912000000000:9:2
9923000000000:9:3
9934000000000:9:4
9945000000000:9:5
9956000000000:9:6
9967000000000:9:7
9978000000000:9:8
9989000000000:9:0
99935500000:113:33
100071000000:226:66
1001106500000:339:99
10021000000000:3:1
100310:5:0
1004100:4:0
10051000:8:0
100610000:16:0
1007999999999999:9:0
1008999999999999:99:0
1009999999999999:999:0
1010999999999999:9999:0
1011999999999999999:99999:0
1012-9:+5:1
1013+9:-5:-1
1014-9:-5:-4
1015-5:3:1
1016-2:3:1
10174:3:1
10181:3:1
1019-5:-3:-2
1020-2:-3:-2
10214:-3:-2
10221:-3:-2
10234095:4095:0
1024100041000510123:3:0
1025152403346:12345:4321
10269:5:4
1027&bgcd
1028abc:abc:NaN
1029abc:+0:NaN
1030+0:abc:NaN
1031+0:+0:0
1032+0:+1:1
1033+1:+0:1
1034+1:+1:1
1035+2:+3:1
1036+3:+2:1
1037-3:+2:1
1038100:625:25
10394096:81:1
10401034:804:2
104127:90:56:1
104227:90:54:9
1043&blcm
1044abc:abc:NaN
1045abc:+0:NaN
1046+0:abc:NaN
1047+0:+0:NaN
1048+1:+0:0
1049+0:+1:0
1050+27:+90:270
1051+1034:+804:415668
1052&band
1053abc:abc:NaN
1054abc:0:NaN
10550:abc:NaN
10561:2:0
10573:2:2
1058+8:+2:0
1059+281474976710656:0:0
1060+281474976710656:1:0
1061+281474976710656:+281474976710656:281474976710656
1062-2:-3:-4
1063-1:-1:-1
1064-6:-6:-6
1065-7:-4:-8
1066-7:4:0
1067-4:7:4
1068# equal arguments are treated special, so also do some test with unequal ones
10690xFFFF:0xFFFF:0x0xFFFF
10700xFFFFFF:0xFFFFFF:0x0xFFFFFF
10710xFFFFFFFF:0xFFFFFFFF:0x0xFFFFFFFF
10720xFFFFFFFFFF:0xFFFFFFFFFF:0x0xFFFFFFFFFF
10730xFFFFFFFFFFFF:0xFFFFFFFFFFFF:0x0xFFFFFFFFFFFF
10740xF0F0:0xF0F0:0x0xF0F0
10750x0F0F:0x0F0F:0x0x0F0F
10760xF0F0F0:0xF0F0F0:0x0xF0F0F0
10770x0F0F0F:0x0F0F0F:0x0x0F0F0F
10780xF0F0F0F0:0xF0F0F0F0:0x0xF0F0F0F0
10790x0F0F0F0F:0x0F0F0F0F:0x0x0F0F0F0F
10800xF0F0F0F0F0:0xF0F0F0F0F0:0x0xF0F0F0F0F0
10810x0F0F0F0F0F:0x0F0F0F0F0F:0x0x0F0F0F0F0F
10820xF0F0F0F0F0F0:0xF0F0F0F0F0F0:0x0xF0F0F0F0F0F0
10830x0F0F0F0F0F0F:0x0F0F0F0F0F0F:0x0x0F0F0F0F0F0F
10840x1F0F0F0F0F0F:0x3F0F0F0F0F0F:0x0x1F0F0F0F0F0F
1085&bior
1086abc:abc:NaN
1087abc:0:NaN
10880:abc:NaN
10891:2:3
1090+8:+2:10
1091+281474976710656:0:281474976710656
1092+281474976710656:1:281474976710657
1093+281474976710656:281474976710656:281474976710656
1094-2:-3:-1
1095-1:-1:-1
1096-6:-6:-6
1097-7:4:-3
1098-4:7:-1
1099# equal arguments are treated special, so also do some test with unequal ones
11000xFFFF:0xFFFF:0x0xFFFF
11010xFFFFFF:0xFFFFFF:0x0xFFFFFF
11020xFFFFFFFF:0xFFFFFFFF:0x0xFFFFFFFF
11030xFFFFFFFFFF:0xFFFFFFFFFF:0x0xFFFFFFFFFF
11040xFFFFFFFFFFFF:0xFFFFFFFFFFFF:0x0xFFFFFFFFFFFF
11050:0xFFFF:0x0xFFFF
11060:0xFFFFFF:0x0xFFFFFF
11070:0xFFFFFFFF:0x0xFFFFFFFF
11080:0xFFFFFFFFFF:0x0xFFFFFFFFFF
11090:0xFFFFFFFFFFFF:0x0xFFFFFFFFFFFF
11100xFFFF:0:0x0xFFFF
11110xFFFFFF:0:0x0xFFFFFF
11120xFFFFFFFF:0:0x0xFFFFFFFF
11130xFFFFFFFFFF:0:0x0xFFFFFFFFFF
11140xFFFFFFFFFFFF:0:0x0xFFFFFFFFFFFF
11150xF0F0:0xF0F0:0x0xF0F0
11160x0F0F:0x0F0F:0x0x0F0F
11170xF0F0:0x0F0F:0x0xFFFF
11180xF0F0F0:0xF0F0F0:0x0xF0F0F0
11190x0F0F0F:0x0F0F0F:0x0x0F0F0F
11200x0F0F0F:0xF0F0F0:0x0xFFFFFF
11210xF0F0F0F0:0xF0F0F0F0:0x0xF0F0F0F0
11220x0F0F0F0F:0x0F0F0F0F:0x0x0F0F0F0F
11230x0F0F0F0F:0xF0F0F0F0:0x0xFFFFFFFF
11240xF0F0F0F0F0:0xF0F0F0F0F0:0x0xF0F0F0F0F0
11250x0F0F0F0F0F:0x0F0F0F0F0F:0x0x0F0F0F0F0F
11260x0F0F0F0F0F:0xF0F0F0F0F0:0x0xFFFFFFFFFF
11270xF0F0F0F0F0F0:0xF0F0F0F0F0F0:0x0xF0F0F0F0F0F0
11280x0F0F0F0F0F0F:0x0F0F0F0F0F0F:0x0x0F0F0F0F0F0F
11290x0F0F0F0F0F0F:0xF0F0F0F0F0F0:0x0xFFFFFFFFFFFF
11300x1F0F0F0F0F0F:0xF0F0F0F0F0F0:0x0xFFFFFFFFFFFF
1131&bxor
1132abc:abc:NaN
1133abc:0:NaN
11340:abc:NaN
11351:2:3
1136+8:+2:10
1137+281474976710656:0:281474976710656
1138+281474976710656:1:281474976710657
1139+281474976710656:281474976710656:0
1140-2:-3:3
1141-1:-1:0
1142-6:-6:0
1143-7:4:-3
1144-4:7:-5
11454:-7:-3
1146-4:-7:5
1147# equal arguments are treated special, so also do some test with unequal ones
11480xFFFF:0xFFFF:0
11490xFFFFFF:0xFFFFFF:0
11500xFFFFFFFF:0xFFFFFFFF:0
11510xFFFFFFFFFF:0xFFFFFFFFFF:0
11520xFFFFFFFFFFFF:0xFFFFFFFFFFFF:0
11530:0xFFFF:0x0xFFFF
11540:0xFFFFFF:0x0xFFFFFF
11550:0xFFFFFFFF:0x0xFFFFFFFF
11560:0xFFFFFFFFFF:0x0xFFFFFFFFFF
11570:0xFFFFFFFFFFFF:0x0xFFFFFFFFFFFF
11580xFFFF:0:0x0xFFFF
11590xFFFFFF:0:0x0xFFFFFF
11600xFFFFFFFF:0:0x0xFFFFFFFF
11610xFFFFFFFFFF:0:0x0xFFFFFFFFFF
11620xFFFFFFFFFFFF:0:0x0xFFFFFFFFFFFF
11630xF0F0:0xF0F0:0
11640x0F0F:0x0F0F:0
11650xF0F0:0x0F0F:0x0xFFFF
11660xF0F0F0:0xF0F0F0:0
11670x0F0F0F:0x0F0F0F:0
11680x0F0F0F:0xF0F0F0:0x0xFFFFFF
11690xF0F0F0F0:0xF0F0F0F0:0
11700x0F0F0F0F:0x0F0F0F0F:0
11710x0F0F0F0F:0xF0F0F0F0:0x0xFFFFFFFF
11720xF0F0F0F0F0:0xF0F0F0F0F0:0
11730x0F0F0F0F0F:0x0F0F0F0F0F:0
11740x0F0F0F0F0F:0xF0F0F0F0F0:0x0xFFFFFFFFFF
11750xF0F0F0F0F0F0:0xF0F0F0F0F0F0:0
11760x0F0F0F0F0F0F:0x0F0F0F0F0F0F:0
11770x0F0F0F0F0F0F:0xF0F0F0F0F0F0:0x0xFFFFFFFFFFFF
1178&bnot
1179abc:NaN
1180+0:-1
1181+8:-9
1182+281474976710656:-281474976710657
1183-1:0
1184-2:1
1185-12:11
1186&digit
11870:0:0
118812:0:2
118912:1:1
1190123:0:3
1191123:1:2
1192123:2:1
1193123:-1:1
1194123:-2:2
1195123:-3:3
1196123456:0:6
1197123456:1:5
1198123456:2:4
1199123456:3:3
1200123456:4:2
1201123456:5:1
1202123456:-1:1
1203123456:-2:2
1204123456:-3:3
1205100000:-3:0
1206100000:0:0
1207100000:1:0
1208&mantissa
1209abc:NaN
12101e4:1
12112e0:2
1212123:123
1213-1:-1
1214-2:-2
1215+inf:inf
1216-inf:-inf
1217&exponent
1218abc:NaN
12191e4:4
12202e0:0
1221123:0
1222-1:0
1223-2:0
12240:1
1225+inf:inf
1226-inf:inf
1227&parts
1228abc:NaN,NaN
12291e4:1,4
12302e0:2,0
1231123:123,0
1232-1:-1,0
1233-2:-2,0
12340:0,1
1235+inf:inf,inf
1236-inf:-inf,inf
1237&bfac
1238-1:NaN
1239NaNfac:NaN
1240+inf:NaN
1241-inf:NaN
12420:1
12431:1
12442:2
12453:6
12464:24
12475:120
12486:720
124910:3628800
125011:39916800
125112:479001600
1252&bpow
1253abc:12:NaN
125412:abc:NaN
12550:0:1
12560:1:0
12570:2:0
12580:-1:NaN
12590:-2:NaN
12601:0:1
12611:1:1
12621:2:1
12631:3:1
12641:-1:1
12651:-2:1
12661:-3:1
12672:0:1
12682:1:2
12692:2:4
12702:3:8
12713:3:27
12722:-1:NaN
1273-2:-1:NaN
12742:-2:NaN
1275-2:-2:NaN
1276+inf:1234500012:inf
1277-inf:1234500012:-inf
1278+inf:-12345000123:inf
1279-inf:-12345000123:-inf
1280# 1 ** -x => 1 / (1 ** x)
1281-1:0:1
1282-2:0:1
1283-1:1:-1
1284-1:2:1
1285-1:3:-1
1286-1:4:1
1287-1:5:-1
1288-1:-1:-1
1289-1:-2:1
1290-1:-3:-1
1291-1:-4:1
129210:2:100
129310:3:1000
129410:4:10000
129510:5:100000
129610:6:1000000
129710:7:10000000
129810:8:100000000
129910:9:1000000000
130010:20:100000000000000000000
1301123456:2:15241383936
79c55733 1302#2:0.5:1.41^
b3abae2a
JH
1303&length
1304100:3
130510:2
13061:1
13070:1
130812345:5
130910000000000000000:17
1310-123:3
1311215960156869840440586892398248:30
1312&bsqrt
1313145:12.04159457879229548012824103037860805243^
1314144:12^
1315143:11.95826074310139802112984075619561661399^
131616:4
1317170:13.03840481040529742916594311485836883306^
1318169:13
1319168:12.96148139681572046193193487217599331541^
13204:2
13213:1.732050807568877293527446341505872366943^
13222:1.41421356237309504880168872420969807857^
13239:3
132412:3.464101615137754587054892683011744733886^
1325256:16
1326100000000:10000
13274000000000000:2000000
1328152399026:12345.00004050222755607815159966235881398^
1329152399025:12345
1330152399024:12344.99995949777231103967404745303741942^
13311:1
13320:0
1333-2:NaN
1334-123:NaN
1335Nan:NaN
1336+inf:NaN
1337&bround
1338$round_mode('trunc')
13390:12:0
1340NaNbround:12:NaN
1341+inf:12:inf
1342-inf:12:-inf
13431234:0:1234
13441234:2:1200
1345123456:4:123400
1346123456:5:123450
1347123456:6:123456
1348+10123456789:5:10123000000
1349-10123456789:5:-10123000000
1350+10123456789:9:10123456700
1351-10123456789:9:-10123456700
1352+101234500:6:101234000
1353-101234500:6:-101234000
1354#+101234500:-4:101234000
1355#-101234500:-4:-101234000
1356$round_mode('zero')
1357+20123456789:5:20123000000
1358-20123456789:5:-20123000000
1359+20123456789:9:20123456800
1360-20123456789:9:-20123456800
1361+201234500:6:201234000
1362-201234500:6:-201234000
1363#+201234500:-4:201234000
1364#-201234500:-4:-201234000
1365+12345000:4:12340000
1366-12345000:4:-12340000
1367$round_mode('+inf')
1368+30123456789:5:30123000000
1369-30123456789:5:-30123000000
1370+30123456789:9:30123456800
1371-30123456789:9:-30123456800
1372+301234500:6:301235000
1373-301234500:6:-301234000
1374#+301234500:-4:301235000
1375#-301234500:-4:-301234000
1376+12345000:4:12350000
1377-12345000:4:-12340000
1378$round_mode('-inf')
1379+40123456789:5:40123000000
1380-40123456789:5:-40123000000
1381+40123456789:9:40123456800
1382-40123456789:9:-40123456800
1383+401234500:6:401234000
1384+401234500:6:401234000
1385#-401234500:-4:-401235000
1386#-401234500:-4:-401235000
1387+12345000:4:12340000
1388-12345000:4:-12350000
1389$round_mode('odd')
1390+50123456789:5:50123000000
1391-50123456789:5:-50123000000
1392+50123456789:9:50123456800
1393-50123456789:9:-50123456800
1394+501234500:6:501235000
1395-501234500:6:-501235000
1396#+501234500:-4:501235000
1397#-501234500:-4:-501235000
1398+12345000:4:12350000
1399-12345000:4:-12350000
1400$round_mode('even')
1401+60123456789:5:60123000000
1402-60123456789:5:-60123000000
1403+60123456789:9:60123456800
1404-60123456789:9:-60123456800
1405+601234500:6:601234000
1406-601234500:6:-601234000
1407#+601234500:-4:601234000
1408#-601234500:-4:-601234000
1409#-601234500:-9:0
1410#-501234500:-9:0
1411#-601234500:-8:0
1412#-501234500:-8:0
1413+1234567:7:1234567
1414+1234567:6:1234570
1415+12345000:4:12340000
1416-12345000:4:-12340000
1417&is_zero
14180:1
1419NaNzero:0
1420+inf:0
1421-inf:0
1422123:0
1423-1:0
14241:0
1425&is_one
14260:0
1427NaNone:0
1428+inf:0
1429-inf:0
14301:1
14312:0
1432-1:0
1433-2:0
1434# floor and ceil tests are pretty pointless in integer space...but play safe
1435&bfloor
14360:0
1437NaNfloor:NaN
1438+inf:inf
1439-inf:-inf
1440-1:-1
1441-2:-2
14422:2
14433:3
1444abc:NaN
1445&bceil
1446NaNceil:NaN
1447+inf:inf
1448-inf:-inf
14490:0
1450-1:-1
1451-2:-2
14522:2
14533:3
1454abc:NaN
1455&as_hex
1456128:0x80
1457-128:-0x80
14580:0x0
1459-0:0x0
14601:0x1
14610x123456789123456789:0x123456789123456789
1462+inf:inf
1463-inf:-inf
1464NaNas_hex:NaN
1465&as_bin
1466128:0b10000000
1467-128:-0b10000000
14680:0b0
1469-0:0b0
14701:0b1
14710b1010111101010101010110110110110110101:0b1010111101010101010110110110110110101
1472+inf:inf
1473-inf:-inf
1474NaNas_bin:NaN