This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
11883c88c2a3bf14 introduced an error in 64bitint.t with long doubles.
authorNicholas Clark <nick@ccl4.org>
Sat, 12 Mar 2011 00:03:40 +0000 (00:03 +0000)
committerNicholas Clark <nick@ccl4.org>
Sat, 12 Mar 2011 00:06:09 +0000 (00:06 +0000)
On a platform where an NV is long enough to preserve all UVs, division is
always done in floating point. Hence the result may become stringified in E
notation. Hence testing that it is not in E notation (as a testing proxy for
"was integer arithmetic used?") is inappropriate on such a platform.

t/op/64bitint.t

index e4296f2..168d597 100644 (file)
@@ -14,6 +14,7 @@ BEGIN {
 # 32+ bit integers don't cause noise
 use warnings;
 no warnings qw(overflow portable);
 # 32+ bit integers don't cause noise
 use warnings;
 no warnings qw(overflow portable);
+use Config;
 
 # as 6 * 6 = 36, the last digit of 6**n will always be six. Hence the last
 # digit of 16**n will always be six. Hence 16**n - 1 will always end in 5.
 
 # as 6 * 6 = 36, the last digit of 6**n will always be six. Hence the last
 # digit of 16**n will always be six. Hence 16**n - 1 will always end in 5.
@@ -314,6 +315,8 @@ cmp_ok($q, '==', 0x5555555555555555);
 SKIP: {
     skip("Maths does not preserve UVs", 2) unless $maths_preserves_UVs;
     cmp_ok($q, '!=', 0x5555555555555556);
 SKIP: {
     skip("Maths does not preserve UVs", 2) unless $maths_preserves_UVs;
     cmp_ok($q, '!=', 0x5555555555555556);
+    skip("All UV division is precise as NVs, so is done as NVs", 1)
+       if $Config{d_nv_preserves_uv};
     unlike($q, qr/[e.]/);
 }
 
     unlike($q, qr/[e.]/);
 }