9 unshift @INC, '../lib'; # for running manually
10 # chdir 't' if -d 't';
17 my ($x,$y,$f,@args,$ans,$try,$ans1,$ans1_str,$setup);
21 $_ =~ s/#.*$//; # remove comments
22 $_ =~ s/\s+$//; # trailing spaces
23 next if /^$/; # skip empty lines & comments
30 $setup = $_; $setup =~ s/^\$/\$Math::BigFloat::/; # rnd_mode, div_scale
38 @args = split(/:/,$1,99);
42 @args = split(/:/,$_,99); $ans = pop(@args);
44 $try = "\$x = new Math::BigFloat \"$args[0]\";";
48 } elsif ($f eq "binf") {
49 $try .= "\$x->binf('$args[1]');";
50 } elsif ($f eq "bsstr") {
51 $try .= "\$x->bsstr();";
52 } elsif ($f eq "_set") {
53 $try .= "\$x->_set('$args[1]'); \$x;";
54 } elsif ($f eq "fneg") {
56 } elsif ($f eq "bfloor") {
57 $try .= "\$x->bfloor();";
58 } elsif ($f eq "bceil") {
59 $try .= "\$x->bceil();";
60 } elsif ($f eq "is_zero") {
61 $try .= "\$x->is_zero()+0;";
62 } elsif ($f eq "is_one") {
63 $try .= "\$x->is_one()+0;";
64 } elsif ($f eq "is_odd") {
65 $try .= "\$x->is_odd()+0;";
66 } elsif ($f eq "is_even") {
67 $try .= "\$x->is_even()+0;";
68 } elsif ($f eq "as_number") {
69 $try .= "\$x->as_number();";
70 } elsif ($f eq "fpow") {
71 $try .= "\$x ** $args[1];";
72 } elsif ($f eq "fabs") {
74 }elsif ($f eq "fround") {
75 $try .= "$setup; \$x->fround($args[1]);";
76 } elsif ($f eq "ffround") {
77 $try .= "$setup; \$x->ffround($args[1]);";
78 } elsif ($f eq "fsqrt") {
79 $try .= "$setup; \$x->fsqrt();";
83 $try .= "\$y = new Math::BigFloat \"$args[1]\";";
85 $try .= "\$x <=> \$y;";
86 } elsif ($f eq "fadd") {
88 } elsif ($f eq "fsub") {
90 } elsif ($f eq "fmul") {
92 } elsif ($f eq "fdiv") {
93 $try .= "$setup; \$x / \$y;";
94 } elsif ($f eq "fmod") {
96 } else { warn "Unknown op '$f'"; }
99 if ($ans =~ m|^/(.*)$|)
108 print "# '$try' expected: /$pat/ got: '$ans1'\n" if !ok(1,0);
119 print "# Tried: '$try'\n" if !ok ($ans1, $ans);
121 } # end pattern or string
127 ###############################################################################
128 # Perl 5.005 does not like ok ($x,undef)
134 ok (1,1) and return if !defined $x;
170 000000_0000000_00000:0
181 -123456789:-123456789
189 -.0000000004:-0.0000000004
196 -3e111:-3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
197 -4e-1111:-0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004
204 123.456:2:15241.383936
207 128:-2:0.00006103515625
213 +123456789:-123456789
215 +123.456789:-123.456789
216 -123456.789:123456.789
224 +123.456789:123.456789
225 -123456.789:123456.789
228 +10123456789:5:10123000000
229 -10123456789:5:-10123000000
230 +10123456789.123:5:10123000000
231 -10123456789.123:5:-10123000000
232 +10123456789:9:10123456700
233 -10123456789:9:-10123456700
234 +101234500:6:101234000
235 -101234500:6:-101234000
237 +20123456789:5:20123000000
238 -20123456789:5:-20123000000
239 +20123456789.123:5:20123000000
240 -20123456789.123:5:-20123000000
241 +20123456789:9:20123456800
242 -20123456789:9:-20123456800
243 +201234500:6:201234000
244 -201234500:6:-201234000
246 +30123456789:5:30123000000
247 -30123456789:5:-30123000000
248 +30123456789.123:5:30123000000
249 -30123456789.123:5:-30123000000
250 +30123456789:9:30123456800
251 -30123456789:9:-30123456800
252 +301234500:6:301235000
253 -301234500:6:-301234000
255 +40123456789:5:40123000000
256 -40123456789:5:-40123000000
257 +40123456789.123:5:40123000000
258 -40123456789.123:5:-40123000000
259 +40123456789:9:40123456800
260 -40123456789:9:-40123456800
261 +401234500:6:401234000
262 -401234500:6:-401235000
264 +50123456789:5:50123000000
265 -50123456789:5:-50123000000
266 +50123456789.123:5:50123000000
267 -50123456789.123:5:-50123000000
268 +50123456789:9:50123456800
269 -50123456789:9:-50123456800
270 +501234500:6:501235000
271 -501234500:6:-501235000
273 +60123456789:5:60123000000
274 -60123456789:5:-60123000000
275 +60123456789:9:60123456800
276 -60123456789:9:-60123456800
277 +601234500:6:601234000
278 -601234500:6:-601234000
279 +60123456789.0123:5:60123000000
280 -60123456789.0123:5:-60123000000
299 -0.0061234567890:-1:0
307 -0.0065:-3:/-0\.006|-6e-03
308 -0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
309 -0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
315 +2.23:-1:/2.2(?:0{5}\d+)?
316 -2.23:-1:/-2.2(?:0{5}\d+)?
317 +2.27:-1:/2.(?:3|29{5}\d+)
318 -2.27:-1:/-2.(?:3|29{5}\d+)
319 +2.25:-1:/2.2(?:0{5}\d+)?
320 -2.25:-1:/-2.2(?:0{5}\d+)?
321 +2.35:-1:/2.(?:3|29{5}\d+)
322 -2.35:-1:/-2.(?:3|29{5}\d+)
324 -0.0065:-2:/-0\.01|-1e-02
325 -0.0065:-3:/-0\.006|-6e-03
326 -0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
327 -0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
333 +3.23:-1:/3.2(?:0{5}\d+)?
334 -3.23:-1:/-3.2(?:0{5}\d+)?
335 +3.27:-1:/3.(?:3|29{5}\d+)
336 -3.27:-1:/-3.(?:3|29{5}\d+)
337 +3.25:-1:/3.(?:3|29{5}\d+)
338 -3.25:-1:/-3.2(?:0{5}\d+)?
339 +3.35:-1:/3.(?:4|39{5}\d+)
340 -3.35:-1:/-3.(?:3|29{5}\d+)
342 -0.0065:-2:/-0\.01|-1e-02
343 -0.0065:-3:/-0\.006|-6e-03
344 -0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
345 -0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
351 +4.23:-1:/4.2(?:0{5}\d+)?
352 -4.23:-1:/-4.2(?:0{5}\d+)?
353 +4.27:-1:/4.(?:3|29{5}\d+)
354 -4.27:-1:/-4.(?:3|29{5}\d+)
355 +4.25:-1:/4.2(?:0{5}\d+)?
356 -4.25:-1:/-4.(?:3|29{5}\d+)
357 +4.35:-1:/4.(?:3|29{5}\d+)
358 -4.35:-1:/-4.(?:4|39{5}\d+)
360 -0.0065:-2:/-0\.01|-1e-02
361 -0.0065:-3:/-0\.007|-7e-03
362 -0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
363 -0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
369 +5.23:-1:/5.2(?:0{5}\d+)?
370 -5.23:-1:/-5.2(?:0{5}\d+)?
371 +5.27:-1:/5.(?:3|29{5}\d+)
372 -5.27:-1:/-5.(?:3|29{5}\d+)
373 +5.25:-1:/5.(?:3|29{5}\d+)
374 -5.25:-1:/-5.(?:3|29{5}\d+)
375 +5.35:-1:/5.(?:3|29{5}\d+)
376 -5.35:-1:/-5.(?:3|29{5}\d+)
378 -0.0065:-2:/-0\.01|-1e-02
379 -0.0065:-3:/-0\.007|-7e-03
380 -0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
381 -0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
387 +6.23:-1:/6.2(?:0{5}\d+)?
388 -6.23:-1:/-6.2(?:0{5}\d+)?
389 +6.27:-1:/6.(?:3|29{5}\d+)
390 -6.27:-1:/-6.(?:3|29{5}\d+)
391 +6.25:-1:/6.(?:2(?:0{5}\d+)?|29{5}\d+)
392 -6.25:-1:/-6.(?:2(?:0{5}\d+)?|29{5}\d+)
393 +6.35:-1:/6.(?:4|39{5}\d+|29{8}\d+)
394 -6.35:-1:/-6.(?:4|39{5}\d+|29{8}\d+)
396 -0.0065:-2:/-0\.01|-1e-02
397 -0.0065:-3:/-0\.006|-7e-03
398 -0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
399 -0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
406 0.01234567:-5:0.01235
407 0.01234567:-6:0.012346
408 0.01234567:-7:0.0123457
409 0.01234567:-8:0.01234567
410 0.01234567:-9:0.01234567
411 0.01234567:-12:0.01234567
455 0.000001:0.0005:-2 # <0, but can't test this
456 0.00000123:0.0005:-2 # <0, but can't test this
480 +99999999:+1:100000000
481 +999999999:+1:1000000000
482 +9999999999:+1:10000000000
483 +99999999999:+1:100000000000
491 +100000000:-1:99999999
492 +1000000000:-1:999999999
493 +10000000000:-1:9999999999
494 +123456789:+987654321:1111111110
495 -123456789:+987654321:864197532
496 -123456789:-987654321:-1111111110
497 +123456789:-987654321:-864197532
518 +99999999:+1:99999998
519 +999999999:+1:999999998
520 +9999999999:+1:9999999998
521 +99999999999:+1:99999999998
528 +10000000:-1:10000001
529 +100000000:-1:100000001
530 +1000000000:-1:1000000001
531 +10000000000:-1:10000000001
532 +123456789:+987654321:-864197532
533 -123456789:+987654321:-1111111110
534 -123456789:-987654321:864197532
535 +123456789:-987654321:1111111110
545 +123456789123456789:+0:0
546 +0:+123456789123456789:0
556 +10101:+10101:102030201
557 +1001001:+1001001:1002003002001
558 +100010001:+100010001:10002000300020001
559 +10000100001:+10000100001:100002000030000200001
560 +11111111111:+9:99999999999
561 +22222222222:+9:199999999998
562 +33333333333:+9:299999999997
563 +44444444444:+9:399999999996
564 +55555555555:+9:499999999995
565 +66666666666:+9:599999999994
566 +77777777777:+9:699999999993
567 +88888888888:+9:799999999992
568 +99999999999:+9:899999999991
570 $div_scale = 40; $Math::BigFloat::rnd_mode = 'even'
590 +999999999999:+9:111111111111
591 +999999999999:+99:10101010101
592 +999999999999:+999:1001001001
593 +999999999999:+9999:100010001
594 +999999999999999:+99999:10000100001
595 +1000000000:+9:111111111.1111111111111111111111111111111
596 +2000000000:+9:222222222.2222222222222222222222222222222
597 +3000000000:+9:333333333.3333333333333333333333333333333
598 +4000000000:+9:444444444.4444444444444444444444444444444
599 +5000000000:+9:555555555.5555555555555555555555555555556
600 +6000000000:+9:666666666.6666666666666666666666666666667
601 +7000000000:+9:777777777.7777777777777777777777777777778
602 +8000000000:+9:888888888.8888888888888888888888888888889
603 +9000000000:+9:1000000000
604 +35500000:+113:314159.2920353982300884955752212389380531
605 +71000000:+226:314159.2920353982300884955752212389380531
606 +106500000:+339:314159.2920353982300884955752212389380531
607 +1000000000:+3:333333333.3333333333333333333333333333333
609 +1000000000:+9:111111111.11111111111
610 +2000000000:+9:222222222.22222222222
611 +3000000000:+9:333333333.33333333333
612 +4000000000:+9:444444444.44444444444
613 +5000000000:+9:555555555.55555555556
614 +6000000000:+9:666666666.66666666667
615 +7000000000:+9:777777777.77777777778
616 +8000000000:+9:888888888.88888888889
617 +9000000000:+9:1000000000
618 # following two cases are the "old" behaviour, but are now (>v0.01) different
619 #+35500000:+113:314159.292035398230088
620 #+71000000:+226:314159.292035398230088
621 +35500000:+113:314159.29203539823009
622 +71000000:+226:314159.29203539823009
623 +106500000:+339:314159.29203539823009
624 +1000000000:+3:333333333.33333333333
626 # div_scale will be 3 since $x has 3 digits
628 # reset scale for further tests
647 #+2:1.41421356237309504880168872420969807857
651 #+123.456:11.11107555549866648462149404118219234119
652 #+15241.38393:123.456