xref: /openbsd-src/gnu/usr.bin/perl/cpan/Unicode-Collate/t/normal.t (revision d13be5d47e4149db2549a9828e244d59dbc43f15)
1BEGIN {
2    unless ("A" eq pack('U', 0x41)) {
3	print "1..0 # Unicode::Collate " .
4	    "cannot stringify a Unicode code point\n";
5	exit 0;
6    }
7    if ($ENV{PERL_CORE}) {
8	chdir('t') if -d 't';
9	@INC = $^O eq 'MacOS' ? qw(::lib) : qw(../lib);
10    }
11}
12
13BEGIN {
14    eval { require Unicode::Normalize; };
15    if ($@) {
16	print "1..0 # skipped: Unicode::Normalize needed for this test\n";
17	print $@;
18	exit;
19    }
20}
21use Test;
22BEGIN { plan tests => 100 };
23
24use strict;
25use warnings;
26use Unicode::Collate;
27
28our $Aring = pack('U', 0xC5);
29our $aring = pack('U', 0xE5);
30
31our $entry = <<'ENTRIES';
32030A; [.0000.030A.0002] # COMBINING RING ABOVE
33212B; [.002B.0020.0008] # ANGSTROM SIGN
340061; [.0A41.0020.0002] # LATIN SMALL LETTER A
350041; [.0A41.0020.0008] # LATIN CAPITAL LETTER A
36007A; [.0A5A.0020.0002] # LATIN SMALL LETTER Z
37005A; [.0A5A.0020.0008] # LATIN CAPITAL LETTER Z
38FF41; [.0A87.0020.0002] # LATIN SMALL LETTER A
39FF21; [.0A87.0020.0008] # LATIN CAPITAL LETTER A
4000E5; [.0AC5.0020.0002] # LATIN SMALL LETTER A WITH RING ABOVE
4100C5; [.0AC5.0020.0008] # LATIN CAPITAL LETTER A WITH RING ABOVE
42ENTRIES
43
44# Aong < A+ring < Z < fullA+ring < A-ring
45
46#########################
47
48our $noN = Unicode::Collate->new(
49    level => 1,
50    table => undef,
51    normalization => undef,
52    entry => $entry,
53);
54
55our $nfc = Unicode::Collate->new(
56  level => 1,
57  table => undef,
58  normalization => 'NFC',
59  entry => $entry,
60);
61
62our $nfd = Unicode::Collate->new(
63  level => 1,
64  table => undef,
65  normalization => 'NFD',
66  entry => $entry,
67);
68
69our $nfkc = Unicode::Collate->new(
70  level => 1,
71  table => undef,
72  normalization => 'NFKC',
73  entry => $entry,
74);
75
76our $nfkd = Unicode::Collate->new(
77  level => 1,
78  table => undef,
79  normalization => 'NFKD',
80  entry => $entry,
81);
82
83ok($noN->lt("\x{212B}", "A"));
84ok($noN->lt("\x{212B}", $Aring));
85ok($noN->lt("A\x{30A}", $Aring));
86ok($noN->lt("A",       "\x{FF21}"));
87ok($noN->lt("Z",       "\x{FF21}"));
88ok($noN->lt("Z",        $Aring));
89ok($noN->lt("\x{212B}", $aring));
90ok($noN->lt("A\x{30A}", $aring));
91ok($noN->lt("Z",        $aring));
92ok($noN->lt("a\x{30A}", "Z"));
93
94ok($nfd->eq("\x{212B}", "A"));
95ok($nfd->eq("\x{212B}", $Aring));
96ok($nfd->eq("A\x{30A}", $Aring));
97ok($nfd->lt("A",       "\x{FF21}"));
98ok($nfd->lt("Z",       "\x{FF21}"));
99ok($nfd->gt("Z",        $Aring));
100ok($nfd->eq("\x{212B}", $aring));
101ok($nfd->eq("A\x{30A}", $aring));
102ok($nfd->gt("Z",        $aring));
103ok($nfd->lt("a\x{30A}", "Z"));
104
105ok($nfc->gt("\x{212B}", "A"));
106ok($nfc->eq("\x{212B}", $Aring));
107ok($nfc->eq("A\x{30A}", $Aring));
108ok($nfc->lt("A",       "\x{FF21}"));
109ok($nfc->lt("Z",       "\x{FF21}"));
110ok($nfc->lt("Z",        $Aring));
111ok($nfc->eq("\x{212B}", $aring));
112ok($nfc->eq("A\x{30A}", $aring));
113ok($nfc->lt("Z",        $aring));
114ok($nfc->gt("a\x{30A}", "Z"));
115
116ok($nfkd->eq("\x{212B}", "A"));
117ok($nfkd->eq("\x{212B}", $Aring));
118ok($nfkd->eq("A\x{30A}", $Aring));
119ok($nfkd->eq("A",       "\x{FF21}"));
120ok($nfkd->gt("Z",       "\x{FF21}"));
121ok($nfkd->gt("Z",        $Aring));
122ok($nfkd->eq("\x{212B}", $aring));
123ok($nfkd->eq("A\x{30A}", $aring));
124ok($nfkd->gt("Z",        $aring));
125ok($nfkd->lt("a\x{30A}", "Z"));
126
127ok($nfkc->gt("\x{212B}", "A"));
128ok($nfkc->eq("\x{212B}", $Aring));
129ok($nfkc->eq("A\x{30A}", $Aring));
130ok($nfkc->eq("A",       "\x{FF21}"));
131ok($nfkc->gt("Z",       "\x{FF21}"));
132ok($nfkc->lt("Z",        $Aring));
133ok($nfkc->eq("\x{212B}", $aring));
134ok($nfkc->eq("A\x{30A}", $aring));
135ok($nfkc->lt("Z",        $aring));
136ok($nfkc->gt("a\x{30A}", "Z"));
137
138$nfd->change(normalization => undef);
139
140ok($nfd->lt("\x{212B}", "A"));
141ok($nfd->lt("\x{212B}", $Aring));
142ok($nfd->lt("A\x{30A}", $Aring));
143ok($nfd->lt("A",       "\x{FF21}"));
144ok($nfd->lt("Z",       "\x{FF21}"));
145ok($nfd->lt("Z",        $Aring));
146ok($nfd->lt("\x{212B}", $aring));
147ok($nfd->lt("A\x{30A}", $aring));
148ok($nfd->lt("Z",        $aring));
149ok($nfd->lt("a\x{30A}", "Z"));
150
151$nfd->change(normalization => 'C');
152
153ok($nfd->gt("\x{212B}", "A"));
154ok($nfd->eq("\x{212B}", $Aring));
155ok($nfd->eq("A\x{30A}", $Aring));
156ok($nfd->lt("A",       "\x{FF21}"));
157ok($nfd->lt("Z",       "\x{FF21}"));
158ok($nfd->lt("Z",        $Aring));
159ok($nfd->eq("\x{212B}", $aring));
160ok($nfd->eq("A\x{30A}", $aring));
161ok($nfd->lt("Z",        $aring));
162ok($nfd->gt("a\x{30A}", "Z"));
163
164$nfd->change(normalization => 'D');
165
166ok($nfd->eq("\x{212B}", "A"));
167ok($nfd->eq("\x{212B}", $Aring));
168ok($nfd->eq("A\x{30A}", $Aring));
169ok($nfd->lt("A",       "\x{FF21}"));
170ok($nfd->lt("Z",       "\x{FF21}"));
171ok($nfd->gt("Z",        $Aring));
172ok($nfd->eq("\x{212B}", $aring));
173ok($nfd->eq("A\x{30A}", $aring));
174ok($nfd->gt("Z",        $aring));
175ok($nfd->lt("a\x{30A}", "Z"));
176
177$nfd->change(normalization => 'KD');
178
179ok($nfd->eq("\x{212B}", "A"));
180ok($nfd->eq("\x{212B}", $Aring));
181ok($nfd->eq("A\x{30A}", $Aring));
182ok($nfd->eq("A",       "\x{FF21}"));
183ok($nfd->gt("Z",       "\x{FF21}"));
184ok($nfd->gt("Z",        $Aring));
185ok($nfd->eq("\x{212B}", $aring));
186ok($nfd->eq("A\x{30A}", $aring));
187ok($nfd->gt("Z",        $aring));
188ok($nfd->lt("a\x{30A}", "Z"));
189
190$nfd->change(normalization => 'KC');
191
192ok($nfd->gt("\x{212B}", "A"));
193ok($nfd->eq("\x{212B}", $Aring));
194ok($nfd->eq("A\x{30A}", $Aring));
195ok($nfd->eq("A",       "\x{FF21}"));
196ok($nfd->gt("Z",       "\x{FF21}"));
197ok($nfd->lt("Z",        $Aring));
198ok($nfd->eq("\x{212B}", $aring));
199ok($nfd->eq("A\x{30A}", $aring));
200ok($nfd->lt("Z",        $aring));
201ok($nfd->gt("a\x{30A}", "Z"));
202
203