File: id_cmp.t

package info (click to toggle)
libdata-float-perl 0.015-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 188 kB
  • sloc: perl: 549; makefile: 2
file content (49 lines) | stat: -rw-r--r-- 1,218 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
use warnings;
use strict;

use Test::More tests => 1 + 2*9*9 + 8*9;

BEGIN { use_ok "Data::Float", qw(
	have_infinite have_signed_zero have_nan float_id_cmp totalorder
); }

no strict "refs";
my @values = (
	sub { have_nan ? &{"Data::Float::nan"} : undef },
	sub { have_infinite ? &{"Data::Float::neg_infinity"} : undef },
	-1000.0,
	-0.125,
	sub { have_signed_zero ? &{"Data::Float::neg_zero"} : undef },
	+0.0,
	+0.125,
	+1000.0,
	sub { have_infinite ? &{"Data::Float::pos_infinity"} : undef },
);

foreach(@values) {
	$_ = $_->() if ref($_) eq "CODE";
}

sub zpat($) { my($z) = @_; my $nz = -$z; sprintf("%+.f%+.f%+.f",$z,$nz,-$nz) }

for(my $ia = @values; $ia--; ) {
	for(my $ib = @values; $ib--; ) {
		SKIP: {
			my($a, $b) = @values[$ia, $ib];
			my $az = $ia == 4 || $ia == 5 ? 1 : 0;
			my $bz = $ib == 4 || $ib == 5 ? 1 : 0;
			skip "special value not available", 2*(1+$az+$bz)
				unless defined($a) && defined($b);
			my($ta, $tb) = ($a, $b);
			is float_id_cmp($ta, $tb), ($ia <=> $ib);
			is zpat($ta), zpat($a) if $az;
			is zpat($tb), zpat($b) if $bz;
			($ta, $tb) = ($a, $b);
			is !!totalorder($ta, $tb), ($ia <= $ib);
			is zpat($ta), zpat($a) if $az;
			is zpat($tb), zpat($b) if $bz;
		}
	}
}

1;