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