25f8f4c97738203603200f20056e78899c2efe5c
[p5sagit/p5-mst-13.2.git] / t / uni / case.pl
1 use File::Spec;
2
3 require "test.pl";
4
5 sub casetest {
6     my ($base, $spec, $func) = @_;
7     my $file = File::Spec->catfile(File::Spec->catdir(File::Spec->updir,
8                                                       "lib", "unicore", "To"),
9                                    "$base.pl");
10     my $simple = do $file;
11     my %simple;
12     for my $i (split(/\n/, $simple)) {
13         my ($k, $v) = split(' ', $i);
14         $simple{$k} = $v;
15     }
16     my %seen;
17
18     for my $i (sort keys %simple) {
19         $seen{hex $i}++;
20     }
21     print "# ", scalar keys %simple, " simple mappings\n";
22
23     my $both;
24
25     for my $i (sort keys %$spec) {
26         $both++ if ++$seen{hex $i} == 2;
27     }
28     print "# ", scalar keys %$spec, " special mappings\n";
29
30     my %none;
31     for my $i (map { ord } split //,
32                "\e !\"#\$%&'()+,-./0123456789:;<=>?\@[\\]^_{|}~\b") {
33         next if pack("U0U", $i) =~ /\w/;
34         $none{$i}++ unless $seen{$i};
35     }
36     print "# ", scalar keys %none, " noncase mappings\n";
37
38     my $tests = 
39         (scalar keys %simple) +
40         (scalar keys %$spec) +
41         (scalar keys %none) - $both;
42     print "1..$tests\n";
43
44     my $test = 1;
45
46     for my $i (sort { hex $a <=> hex $b } keys %simple) {
47         my $w = "$i -> $simple{$i}";
48         my $c = pack "U0U", hex $i;
49         my $d = $func->($c);
50         print $d eq pack("U0U", hex $simple{$i}) ?
51             "ok $test # $w\n" : "not ok $test # $w\n";
52         $test++;
53     }
54
55     for my $i (sort { hex $a <=> hex $b } keys %$spec) {
56         next if $seen{hex $i} == 2;
57         my $w = qq[$i -> "] . display($spec->{$i}) . qq["];
58         my $c = pack "U0U", hex $i;
59         my $d = $func->($c);
60         print $d eq $spec->{$i} ?
61             "ok $test # $w\n" : "not ok $test # $w\n";
62         $test++;
63     }
64
65
66     for my $i (sort { $a <=> $b } keys %none) {
67         my $w = sprintf "%04X -> %04X", $i, $i;
68         my $c = pack "U0U", $i;
69         my $d = $func->($c);
70         print $d eq $c ?
71             "ok $test # $w\n" : "not ok $test # $w\n";
72         $test++;
73     }
74 }
75
76 1;