Commit | Line | Data |
---|---|---|
06c8fc8f RGS |
1 | BEGIN { |
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 | } | |
06c8fc8f RGS |
7 | } |
8 | ||
9 | use Test; | |
10 | BEGIN { plan tests => 40 }; | |
11 | ||
12 | use strict; | |
13 | use warnings; | |
14 | use Unicode::Collate; | |
15 | ||
06c8fc8f RGS |
16 | our $kjeEntry = <<'ENTRIES'; |
17 | 0301 ; [.0000.0032.0002.0301] # COMBINING ACUTE ACCENT | |
18 | 0334 ; [.0000.008B.0002.0334] # COMBINING TILDE OVERLAY | |
19 | 043A ; [.0D31.0020.0002.043A] # CYRILLIC SMALL LETTER KA | |
20 | 041A ; [.0D31.0020.0008.041A] # CYRILLIC CAPITAL LETTER KA | |
21 | 045C ; [.0DA1.0020.0002.045C] # CYRILLIC SMALL LETTER KJE | |
22 | 043A 0301 ; [.0DA1.0020.0002.045C] # CYRILLIC SMALL LETTER KJE | |
23 | 040C ; [.0DA1.0020.0008.040C] # CYRILLIC CAPITAL LETTER KJE | |
24 | 041A 0301 ; [.0DA1.0020.0008.040C] # CYRILLIC CAPITAL LETTER KJE | |
25 | ENTRIES | |
26 | ||
27 | our $aaEntry = <<'ENTRIES'; | |
28 | 0304 ; [.0000.005A.0002.0304] # COMBINING MACRON (cc = 230) | |
29 | 030A ; [.0000.0043.0002.030A] # COMBINING RING ABOVE (cc = 230) | |
30 | 0327 ; [.0000.0055.0002.0327] # COMBINING CEDILLA (cc = 202) | |
31 | 031A ; [.0000.006B.0002.031A] # COMBINING LEFT ANGLE ABOVE (cc = 232) | |
32 | 0061 ; [.0A15.0020.0002.0061] # LATIN SMALL LETTER A | |
33 | 0041 ; [.0A15.0020.0008.0041] # LATIN CAPITAL LETTER A | |
34 | 007A ; [.0C13.0020.0002.007A] # LATIN SMALL LETTER Z | |
35 | 005A ; [.0C13.0020.0008.005A] # LATIN CAPITAL LETTER Z | |
36 | 00E5 ; [.0C25.0020.0002.00E5] # LATIN SMALL LETTER A WITH RING ABOVE; QQCM | |
37 | 00C5 ; [.0C25.0020.0008.00C5] # LATIN CAPITAL LETTER A WITH RING ABOVE; QQCM | |
38 | 0061 030A ; [.0C25.0020.0002.0061] # LATIN SMALL LETTER A WITH RING ABOVE | |
39 | 0041 030A ; [.0C25.0020.0008.0041] # LATIN CAPITAL LETTER A WITH RING ABOVE | |
40 | ENTRIES | |
41 | ||
42 | ######################### | |
43 | ||
91ae00cb | 44 | ok(1); |
06c8fc8f RGS |
45 | |
46 | my $kjeNoN = Unicode::Collate->new( | |
47 | level => 1, | |
48 | table => undef, | |
49 | normalization => undef, | |
50 | entry => $kjeEntry, | |
51 | ); | |
52 | ||
53 | ok($kjeNoN->lt("\x{043A}", "\x{043A}\x{0301}")); | |
54 | ok($kjeNoN->gt("\x{045C}", "\x{043A}\x{0334}\x{0301}")); | |
55 | ok($kjeNoN->eq("\x{043A}", "\x{043A}\x{0334}\x{0301}")); | |
56 | ok($kjeNoN->eq("\x{045C}", "\x{043A}\x{0301}\x{0334}")); | |
57 | ||
58 | our %sortkeys; | |
59 | ||
60 | $sortkeys{'KAac'} = $kjeNoN->viewSortKey("\x{043A}\x{0301}"); | |
61 | $sortkeys{'KAta'} = $kjeNoN->viewSortKey("\x{043A}\x{0334}\x{0301}"); | |
62 | $sortkeys{'KAat'} = $kjeNoN->viewSortKey("\x{043A}\x{0301}\x{0334}"); | |
63 | ||
64 | eval { require Unicode::Normalize }; | |
abd1ec54 | 65 | if (!$@) { |
06c8fc8f RGS |
66 | my $kjeNFD = Unicode::Collate->new( |
67 | level => 1, | |
68 | table => undef, | |
69 | entry => $kjeEntry, | |
70 | ); | |
71 | ok($kjeNFD->lt("\x{043A}", "\x{043A}\x{0301}")); | |
72 | ok($kjeNFD->eq("\x{045C}", "\x{043A}\x{0334}\x{0301}")); | |
73 | ok($kjeNFD->lt("\x{043A}", "\x{043A}\x{0334}\x{0301}")); | |
74 | ok($kjeNFD->eq("\x{045C}", "\x{043A}\x{0301}\x{0334}")); | |
75 | ||
76 | my $aaNFD = Unicode::Collate->new( | |
77 | level => 1, | |
78 | table => undef, | |
79 | entry => $aaEntry, | |
80 | ); | |
81 | ||
82 | ok($aaNFD->lt("Z", "A\x{30A}\x{304}")); | |
83 | ok($aaNFD->eq("A", "A\x{304}\x{30A}")); | |
84 | ok($aaNFD->eq(pack('U', 0xE5), "A\x{30A}\x{304}")); | |
85 | ok($aaNFD->eq("A\x{304}", "A\x{304}\x{30A}")); | |
86 | ok($aaNFD->lt("Z", "A\x{327}\x{30A}")); | |
87 | ok($aaNFD->lt("Z", "A\x{30A}\x{327}")); | |
88 | ok($aaNFD->lt("Z", "A\x{31A}\x{30A}")); | |
89 | ok($aaNFD->lt("Z", "A\x{30A}\x{31A}")); | |
90 | ||
91 | my $aaPre = Unicode::Collate->new( | |
92 | level => 1, | |
93 | normalization => "prenormalized", | |
94 | table => undef, | |
95 | entry => $aaEntry, | |
96 | ); | |
97 | ||
98 | ok($aaPre->lt("Z", "A\x{30A}\x{304}")); | |
99 | ok($aaPre->eq("A", "A\x{304}\x{30A}")); | |
100 | ok($aaPre->eq(pack('U', 0xE5), "A\x{30A}\x{304}")); | |
101 | ok($aaPre->eq("A\x{304}", "A\x{304}\x{30A}")); | |
102 | ok($aaPre->lt("Z", "A\x{327}\x{30A}")); | |
103 | ok($aaPre->lt("Z", "A\x{30A}\x{327}")); | |
104 | ok($aaPre->lt("Z", "A\x{31A}\x{30A}")); | |
105 | ok($aaPre->lt("Z", "A\x{30A}\x{31A}")); | |
106 | } | |
107 | else { | |
108 | ok(1) for 1..20; | |
109 | } | |
110 | ||
111 | # again: loading Unicode::Normalize should not affect $kjeNoN. | |
112 | ok($kjeNoN->lt("\x{043A}", "\x{043A}\x{0301}")); | |
113 | ok($kjeNoN->gt("\x{045C}", "\x{043A}\x{0334}\x{0301}")); | |
114 | ok($kjeNoN->eq("\x{043A}", "\x{043A}\x{0334}\x{0301}")); | |
115 | ok($kjeNoN->eq("\x{045C}", "\x{043A}\x{0301}\x{0334}")); | |
116 | ||
117 | ok($sortkeys{'KAac'}, $kjeNoN->viewSortKey("\x{043A}\x{0301}")); | |
118 | ok($sortkeys{'KAta'}, $kjeNoN->viewSortKey("\x{043A}\x{0334}\x{0301}")); | |
119 | ok($sortkeys{'KAat'}, $kjeNoN->viewSortKey("\x{043A}\x{0301}\x{0334}")); | |
120 | ||
121 | my $aaNoN = Unicode::Collate->new( | |
122 | level => 1, | |
123 | table => undef, | |
124 | entry => $aaEntry, | |
125 | normalization => undef, | |
126 | ); | |
127 | ||
128 | ok($aaNoN->lt("Z", "A\x{30A}\x{304}")); | |
129 | ok($aaNoN->eq("A", "A\x{304}\x{30A}")); | |
130 | ok($aaNoN->eq(pack('U', 0xE5), "A\x{30A}\x{304}")); | |
131 | ok($aaNoN->eq("A\x{304}", "A\x{304}\x{30A}")); | |
132 | ok($aaNoN->eq("A", "A\x{327}\x{30A}")); | |
133 | ok($aaNoN->lt("Z", "A\x{30A}\x{327}")); | |
134 | ok($aaNoN->eq("A", "A\x{31A}\x{30A}")); | |
135 | ok($aaNoN->lt("Z", "A\x{30A}\x{31A}")); | |
136 |