# -*- perl -*- use strict; use Set::IntSpan 1.13; my $N = 1; sub Not { print "not " } sub OK { print "ok ", $N++, "\n" } sub Table { [ map { [ split(' ', $_) ] } split(/\s*\n\s*/, shift) ] } my @Sets = split(' ', q{ - (-) (-3 3-) 3 3-5 3-5,7-9 } ); my @Elements = ( 1..7 ); my $Member = Table < %d\n", "member", $run_list, $int, $result; my $expected = $Member->[$s][$i]; $result ? $expected : ! $expected or Not; OK; } } } sub Insert { Delta("insert", $Insert) } sub Remove { Delta("remove", $Remove) } sub Delta { my($method, $expected) = @_; print "#$method\n"; for my $s (0..$#Sets) { for my $i (0..$#Elements) { my $run_list = $Sets[$s]; my $set = new Set::IntSpan $run_list; my $int = $Elements[$i]; $set->$method($int); my $result = run_list $set; printf "#%-12s %-12s %d -> %s\n", $method, $run_list, $int, $result; $result eq $expected->[$s][$i] or Not; OK; } } }