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 10sub Table { [ map { [ split(' ', $_) ] } split(/\s*\n\s*/, shift) ] } 11 12my @Sets = split(' ', q{ - (-) (-3 3-) 3 3-5 3-5,7-9 } ); 13my @Elements = ( 1..7 ); 14 15my $Member = Table <<TABLE; 160 0 0 0 0 0 0 171 1 1 1 1 1 1 181 1 1 0 0 0 0 190 0 1 1 1 1 1 200 0 1 0 0 0 0 210 0 1 1 1 0 0 220 0 1 1 1 0 1 23TABLE 24 25my $Insert = Table <<TABLE; 26 1 2 3 4 5 6 7 27(-) (-) (-) (-) (-) (-) (-) 28(-3 (-3 (-3 (-4 (-3,5 (-3,6 (-3,7 291,3-) 2-) 3-) 3-) 3-) 3-) 3-) 301,3 2-3 3 3-4 3,5 3,6 3,7 311,3-5 2-5 3-5 3-5 3-5 3-6 3-5,7 321,3-5,7-9 2-5,7-9 3-5,7-9 3-5,7-9 3-5,7-9 3-9 3-5,7-9 33TABLE 34 35my $Remove = Table <<TABLE; 36- - - - - - - 37(-0,2-) (-1,3-) (-2,4-) (-3,5-) (-4,6-) (-5,7-) (-6,8-) 38(-0,2-3 (-1,3 (-2 (-3 (-3 (-3 (-3 393-) 3-) 4-) 3,5-) 3-4,6-) 3-5,7-) 3-6,8-) 403 3 - 3 3 3 3 413-5 3-5 4-5 3,5 3-4 3-5 3-5 423-5,7-9 3-5,7-9 4-5,7-9 3,5,7-9 3-4,7-9 3-5,7-9 3-5,8-9 43TABLE 44 45 46print "1..", 3 * @Sets * @Elements, "\n"; 47Member(); 48Insert(); 49Remove(); 50 51 52sub Member 53{ 54 print "#member\n"; 55 56 for my $s (0..$#Sets) 57 { 58 for my $i (0..$#Elements) 59 { 60 my $run_list = $Sets[$s]; 61 my $set = new Set::IntSpan $run_list; 62 my $int = $Elements[$i]; 63 my $result = member $set $int; 64 65 printf "#%-12s %-12s %d -> %d\n", 66 "member", $run_list, $int, $result; 67 my $expected = $Member->[$s][$i]; 68 $result ? $expected : ! $expected or Not; OK; 69 } 70 } 71} 72 73 74sub Insert { Delta("insert", $Insert) } 75sub Remove { Delta("remove", $Remove) } 76 77sub Delta 78{ 79 my($method, $expected) = @_; 80 81 print "#$method\n"; 82 83 for my $s (0..$#Sets) 84 { 85 for my $i (0..$#Elements) 86 { 87 my $run_list = $Sets[$s]; 88 my $set = new Set::IntSpan $run_list; 89 my $int = $Elements[$i]; 90 $set->$method($int); 91 my $result = run_list $set; 92 93 printf "#%-12s %-12s %d -> %s\n", 94 $method, $run_list, $int, $result; 95 $result eq $expected->[$s][$i] or Not; OK; 96 } 97 } 98} 99