X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2Fop%2Fcmp.t;h=1eca8ab2b813aac691cc0d3f3fd8781898d682ee;hb=69938bbac29d5bcb76b80f6eccb27c5ff84cee37;hp=ffd34c62dd9135c148b5931a1fd02c4f5b434609;hpb=16b7a9a47be196cb33bf757faad24e73ceffc2fc;p=p5sagit%2Fp5-mst-13.2.git diff --git a/t/op/cmp.t b/t/op/cmp.t index ffd34c6..1eca8ab 100755 --- a/t/op/cmp.t +++ b/t/op/cmp.t @@ -28,15 +28,23 @@ $iv_min = $iv_max; my $uv_bigi = $iv_big; $uv_bigi |= 0x0; +my @array = qw(perl rules); + # Seems one needs to perform the maths on 'Inf' to get the NV correctly primed. @FOO = ('s', 'N/A', 'a', 'NaN', -1, undef, 0, 1, 3.14, 1e37, 0.632120558, -.5, 'Inf'+1, '-Inf'-1, 0x0, 0x1, 0x5, 0xFFFFFFFF, $uv_max, $uv_maxm1, $uv_big, $uv_bigi, $iv0, $iv1, $ivm1, $iv_min, $iv_max, $iv_big, - $iv_small); + $iv_small, \$array[0], \$array[0], \$array[1], \$^X); -$expect = 6 * ($#FOO+2) * ($#FOO+1); +$expect = 7 * ($#FOO+2) * ($#FOO+1); print "1..$expect\n"; +sub nok ($$$$$$$$) { + my ($test, $left, $threeway, $right, $result, $i, $j, $boolean) = @_; + $result = defined $result ? "'$result'" : 'undef'; + print "not ok $test # ($left <=> $right) gives: $result \$i=$i \$j=$j, $boolean disagrees\n"; +} + my $ok = 0; for my $i (0..$#FOO) { for my $j ($i..$#FOO) { @@ -44,14 +52,14 @@ for my $i (0..$#FOO) { # Comparison routines may convert these internally, which would change # what is used to determine the comparison on later runs. Hence copy my ($i1, $i2, $i3, $i4, $i5, $i6, $i7, $i8, $i9, $i10, - $i11, $i12, $i13, $i14, $i15) = - ($FOO[$i], $FOO[$i], $FOO[$i], $FOO[$i], $FOO[$i], - $FOO[$i], $FOO[$i], $FOO[$i], $FOO[$i], $FOO[$i], + $i11, $i12, $i13, $i14, $i15, $i16, $i17) = + ($FOO[$i], $FOO[$i], $FOO[$i], $FOO[$i], $FOO[$i], $FOO[$i], + $FOO[$i], $FOO[$i], $FOO[$i], $FOO[$i], $FOO[$i], $FOO[$i], $FOO[$i], $FOO[$i], $FOO[$i], $FOO[$i], $FOO[$i]); my ($j1, $j2, $j3, $j4, $j5, $j6, $j7, $j8, $j9, $j10, - $j11, $j12, $j13, $j14, $j15) = - ($FOO[$j], $FOO[$j], $FOO[$j], $FOO[$j], $FOO[$j], - $FOO[$j], $FOO[$j], $FOO[$j], $FOO[$j], $FOO[$j], + $j11, $j12, $j13, $j14, $j15, $j16, $j17) = + ($FOO[$j], $FOO[$j], $FOO[$j], $FOO[$j], $FOO[$j], $FOO[$j], + $FOO[$j], $FOO[$j], $FOO[$j], $FOO[$j], $FOO[$j], $FOO[$j], $FOO[$j], $FOO[$j], $FOO[$j], $FOO[$j], $FOO[$j]); my $cmp = $i1 <=> $j1; if (!defined($cmp) ? !($i2 < $j2) @@ -62,7 +70,7 @@ for my $i (0..$#FOO) { print "ok $ok\n"; } else { - print "not ok $ok # ($i3 <=> $j3) gives: '$cmp' \$i=$i \$j=$j, < disagrees\n"; + nok ($ok, $i3, '<=>', $j3, $cmp, $i, $j, '<'); } $ok++; if (!defined($cmp) ? !($i4 == $j4) @@ -73,7 +81,7 @@ for my $i (0..$#FOO) { print "ok $ok\n"; } else { - print "not ok $ok # ($i3 <=> $j3) gives: '$cmp' \$i=$i \$j=$j, == disagrees\n"; + nok ($ok, $i3, '<=>', $j3, $cmp, $i, $j, '=='); } $ok++; if (!defined($cmp) ? !($i5 > $j5) @@ -84,7 +92,7 @@ for my $i (0..$#FOO) { print "ok $ok\n"; } else { - print "not ok $ok # ($i3 <=> $j3) gives: '$cmp' \$i=$i \$j=$j, > disagrees\n"; + nok ($ok, $i3, '<=>', $j3, $cmp, $i, $j, '>'); } $ok++; if (!defined($cmp) ? !($i6 >= $j6) @@ -95,7 +103,7 @@ for my $i (0..$#FOO) { print "ok $ok\n"; } else { - print "not ok $ok # ($i3 <=> $j3) gives: '$cmp' \$i=$i \$j=$j, >= disagrees\n"; + nok ($ok, $i3, '<=>', $j3, $cmp, $i, $j, '>='); } $ok++; # OK, so the docs are wrong it seems. NaN != NaN @@ -107,7 +115,7 @@ for my $i (0..$#FOO) { print "ok $ok\n"; } else { - print "not ok $ok # ($i3 <=> $j3) gives: '$cmp' \$i=$i \$j=$j, != disagrees\n"; + nok ($ok, $i3, '<=>', $j3, $cmp, $i, $j, '!='); } $ok++; if (!defined($cmp) ? !($i8 <= $j8) @@ -118,9 +126,23 @@ for my $i (0..$#FOO) { print "ok $ok\n"; } else { - print "not ok $ok # ($i3 <=> $j3) gives: '$cmp' \$i=$i \$j=$j, <= disagrees\n"; + nok ($ok, $i3, '<=>', $j3, $cmp, $i, $j, '<='); } $ok++; + my $pmc = $j16 <=> $i16; # cmp it in reverse + # Should give -ve of other answer, or undef for NaNs + # a + -a should be zero. not zero is truth. which avoids using == + if (defined($cmp) ? !($cmp + $pmc) : !defined $pmc) + { + print "ok $ok\n"; + } + else { + nok ($ok, $i3, '<=>', $j3, $cmp, $i, $j, '<=> transposed'); + } + + + # String comparisons + $ok++; $cmp = $i9 cmp $j9; if ($cmp == -1 && $i10 lt $j10 || $cmp == 0 && !($i10 lt $j10) || @@ -129,7 +151,7 @@ for my $i (0..$#FOO) { print "ok $ok\n"; } else { - print "not ok $ok # ($i3 cmp $j3) gives '$cmp' \$i=$i \$j=$j, lt disagrees\n"; + nok ($ok, $i3, 'cmp', $j3, $cmp, $i, $j, 'lt'); } $ok++; if ($cmp == -1 && !($i11 eq $j11) || @@ -139,7 +161,7 @@ for my $i (0..$#FOO) { print "ok $ok\n"; } else { - print "not ok $ok # ($i3 cmp $j3) gives '$cmp' \$i=$i \$j=$j, eq disagrees\n"; + nok ($ok, $i3, 'cmp', $j3, $cmp, $i, $j, 'eq'); } $ok++; if ($cmp == -1 && !($i12 gt $j12) || @@ -149,7 +171,7 @@ for my $i (0..$#FOO) { print "ok $ok\n"; } else { - print "not ok $ok # ($i3 cmp $j3) gives '$cmp' \$i=$i \$j=$j, gt disagrees\n"; + nok ($ok, $i3, 'cmp', $j3, $cmp, $i, $j, 'gt'); } $ok++; if ($cmp == -1 && $i13 le $j13 || @@ -159,7 +181,7 @@ for my $i (0..$#FOO) { print "ok $ok\n"; } else { - print "not ok $ok # ($i3 cmp $j3) gives '$cmp' \$i=$i \$j=$j, le disagrees\n"; + nok ($ok, $i3, 'cmp', $j3, $cmp, $i, $j, 'le'); } $ok++; if ($cmp == -1 && ($i14 ne $j14) || @@ -169,7 +191,7 @@ for my $i (0..$#FOO) { print "ok $ok\n"; } else { - print "not ok $ok # ($i3 cmp $j3) gives '$cmp' \$i=$i \$j=$j, ne disagrees\n"; + nok ($ok, $i3, 'cmp', $j3, $cmp, $i, $j, 'ne'); } $ok++; if ($cmp == -1 && !($i15 ge $j15) || @@ -179,7 +201,18 @@ for my $i (0..$#FOO) { print "ok $ok\n"; } else { - print "not ok $ok # ($i3 cmp $j3) gives '$cmp' \$i=$i \$j=$j, ge disagrees\n"; + nok ($ok, $i3, 'cmp', $j3, $cmp, $i, $j, 'ge'); + } + $ok++; + $pmc = $j17 cmp $i17; # cmp it in reverse + # Should give -ve of other answer + # a + -a should be zero. not zero is truth. which avoids using == + if (!($cmp + $pmc)) + { + print "ok $ok\n"; + } + else { + nok ($ok, $i3, '<=>', $j3, $cmp, $i, $j, 'cmp transposed'); } } }