1
2BEGIN {
3    unless ("A" eq pack('U', 0x41)) {
4	print "1..0 # Unicode::Collate " .
5	    "cannot stringify a Unicode code point\n";
6	exit 0;
7    }
8    if ($ENV{PERL_CORE}) {
9	chdir('t') if -d 't';
10	@INC = $^O eq 'MacOS' ? qw(::lib) : qw(../lib);
11    }
12}
13
14use strict;
15use warnings;
16BEGIN { $| = 1; print "1..55\n"; }
17my $count = 0;
18sub ok ($;$) {
19    my $p = my $r = shift;
20    if (@_) {
21	my $x = shift;
22	$p = !defined $x ? !defined $r : !defined $r ? 0 : $r eq $x;
23    }
24    print $p ? "ok" : "not ok", ' ', ++$count, "\n";
25}
26
27use Unicode::Collate::Locale;
28
29ok(1);
30
31#########################
32
33my $objTh = Unicode::Collate::Locale->
34    new(locale => 'TH', normalization => undef);
35
36
37ok($objTh->getlocale, 'th');
38
39$objTh->change(level => 1);
40
41# shifted
42
43ok($objTh->eq("\x{E2F}", ""));
44ok($objTh->eq("\x{E46}", ""));
45ok($objTh->eq("\x{E4F}", ""));
46ok($objTh->eq("\x{E5A}", ""));
47ok($objTh->eq("\x{E5B}", ""));
48
49# 7
50
51ok($objTh->lt("\x{E2E}", "\x{E4D}"));
52ok($objTh->lt("\x{E4D}", "\x{E30}"));
53
54ok($objTh->lt("\x{E44}", "\x{E3A}"));
55
56# 10
57
58ok($objTh->eq("\x{E4E}", ""));
59ok($objTh->eq("\x{E4C}", ""));
60ok($objTh->eq("\x{E47}", ""));
61ok($objTh->eq("\x{E48}", ""));
62ok($objTh->eq("\x{E49}", ""));
63ok($objTh->eq("\x{E4A}", ""));
64ok($objTh->eq("\x{E4B}", ""));
65
66# 17
67
68$objTh->change(level => 2);
69
70ok($objTh->lt("\x{E4E}", "\x{E4C}"));
71ok($objTh->lt("\x{E4C}", "\x{E47}"));
72ok($objTh->lt("\x{E47}", "\x{E48}"));
73ok($objTh->lt("\x{E48}", "\x{E49}"));
74ok($objTh->lt("\x{E49}", "\x{E4A}"));
75ok($objTh->lt("\x{E4A}", "\x{E4B}"));
76
77ok($objTh->eq("\x{E32}", "\x{E45}"));
78ok($objTh->eq("\x{E32}\x{E4D}", "\x{E4D}\x{E32}"));
79ok($objTh->eq("\x{E4D}\x{E32}", "\x{E33}"));
80ok($objTh->eq("\x{E4D}\x{E45}", "\x{E45}\x{E4D}"));
81
82# 27
83
84$objTh->change(level => 3);
85
86ok($objTh->lt("\x{E32}", "\x{E45}"));
87ok($objTh->lt("\x{E32}\x{E4D}", "\x{E4D}\x{E32}"));
88ok($objTh->lt("\x{E4D}\x{E32}", "\x{E33}"));
89ok($objTh->lt("\x{E4D}\x{E45}", "\x{E45}\x{E4D}"));
90
91ok($objTh->eq("\x{E4F}", "\x{E2F}"));
92ok($objTh->eq("\x{E2F}", "\x{E5A}"));
93ok($objTh->eq("\x{E5A}", "\x{E5B}"));
94ok($objTh->eq("\x{E5B}", "\x{E46}"));
95
96# 35
97
98$objTh->change(level => 4);
99
100for my $t ("", "\x{E01}") {
101    ok($objTh->lt("\x{E4F}$t", "\x{E2F}$t"));
102    ok($objTh->lt("\x{E2F}$t", "\x{E5A}$t"));
103    ok($objTh->lt("\x{E5A}$t", "\x{E5B}$t"));
104    ok($objTh->lt("\x{E5B}$t", "\x{E46}$t"));
105}
106
107# 43
108
109$objTh->change(level => 1);
110
111ok($objTh->eq("\x{E4F}", "\x{E2F}"));
112ok($objTh->eq("\x{E2F}", "\x{E5A}"));
113ok($objTh->eq("\x{E5A}", "\x{E5B}"));
114ok($objTh->eq("\x{E5B}", "\x{E46}"));
115
116# 47
117
118$objTh->change(variable => "non-ignorable");
119
120for my $h (0, 1) {
121    no warnings 'utf8';
122    my $t = $h ? pack('U', 0xFFFF) : "";
123    $objTh->change(highestFFFF => 1) if $h;
124
125    ok($objTh->lt("\x{E4F}$t", "\x{E2F}"));
126    ok($objTh->lt("\x{E2F}$t", "\x{E5A}"));
127    ok($objTh->lt("\x{E5A}$t", "\x{E5B}"));
128    ok($objTh->lt("\x{E5B}$t", "\x{E46}"));
129}
130
131# 55
132