1use Regex::PreSuf; 2 3print "1..24\n"; 4 5my $test = 1; 6 7sub tlen { 8 my ($sub, $list, $n_want, $diff_want) = @_; 9 10 $list = [ map { [ quotemeta() =~ /(.)/g ] } @$list ]; 11 12 my ($n, %diff) = $sub->(@$list); 13 my @diff = sort keys %diff; 14 my $ok = $n == $n_want && 15 @diff == @$diff_want && 16 unpack("%32C*", join("\0", @diff)) eq 17 unpack("%32C*", join("\0", @$diff_want)); 18 print "not " unless $ok; 19 print "ok $test"; 20 $test++; 21 print "\n"; 22 print <<EOF 23# expected: $n_want @$diff_want 24# got: $n @diff 25EOF 26 unless $ok; 27} 28 29tlen(\&Regex::PreSuf::prefix_length, [qw(foobar foobar)], 6, [qw()]); 30tlen(\&Regex::PreSuf::prefix_length, [qw(foobar fooxar)], 3, [qw(b x)]); 31tlen(\&Regex::PreSuf::prefix_length, [qw(foobar foobaz)], 5, [qw(r z)]); 32tlen(\&Regex::PreSuf::prefix_length, [qw(foobar foozot)], 3, [qw(b z)]); 33tlen(\&Regex::PreSuf::prefix_length, [qw(foobar feebar)], 1, [qw(e o)]); 34tlen(\&Regex::PreSuf::prefix_length, [qw(foobar barfoo)], 0, [qw(b f)]); 35tlen(\&Regex::PreSuf::prefix_length, [qw(foopar fooqar)], 3, [qw(p q)]); 36tlen(\&Regex::PreSuf::prefix_length, [qw(foopar fooar)], 3, [qw(a p)]); 37tlen(\&Regex::PreSuf::prefix_length, [qw(o o o o o o o)], 1, [qw()]); 38tlen(\&Regex::PreSuf::prefix_length, [qw(o o o o o o u)], 0, [qw(o u)]); 39tlen(\&Regex::PreSuf::prefix_length, [qw(ou ou ou ou ou)],2, [qw()]); 40tlen(\&Regex::PreSuf::prefix_length, [qw(ou ou ou ou uo)],0, [qw(o u)]); 41 42tlen(\&Regex::PreSuf::suffix_length, [qw(foobar foobar)], 6, [qw()]); 43tlen(\&Regex::PreSuf::suffix_length, [qw(foobar fooxar)], 2, [qw(b x)]); 44tlen(\&Regex::PreSuf::suffix_length, [qw(foobar goobar)], 5, [qw(f g)]); 45tlen(\&Regex::PreSuf::suffix_length, [qw(foobar barbar)], 3, [qw(o r)]); 46tlen(\&Regex::PreSuf::suffix_length, [qw(foobar foober)], 1, [qw(a e)]); 47tlen(\&Regex::PreSuf::suffix_length, [qw(foobar barfoo)], 0, [qw(o r)]); 48tlen(\&Regex::PreSuf::suffix_length, [qw(foopar fooqar)], 2, [qw(p q)]); 49tlen(\&Regex::PreSuf::suffix_length, [qw(foopar fooar)], 2, [qw(o p)]); 50tlen(\&Regex::PreSuf::suffix_length, [qw(o o o o o o o)], 1, [qw()]); 51tlen(\&Regex::PreSuf::suffix_length, [qw(o o o o o o u)], 0, [qw(o u)]); 52tlen(\&Regex::PreSuf::suffix_length, [qw(ou ou ou ou ou)],2, [qw()]); 53tlen(\&Regex::PreSuf::suffix_length, [qw(ou ou ou ou uo)],0, [qw(o u)]); 54 55