#!/usr/bin/perl
# Checks that the given regexp matches everything except the given string.
# Tests with all strings up to 8 characters in length that are composed of the
# characters the string, plus '#', which is assumed not to occur in the string.
use strict;
use warnings;
my $string = "MOOSE";
my $regexp = qr/^(.{0,4}$|.{6}|[^M]|.[^O]|..[^O]|...[^S]|....[^E])/;
my %char;
for (split //, $string) {
$char{$_}++;
}
$char{'#'}++;
my @chars = sort keys %char;
print "@chars\n";
sub testit {
local ($_) = @_;
my $got = /$regexp/ ? "true" : "false";
my $want = $_ ne $string ? "true" : "false";
if ($got ne $want) {
die "regexp('$_')=$got; want $want\n";
}
}
for my $length (1..8) {
allStringsOfLength($length, [@chars], \&testit, "")
}
print "OK\n";
sub allStringsOfLength {
my ($length, $chars, $func, $prefix) = @_;
if (length($prefix) == $length) {
$func->($prefix);
return;
}
foreach my $char (@$chars) {
allStringsOfLength($length, $chars, $func, $prefix.$char);
}
}
Comments
0 B
|👍
/👎
0 B
|👍
/👎