1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393
|
#!/usr/bin/perl
use strict;
use lib qw {blib/lib};
use Regexp::Common;
use warnings;
my $count;
my $palindrome = qr /^$RE{lingua}{palindrome}$/;
my $fail = qr /^$RE{lingua}{palindrome}{-chars => '\d'}$/;
my $keep = qr /^$RE{lingua}{palindrome}{-keep}$/;
sub mess {print ++ $count, " - $_ (@_)\n"}
sub pass {print "ok "; &mess}
sub fail {print "not ok "; &mess}
my (@passes, @entries, @failures);
while (<DATA>) {
chomp;
last unless /\S/;
push @passes => $_;
}
while (<DATA>) {
chomp;
last unless /\S/;
push @entries => $_;
}
while (<DATA>) {
chomp;
push @failures => $_;
}
push @failures => " ", "";
my $max = 2 * @failures + 3 * (@passes + 3 * grep {!/^[<>] .*:$/} @entries);
print "1..$max\n";
# print "$fail\n"; exit;
foreach (@passes) {
/$palindrome/ ? pass "match" : fail "no match";
/$keep/ ? $1 eq $_ ? pass "match; keep"
: fail "match ($1); keep"
: fail "no match; keep";
/$fail/ ? fail "match; fail" : pass "no match; fail";
}
foreach (@failures) {
/$palindrome/ ? fail "match" : pass "no match";
/$keep/ ? fail "match; keep" : pass "no match; keep";
}
foreach my $entry (@entries) {
if ($entry =~ /^> (.*):/) {
$palindrome = qr /^$RE{lingua}{palindrome}{-chars => $1}$/;
$keep = qr /^$RE{lingua}{palindrome}{-chars => $1}{-keep}$/;
next;
}
if ($entry =~ /^< (.*):/) {
$fail = qr /^$RE{lingua}{palindrome}{-chars => $1}$/;
next;
}
local $_ = $entry;
/$palindrome/ ? fail "match" : pass "no match";
/$keep/ ? fail "match; keep" : pass "no match; keep";
/$fail/ ? fail "match; fail" : pass "no match; fail";
local $_ = $entry . reverse $entry;
/$palindrome/ ? pass "match" : fail "no match";
/$keep/ ? $1 eq $_ ? pass "match; keep"
: fail "match ($1); keep"
: fail "no match; keep";
/$fail/ ? fail "match; fail" : pass "no match; fail";
local $_ = reverse ($entry) . substr $entry, 1;
/$palindrome/ ? pass "match" : fail "no match";
/$keep/ ? $1 eq $_ ? pass "match; keep"
: fail "match ($1); keep"
: fail "no match; keep";
/$fail/ ? fail "match; fail" : pass "no match; fail";
}
__DATA__
aha
ara
bib
bob
boob
civic
daad
dad
deed
did
dood
dud
ebbe
egge
eke
ene
ere
etste
ewe
eye
gag
gezeg
gig
goog
huh
jij
kaak
kajak
kak
kazak
keek
kek
kik
kok
kook
lal
lel
lepel
level
lil
lol
lul
madam
mam
meeneem
mem
mom
mum
nebben
neen
negen
neggen
nekken
nellen
nemen
nepen
neppen
neren
nessen
neten
netten
neven
non
noon
nun
oho
paap
pap
peep
pep
pip
pop
pup
raar
radar
redder
reder
refer
rekker
remmer
renner
reviver
rotator
rotor
sas
sees
serres
sexes
sis
solos
soos
staats
stoots
sus
temet
tit
toot
tot
tut
wow
SFuHaTEaajrNbFeBpEkPN
YcIUURmSfRLoFjJe
eckIDoGgvoqkCEUsqMBLTWkK
pkgwKxLVxQwhQEtAwUesTSogkaIyJf
xYjBxdGcCfLFzXNtAqKRUOJxGKXeJ
AdXpQMeyEIfyr
SfsapxXkpVfbjsmdXUOou
PktrbesqhkyfluVnPwHRugocwvuq
WODAUSbVppQb
efvqfBZLuqYX
ByPHDLvRms
DhHqdSYYJAKMNiHvXPLbl
eKHZtibxzoXlqgILImYzkCctwhku
ecKrqPQqBtIpOEvGEmLIhVFWBuh
FwrCTwpQnnaJOqPhMPBODgzpBmXnH
lDhQ
KRYddvyTyUEWYEahlWtihNOpDrd
rlEBgFsNFsO
nfjVWYpUdgtiab
qHbABOUypLKobEaQyBjp
NsBpkIzckTmqZycZuQBQxkbfmGaj
ZcNRflemqdsWrCnJeFCydBOnJ
qDFnPI
YiImqMoXUdhnNC
nQGnrxzYicL
WmoOUKJi
NeVHWlCPsIW
PzBTPEoraVOMIbZAIzq
iOJqVDGCOPTyZsbsaPlg
Yl
LDuXxKkGOsmcJWUoKbQUuqLrwh
LGDDKUmrXJhhKWXeoYhVGEpwWVX
ddvJjgOYbVQBlpTB
LAZ
pRrxZfIukSORIjJxz
xYaeftKXISpLasaDZkeWbUDReFJS
YElBQsxQdiddncurlxbKVXov
EZTpMtSLMCx
OAcfWphdMFv
Axref
XMwzzoMfHOSMgGMBhVOV
sCnhq
yLYrxgkXDyfMzNqQxvX
UrhwiKxtOLeWD
blM
efhbKlXqBAtnVzfDbf
qnoSZfhTTvgTruFcGAyiGVX
CFsXnsXF
jjqgFrkIpookzlHpKEDPmAtqMP
MzPZ
> [a-z]:
uehbewnkitmcy
eqeeaphplt
cqmbytmkanwsmkquegylnkuevwxic
gsgyunrvb
tdhzvufhgcqoqzvmoizyevcvn
vmnoqltrdesvnxfyr
ipyroepwytimbdrdmyx
gicxjfzpqctsfoz
wzpksllqjyiyxaquvxbswzgclk
wruucflfyqvitzyzwompwetgd
edskskyxbryntdkzo
jmmigbfxerisfwzwropzxv
dyj
dmjgxwbuisixuqsmhv
jfsdunyulovxszozsuhdoisykwha
beljpcjnbidwiej
ihpjalczkejyreaygautktqoh
zkujheuhkitqsnggnqvo
cpfemiavljvvfsgrmrgvkfx
yjiamfbajifvnlmwhvxnco
zflbfreheohquoehmehklgtijpqekm
oywqmgecvv
thddjpasasumoy
tagxlzsazzwnzzelrp
klvxwmvchyrv
supbdycwkufqqftc
mafws
hlpztnbtbgruqukiroksqscniuqd
mobbxnqfqrhlmfvjbxgbcsxbfcoeh
webaxlcfqsfw
rsxhmxneutngvkgeogmbw
cdryfjtleqzhsxyhi
uuqriyeartlufhmrbutssb
bznyd
hrlkwexwhxrudfdjefikc
nqovsytdjshkupnklycxpxb
zm
zmtdrfdvcedutdjhu
qslxhtkxnrjdxjfyzkedncvbg
thlycnbuhszdtcxqhjyfjtrbc
thlttfpdjfwksigtyhiopgiry
qiwvs
zkcxrrbmqixmuon
paqtpvptus
vbowrpena
xujixuzudptoosuaojdj
miqjwg
yajiqeszalxloaltijpzzhytoij
ueputmp
itczvgkjdmnfcdalyuvtnjxuo
> \w:
rDi5YALoea2yGa0
IO
EzrPIMK04vif
cXSyVEHYbFQ8WzBrAkS0LnsIklfC
dBH0qE5dcg
PolVi_
ywihyxxZXuIeWbqiuMu5a5_hDTVr
DZQ12Cg8g_CTHvZZzHB
5f5NPQwgctuaETEBWi0TaAqLbJS
XZ
nflye5EapNHktnWyUGcOV9vJoHOP
ewoxUSGw_bQr6WiQBJdmVDpNWBM_A
daET_OL48NZ2213dcVT3P
SYav069GQ
17cT4sCDBqbRyaaaP7Ql1
V49uRZmWo2Pq
mVnJOovJarUmvvj6HCWYKcX
3b0q78jBIV4dVkLvqRMDEgmordp3
UiNxe7XNn1suVr3WuXCLn6NNV0voz
GMnUJJbyj_g_nHShSkAQJ2q0V6Ik
Nu5ZWWWmG8bXWH0klxU1iQy
bJm99Sn2IzfaxYHQRYhm74N2U
8rjj9pDVQ2
H9iw8mR4F
2z
YuOudFhIgi3l
DK_vYQ1lmOOo4Hv1JmM
MaEPzGE
FEwFsBhr0rad21pZc5vNBZ35sRi
M1H90gYO
L5Mxi3GuDcrtlOCdmCO7kSmQZAboOA
9Y8CJoGXY2Aj1awnsOehU3pg6_pHHR
3gwnySmFEGhvc7dBcw
FYmqwVHuxi0hepGvNhlEHA5R4d8
LxcoA_CCCG6x6
4axbAGGHEjQ4ChVDAIt5YUqHedgg
hp
qlIj2
SoUXBA0dQc5d7yueCHWL5N1tXWT
nxGFfSG8GIRK
9QvGo36LKz_m8xvniiXuMmKla9RrL
9TjcA
PJwRkL76mkv0g6RZBDF
nzrxgXRI237kKSH6POckTNImHrA
JHmkQ
OW_JRzG1afVb6eC9
cBsJo5C
hp4dUtypQQoToURHf8iEDYPZIuWe
C4Va9
FJ1DVeihL2
< [a-z]:
> \d:
29980996457893057
21313835378243030333668
091
729409601
9719624
370
3789153763679167124200438111
7213
205106612350732070380126
560
9932022468162
294997433
07622546948740
651026122541173516020300
813133424529744256580
260427038421
595082137168646535
7097770631397070695986287
810892652
1220621475
92013886546801507931905918
3767894100
71804184572999032104977644350
3941946950830399143521798239
985536734
4493935115991509368392962898
9655414455050335
172310303035555466194702906201
2402676066185
8834370
021824572200322891809377668051
03495183957
24151107
571087664136929781569896
551
7538
1265
91
821889
30933868030192296343807
7858
4405659824543046178
167460529774400160101784746938
8067316585
242483834532989211693778145
089226
7917129387435406520218042163
299639586008870965630234891
47714904484521065705502616510
0741473983774
|