1# -*- perl -*- 2 3use strict; 4use Set::IntSpan 1.17; 5 6my $N = 1; 7sub Not { print "not " } 8sub OK { print "ok ", $N++, "\n" } 9 10my @Cardinality = 11# C E F N P I U < > 12 ([' - ', 0, 1, 1, 0, 0, 0, 0, undef, undef ], 13 [' (-) ', -1, 0, 0, 1, 1, 1, 1, undef, undef ], 14 [' (-0 ', -1, 0, 0, 1, 0, 1, 0, undef, 0 ], 15 [' 0-) ', -1, 0, 0, 0, 1, 1, 0, 0 , undef ], 16 [' 1 ', 1, 0, 1, 0, 0, 0, 0, 1 , 1 ], 17 [' 5 ', 1, 0, 1, 0, 0, 0, 0, 5 , 5 ], 18 [' 1,3,5', 3, 0, 1, 0, 0, 0, 0, 1 , 5 ], 19 [' 1,3-5', 4, 0, 1, 0, 0, 0, 0, 1 , 5 ], 20 ['-1-5 ', 7, 0, 1, 0, 0, 0, 0, -1 , 5 ], 21 ); 22 23 24print "1..", 9 * @Cardinality, "\n"; 25Cardinality(); 26Empty(); 27Finite(); 28Neg_inf(); 29Pos_inf(); 30Infinite(); 31Universal(); 32Min(); 33Max(); 34 35 36sub Cardinality 37{ 38 print "#cardinality\n"; 39 40 for my $t (@Cardinality) 41 { 42 my $operand = $t->[0]; 43 my $set = new Set::IntSpan $operand; 44 my $expected = $t->[1]; 45 46 my $result = $set->cardinality(); 47 printf "#%-12s %-12s -> %d\n", 'cardinality', $operand, $result; 48 $result == $expected or Not; OK; 49 } 50} 51 52 53sub Empty { Size("empty" , 2) } 54sub Finite { Size("finite" , 3) } 55sub Neg_inf { Size("neg_inf" , 4) } 56sub Pos_inf { Size("pos_inf" , 5) } 57sub Infinite { Size("infinite" , 6) } 58sub Universal { Size("universal", 7) } 59 60sub Size 61{ 62 my($method, $column) = @_; 63 64 print "#$method\n"; 65 66 for my $t (@Cardinality) 67 { 68 my $operand = $t->[0]; 69 my $set = new Set::IntSpan $operand; 70 my $expected = $t->[$column]; 71 my $result = $set->$method(); 72 73 printf "#%-12s %-12s -> %d\n", $method, $operand, $result; 74 $result ? $expected : ! $expected or Not; OK; 75 } 76} 77 78 79sub Min { Extrema("min", 8) } 80sub Max { Extrema("max", 9) } 81 82 83sub Extrema 84{ 85 my($method, $column) = @_; 86 87 print "#$method\n"; 88 89 for my $t (@Cardinality) 90 { 91 my $operand = $t->[0]; 92 my $set = new Set::IntSpan $operand; 93 my $expected = $t->[$column]; 94 my $result = $set->$method(); 95 96 printf "#%-12s %-12s -> %s\n", 97 $method, $operand, defined $result ? $result : 'undef'; 98 99 not defined $result and not defined $expected or 100 defined $result and defined $expected and $result==$expected or 101 Not; OK; 102 } 103} 104 105 106