This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Define _USE_32BIT_TIME_T for VC6 and VC7
[perl5.git] / cpan / Unicode-Collate / t / contract.t
CommitLineData
06c8fc8f
RGS
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 }
06c8fc8f
RGS
7}
8
9use Test;
10BEGIN { plan tests => 40 };
11
12use strict;
13use warnings;
14use Unicode::Collate;
15
06c8fc8f
RGS
16our $kjeEntry = <<'ENTRIES';
170301 ; [.0000.0032.0002.0301] # COMBINING ACUTE ACCENT
180334 ; [.0000.008B.0002.0334] # COMBINING TILDE OVERLAY
19043A ; [.0D31.0020.0002.043A] # CYRILLIC SMALL LETTER KA
20041A ; [.0D31.0020.0008.041A] # CYRILLIC CAPITAL LETTER KA
21045C ; [.0DA1.0020.0002.045C] # CYRILLIC SMALL LETTER KJE
22043A 0301 ; [.0DA1.0020.0002.045C] # CYRILLIC SMALL LETTER KJE
23040C ; [.0DA1.0020.0008.040C] # CYRILLIC CAPITAL LETTER KJE
24041A 0301 ; [.0DA1.0020.0008.040C] # CYRILLIC CAPITAL LETTER KJE
25ENTRIES
26
27our $aaEntry = <<'ENTRIES';
280304 ; [.0000.005A.0002.0304] # COMBINING MACRON (cc = 230)
29030A ; [.0000.0043.0002.030A] # COMBINING RING ABOVE (cc = 230)
300327 ; [.0000.0055.0002.0327] # COMBINING CEDILLA (cc = 202)
31031A ; [.0000.006B.0002.031A] # COMBINING LEFT ANGLE ABOVE (cc = 232)
320061 ; [.0A15.0020.0002.0061] # LATIN SMALL LETTER A
330041 ; [.0A15.0020.0008.0041] # LATIN CAPITAL LETTER A
34007A ; [.0C13.0020.0002.007A] # LATIN SMALL LETTER Z
35005A ; [.0C13.0020.0008.005A] # LATIN CAPITAL LETTER Z
3600E5 ; [.0C25.0020.0002.00E5] # LATIN SMALL LETTER A WITH RING ABOVE; QQCM
3700C5 ; [.0C25.0020.0008.00C5] # LATIN CAPITAL LETTER A WITH RING ABOVE; QQCM
380061 030A ; [.0C25.0020.0002.0061] # LATIN SMALL LETTER A WITH RING ABOVE
390041 030A ; [.0C25.0020.0008.0041] # LATIN CAPITAL LETTER A WITH RING ABOVE
40ENTRIES
41
42#########################
43
91ae00cb 44ok(1);
06c8fc8f
RGS
45
46my $kjeNoN = Unicode::Collate->new(
47 level => 1,
48 table => undef,
49 normalization => undef,
50 entry => $kjeEntry,
51);
52
53ok($kjeNoN->lt("\x{043A}", "\x{043A}\x{0301}"));
54ok($kjeNoN->gt("\x{045C}", "\x{043A}\x{0334}\x{0301}"));
55ok($kjeNoN->eq("\x{043A}", "\x{043A}\x{0334}\x{0301}"));
56ok($kjeNoN->eq("\x{045C}", "\x{043A}\x{0301}\x{0334}"));
57
58our %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
64eval { require Unicode::Normalize };
abd1ec54 65if (!$@) {
06c8fc8f
RGS
66 my $kjeNFD = Unicode::Collate->new(
67 level => 1,
68 table => undef,
69 entry => $kjeEntry,
70 );
71ok($kjeNFD->lt("\x{043A}", "\x{043A}\x{0301}"));
72ok($kjeNFD->eq("\x{045C}", "\x{043A}\x{0334}\x{0301}"));
73ok($kjeNFD->lt("\x{043A}", "\x{043A}\x{0334}\x{0301}"));
74ok($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
82ok($aaNFD->lt("Z", "A\x{30A}\x{304}"));
83ok($aaNFD->eq("A", "A\x{304}\x{30A}"));
84ok($aaNFD->eq(pack('U', 0xE5), "A\x{30A}\x{304}"));
85ok($aaNFD->eq("A\x{304}", "A\x{304}\x{30A}"));
86ok($aaNFD->lt("Z", "A\x{327}\x{30A}"));
87ok($aaNFD->lt("Z", "A\x{30A}\x{327}"));
88ok($aaNFD->lt("Z", "A\x{31A}\x{30A}"));
89ok($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
98ok($aaPre->lt("Z", "A\x{30A}\x{304}"));
99ok($aaPre->eq("A", "A\x{304}\x{30A}"));
100ok($aaPre->eq(pack('U', 0xE5), "A\x{30A}\x{304}"));
101ok($aaPre->eq("A\x{304}", "A\x{304}\x{30A}"));
102ok($aaPre->lt("Z", "A\x{327}\x{30A}"));
103ok($aaPre->lt("Z", "A\x{30A}\x{327}"));
104ok($aaPre->lt("Z", "A\x{31A}\x{30A}"));
105ok($aaPre->lt("Z", "A\x{30A}\x{31A}"));
106}
107else {
108 ok(1) for 1..20;
109}
110
111# again: loading Unicode::Normalize should not affect $kjeNoN.
112ok($kjeNoN->lt("\x{043A}", "\x{043A}\x{0301}"));
113ok($kjeNoN->gt("\x{045C}", "\x{043A}\x{0334}\x{0301}"));
114ok($kjeNoN->eq("\x{043A}", "\x{043A}\x{0334}\x{0301}"));
115ok($kjeNoN->eq("\x{045C}", "\x{043A}\x{0301}\x{0334}"));
116
117ok($sortkeys{'KAac'}, $kjeNoN->viewSortKey("\x{043A}\x{0301}"));
118ok($sortkeys{'KAta'}, $kjeNoN->viewSortKey("\x{043A}\x{0334}\x{0301}"));
119ok($sortkeys{'KAat'}, $kjeNoN->viewSortKey("\x{043A}\x{0301}\x{0334}"));
120
121my $aaNoN = Unicode::Collate->new(
122 level => 1,
123 table => undef,
124 entry => $aaEntry,
125 normalization => undef,
126);
127
128ok($aaNoN->lt("Z", "A\x{30A}\x{304}"));
129ok($aaNoN->eq("A", "A\x{304}\x{30A}"));
130ok($aaNoN->eq(pack('U', 0xE5), "A\x{30A}\x{304}"));
131ok($aaNoN->eq("A\x{304}", "A\x{304}\x{30A}"));
132ok($aaNoN->eq("A", "A\x{327}\x{30A}"));
133ok($aaNoN->lt("Z", "A\x{30A}\x{327}"));
134ok($aaNoN->eq("A", "A\x{31A}\x{30A}"));
135ok($aaNoN->lt("Z", "A\x{30A}\x{31A}"));
136