File: cardinal.t

package info (click to toggle)
libset-intspan-perl 1.19-3
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, forky, sid, trixie
  • size: 224 kB
  • sloc: perl: 1,236; makefile: 2
file content (105 lines) | stat: -rw-r--r-- 2,256 bytes parent folder | download | duplicates (3)
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
# -*- perl -*-

use strict;
use Set::IntSpan 1.17;

my $N = 1;
sub Not { print "not " }
sub OK  { print "ok ", $N++, "\n" }

my @Cardinality = 
#		 C  E  F  N  P  I  U   <      >
    (['  -   ',  0, 1, 1, 0, 0, 0, 0,  undef, undef ],
     [' (-)  ', -1, 0, 0, 1, 1, 1, 1,  undef, undef ],
     [' (-0  ', -1, 0, 0, 1, 0, 1, 0,  undef, 0     ],
     [' 0-)  ', -1, 0, 0, 0, 1, 1, 0,  0    , undef ],
     ['  1   ',  1, 0, 1, 0, 0, 0, 0,  1    , 1     ],
     ['  5   ',  1, 0, 1, 0, 0, 0, 0,  5    , 5     ],
     [' 1,3,5',  3, 0, 1, 0, 0, 0, 0,  1    , 5     ],
     [' 1,3-5',  4, 0, 1, 0, 0, 0, 0,  1    , 5     ],
     ['-1-5  ',  7, 0, 1, 0, 0, 0, 0, -1    , 5     ],
     );


print "1..", 9 * @Cardinality, "\n";
Cardinality();
Empty();
Finite();
Neg_inf();
Pos_inf();
Infinite();
Universal();
Min();
Max();


sub Cardinality
{
    print "#cardinality\n";

    for my $t (@Cardinality)
    {
	my $operand = $t->[0];
	my $set = new Set::IntSpan $operand;
	my $expected = $t->[1];

	my $result = $set->cardinality();
	printf "#%-12s %-12s -> %d\n", 'cardinality', $operand, $result;
	$result == $expected or Not; OK;
    }
}


sub Empty     { Size("empty"    , 2) }
sub Finite    { Size("finite"   , 3) }
sub Neg_inf   { Size("neg_inf"  , 4) }
sub Pos_inf   { Size("pos_inf"  , 5) }
sub Infinite  { Size("infinite" , 6) }
sub Universal { Size("universal", 7) }

sub Size
{
    my($method, $column) = @_;
   
    print "#$method\n";

    for my $t (@Cardinality)
    {
	my $operand = $t->[0];
	my $set = new Set::IntSpan $operand;
	my $expected = $t->[$column];
	my $result = $set->$method();

	printf "#%-12s %-12s -> %d\n", $method, $operand, $result;
	$result ? $expected : ! $expected or Not; OK;
    }
}


sub Min { Extrema("min", 8) }
sub Max { Extrema("max", 9) }


sub Extrema
{
    my($method, $column) = @_;
   
    print "#$method\n";

    for my $t (@Cardinality)
    {
	my $operand  = $t->[0];
	my $set      = new Set::IntSpan $operand;
	my $expected = $t->[$column];
	my $result   = $set->$method();

	printf "#%-12s %-12s -> %s\n", 
	$method, $operand, defined $result ? $result : 'undef';

	not defined $result and not defined $expected or 
	    defined $result and     defined $expected and $result==$expected or
		Not; OK;
    }
}