X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2Fop%2Farith.t;h=6009a2843943be6892daf028873312cf9ce89d92;hb=e24631be6ac297b562086a055de17c5bd4247797;hp=55a5e48084ef07eca3c808e0a993784cead121f2;hpb=7f45fac236f26ae9ce0b7455315edbed1b12f481;p=p5sagit%2Fp5-mst-13.2.git diff --git a/t/op/arith.t b/t/op/arith.t index 55a5e48..6009a28 100755 --- a/t/op/arith.t +++ b/t/op/arith.t @@ -5,6 +5,8 @@ BEGIN { @INC = '../lib'; } +use Config; + print "1..134\n"; sub try ($$) { @@ -22,7 +24,7 @@ sub tryeq_sloppy ($$$) { print "ok $_[0]\n"; } else { my $error = abs ($_[1] - $_[2]) / $_[1]; - if ($error < 1e-10) { + if ($error < 1e-9) { print "ok $_[0] # $_[1] is close to $_[2], \$^O eq $^O\n"; } else { print "not ok $_[0] # $_[1] != $_[2]\n"; @@ -242,7 +244,7 @@ tryeq 120, -0x80000000/1, -0x80000000; tryeq 121, -0x80000000/-1, 0x80000000; # The example for sloppy divide, rigged to avoid the peephole optimiser. -tryeq 122, "20." / "5.", 4; +tryeq_sloppy 122, "20." / "5.", 4; tryeq 123, 2.5 / 2, 1.25; tryeq 124, 3.5 / -2, -1.75; @@ -252,9 +254,9 @@ tryeq 126, -5.5 / -2, 2.75; # Bluuurg if your floating point can't accurately cope with powers of 2 # [I suspect this is parsing string->float problems, not actual arith] tryeq_sloppy 127, 18446744073709551616/1, 18446744073709551616; # Bluuurg -tryeq 128, 18446744073709551616/2, 9223372036854775808; -tryeq 129, 18446744073709551616/4294967296, 4294967296; -tryeq 130, 18446744073709551616/9223372036854775808, 2; +tryeq_sloppy 128, 18446744073709551616/2, 9223372036854775808; +tryeq_sloppy 129, 18446744073709551616/4294967296, 4294967296; +tryeq_sloppy 130, 18446744073709551616/9223372036854775808, 2; { # The peephole optimiser is wrong to think that it can substitute intops @@ -263,7 +265,7 @@ tryeq 130, 18446744073709551616/9223372036854775808, 2; my $n = 1127; my $float = ($n % 1000) * 167772160.0; - tryeq 131, $float, 21307064320; + tryeq_sloppy 131, $float, 21307064320; # On a 32 bit machine, if the i_multiply op is used, you will probably get # -167772160. It's actually undefined behaviour, so anything may happen. @@ -277,7 +279,14 @@ tryeq 130, 18446744073709551616/9223372036854775808, 2; if ($^O eq 'vos') { print "not ok 134 # TODO VOS raises SIGFPE instead of producing infinity.\n"; -} else { +} +elsif (($^O eq 'VMS') && !defined($Config{useieee})) { + print "ok 134 # SKIP -- the IEEE infinity model is unavailable in this configuration.\n"; +} +elsif ($^O eq 'ultrix') { + print "not ok 134 # TODO Ultrix enters deep nirvana instead of producing infinity.\n"; +} +else { # The computation of $v should overflow and produce "infinity" # on any system whose max exponent is less than 10**1506. # The exact string used to represent infinity varies by OS,