This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Update Unicode-Collate to CPAN version 0.59
[perl5.git] / cpan / Unicode-Collate / t / variable.t
CommitLineData
91ae00cb
NC
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 }
456a1446
CBW
8 if ($ENV{PERL_CORE}) {
9 chdir('t') if -d 't';
10 @INC = $^O eq 'MacOS' ? qw(::lib) : qw(../lib);
11 }
91ae00cb
NC
12}
13
14use Test;
15BEGIN { plan tests => 37 };
16
17use strict;
18use warnings;
19use Unicode::Collate;
20
21ok(1);
22
23#########################
24
25sub _pack_U { Unicode::Collate::pack_U(@_) }
26sub _unpack_U { Unicode::Collate::unpack_U(@_) }
27
28my $A_acute = _pack_U(0xC1);
29my $acute = _pack_U(0x0301);
30
31my $Collator = Unicode::Collate->new(
32 table => 'keys.txt',
33 normalization => undef,
34);
35
36my %origVar = $Collator->change(variable => 'Blanked');
37
38ok($Collator->lt("death", "de luge"));
39ok($Collator->lt("de luge", "de-luge"));
40ok($Collator->lt("de-luge", "deluge"));
41ok($Collator->lt("deluge", "de\x{2010}luge"));
42ok($Collator->lt("deluge", "de Luge"));
43
44$Collator->change(variable => 'Non-ignorable');
45
46ok($Collator->lt("de luge", "de Luge"));
47ok($Collator->lt("de Luge", "de-luge"));
48ok($Collator->lt("de-Luge", "de\x{2010}luge"));
49ok($Collator->lt("de-luge", "death"));
50ok($Collator->lt("death", "deluge"));
51
52$Collator->change(variable => 'Shifted');
53
54ok($Collator->lt("death", "de luge"));
55ok($Collator->lt("de luge", "de-luge"));
56ok($Collator->lt("de-luge", "deluge"));
57ok($Collator->lt("deluge", "de Luge"));
58ok($Collator->lt("de Luge", "deLuge"));
59
60$Collator->change(variable => 'Shift-Trimmed');
61
62ok($Collator->lt("death", "deluge"));
63ok($Collator->lt("deluge", "de luge"));
64ok($Collator->lt("de luge", "de-luge"));
65ok($Collator->lt("de-luge", "deLuge"));
66ok($Collator->lt("deLuge", "de Luge"));
67
68$Collator->change(%origVar);
69
70ok($Collator->{variable}, 'shifted');
71
72##############
73
74# ignorable after variable
75
76# Shifted;
77ok($Collator->eq("?\x{300}!\x{301}\x{315}", "?!"));
78ok($Collator->eq("?\x{300}A\x{301}", "?$A_acute"));
79ok($Collator->eq("?\x{300}", "?"));
80ok($Collator->eq("?\x{344}", "?")); # U+0344 has two CEs.
81
82$Collator->change(level => 3);
83ok($Collator->eq("\cA", "?"));
84
85$Collator->change(variable => 'blanked', level => 4);
86ok($Collator->eq("?\x{300}!\x{301}\x{315}", "?!"));
87ok($Collator->eq("?\x{300}A\x{301}", "?$A_acute"));
88ok($Collator->eq("?\x{300}", "?"));
89ok($Collator->eq("?\x{344}", "?")); # U+0344 has two CEs.
90
91$Collator->change(level => 3);
92ok($Collator->eq("\cA", "?"));
93
94$Collator->change(variable => 'Non-ignorable', level => 4);
95
96ok($Collator->lt("?\x{300}", "?!"));
97ok($Collator->gt("?\x{300}A$acute", "?$A_acute"));
98ok($Collator->gt("?\x{300}", "?"));
99ok($Collator->gt("?\x{344}", "?"));
100
101$Collator->change(level => 3);
102ok($Collator->lt("\cA", "?"));
103
104$Collator->change(variable => 'Shifted', level => 4);
105