1 | BEGIN {
|
---|
2 | chdir 't' if -d 't';
|
---|
3 | @INC = '../lib';
|
---|
4 | }
|
---|
5 |
|
---|
6 | use File::Spec;
|
---|
7 |
|
---|
8 | my $CF = File::Spec->catfile(File::Spec->catdir(File::Spec->updir,
|
---|
9 | "lib", "unicore"),
|
---|
10 | "CaseFolding.txt");
|
---|
11 |
|
---|
12 | use constant EBCDIC => ord 'A' == 193;
|
---|
13 |
|
---|
14 | if (open(CF, $CF)) {
|
---|
15 | my @CF;
|
---|
16 |
|
---|
17 | while (<CF>) {
|
---|
18 | # Skip S since we are going for 'F'ull case folding
|
---|
19 | if (/^([0-9A-F]+); ([CFI]); ((?:[0-9A-F]+)(?: [0-9A-F]+)*); \# (.+)/) {
|
---|
20 | next if EBCDIC && hex $1 < 0x100;
|
---|
21 | push @CF, [$1, $2, $3, $4];
|
---|
22 | }
|
---|
23 | }
|
---|
24 |
|
---|
25 | close(CF);
|
---|
26 |
|
---|
27 | die qq[$0: failed to find casefoldings from "$CF"\n] unless @CF;
|
---|
28 |
|
---|
29 | print "1..", scalar @CF, "\n";
|
---|
30 |
|
---|
31 | my $i = 0;
|
---|
32 | for my $cf (@CF) {
|
---|
33 | my ($code, $status, $mapping, $name) = @$cf;
|
---|
34 | $i++;
|
---|
35 | my $a = pack("U0U*", hex $code);
|
---|
36 | my $b = pack("U0U*", map { hex } split " ", $mapping);
|
---|
37 | my $t0 = ":$a:" =~ /:$a:/ ? 1 : 0;
|
---|
38 | my $t1 = ":$a:" =~ /:$a:/i ? 1 : 0;
|
---|
39 | my $t2 = ":$a:" =~ /:[$a]:/ ? 1 : 0;
|
---|
40 | my $t3 = ":$a:" =~ /:[$a]:/i ? 1 : 0;
|
---|
41 | my $t4 = ":$a:" =~ /:$b:/i ? 1 : 0;
|
---|
42 | my $t5 = ":$a:" =~ /:[$b]:/i ? 1 : 0;
|
---|
43 | my $t6 = ":$b:" =~ /:$a:/i ? 1 : 0;
|
---|
44 | my $t7 = ":$b:" =~ /:[$a]:/i ? 1 : 0;
|
---|
45 | print $t0 && $t1 && $t2 && $t3 && $t4 && $t5 && $t6 && $t7 ?
|
---|
46 | "ok $i \# - $code - $name - $mapping - $status\n" :
|
---|
47 | "not ok $i \# - $code - $name - $mapping - $status - $t0 $t1 $t2 $t3 $t4 $t5 $t6 $t7\n";
|
---|
48 | }
|
---|
49 | } else {
|
---|
50 | die qq[$0: failed to open "$CF": $!\n];
|
---|
51 | }
|
---|