1 2BEGIN { 3 unless ('A' eq pack('U', 0x41)) { 4 print "1..0 # Unicode::Collate cannot pack a Unicode code point\n"; 5 exit 0; 6 } 7 unless (0x41 == unpack('U', 'A')) { 8 print "1..0 # Unicode::Collate cannot get a Unicode code point\n"; 9 exit 0; 10 } 11 if ($ENV{PERL_CORE}) { 12 chdir('t') if -d 't'; 13 @INC = $^O eq 'MacOS' ? qw(::lib) : qw(../lib); 14 } 15} 16 17use strict; 18use warnings; 19BEGIN { $| = 1; print "1..110\n"; } 20my $count = 0; 21sub ok ($;$) { 22 my $p = my $r = shift; 23 if (@_) { 24 my $x = shift; 25 $p = !defined $x ? !defined $r : !defined $r ? 0 : $r eq $x; 26 } 27 print $p ? "ok" : "not ok", ' ', ++$count, "\n"; 28} 29 30use Unicode::Collate::Locale; 31 32ok(1); 33 34######################### 35 36my $eth = pack 'U', 0xF0; 37my $ETH = pack 'U', 0xD0; 38my $thrn = pack 'U', 0xFE; 39my $THRN = pack 'U', 0xDE; 40my $ae = pack 'U', 0xE6; 41my $AE = pack 'U', 0xC6; 42my $auml = pack 'U', 0xE4; 43my $Auml = pack 'U', 0xC4; 44my $ouml = pack 'U', 0xF6; 45my $Ouml = pack 'U', 0xD6; 46my $ostk = pack 'U', 0xF8; 47my $Ostk = pack 'U', 0xD8; 48my $arng = pack 'U', 0xE5; 49my $Arng = pack 'U', 0xC5; 50 51my $objIs = Unicode::Collate::Locale-> 52 new(locale => 'IS', normalization => undef); 53 54ok($objIs->getlocale, 'is'); 55 56$objIs->change(level => 1); 57 58ok($objIs->lt('a', "a\x{301}")); 59ok($objIs->gt('b', "a\x{301}")); 60ok($objIs->lt('d', $eth)); 61ok($objIs->gt('e', $eth)); 62ok($objIs->lt('e', "e\x{301}")); 63ok($objIs->gt('f', "e\x{301}")); 64ok($objIs->lt('i', "i\x{301}")); 65ok($objIs->gt('j', "i\x{301}")); 66ok($objIs->lt('o', "o\x{301}")); 67ok($objIs->gt('p', "o\x{301}")); 68ok($objIs->lt('u', "u\x{301}")); 69ok($objIs->gt('v', "u\x{301}")); 70ok($objIs->lt('y', "y\x{301}")); 71ok($objIs->gt('z', "y\x{301}")); 72 73# 16 74 75ok($objIs->lt('z', $thrn)); 76ok($objIs->lt($thrn, $ae)); 77ok($objIs->lt($ae, $ouml)); 78ok($objIs->lt($ouml, $arng)); 79ok($objIs->lt($arng, "\x{1C0}")); 80 81# 21 82 83ok($objIs->eq('d', "d\x{335}")); 84ok($objIs->eq($ae, $auml)); 85ok($objIs->eq($ouml, $ostk)); 86 87$objIs->change(level => 2); 88 89ok($objIs->lt('d', "d\x{335}")); 90ok($objIs->lt($ae, $auml)); 91ok($objIs->lt($ouml, $ostk)); 92 93# 27 94 95ok($objIs->eq("a\x{301}", "A\x{301}")); 96ok($objIs->eq("d\x{335}", "D\x{335}")); 97ok($objIs->eq($eth, $ETH)); 98ok($objIs->eq("e\x{301}", "E\x{301}")); 99ok($objIs->eq("i\x{301}", "I\x{301}")); 100ok($objIs->eq("o\x{301}", "O\x{301}")); 101ok($objIs->eq("u\x{301}", "U\x{301}")); 102ok($objIs->eq("y\x{301}", "Y\x{301}")); 103ok($objIs->eq($thrn, $THRN)); 104ok($objIs->eq($ae, $AE)); 105ok($objIs->eq($AE, "\x{1D2D}")); 106ok($objIs->eq($auml, $Auml)); 107ok($objIs->eq($ouml, $Ouml)); 108ok($objIs->eq($ostk, $Ostk)); 109ok($objIs->eq($arng, $Arng)); 110 111# 42 112 113$objIs->change(level => 3); 114 115ok($objIs->lt("a\x{301}", "A\x{301}")); 116ok($objIs->lt("d\x{335}", "D\x{335}")); 117ok($objIs->lt($eth, $ETH)); 118ok($objIs->lt("e\x{301}", "E\x{301}")); 119ok($objIs->lt("i\x{301}", "I\x{301}")); 120ok($objIs->lt("o\x{301}", "O\x{301}")); 121ok($objIs->lt("u\x{301}", "U\x{301}")); 122ok($objIs->lt("y\x{301}", "Y\x{301}")); 123ok($objIs->lt($thrn, $THRN)); 124ok($objIs->lt($ae, $AE)); 125ok($objIs->lt($AE, "\x{1D2D}")); 126ok($objIs->lt($auml, $Auml)); 127ok($objIs->lt($ouml, $Ouml)); 128ok($objIs->lt($ostk, $Ostk)); 129ok($objIs->lt($arng, $Arng)); 130 131# 57 132 133ok($objIs->eq("a\x{301}", pack('U', 0xE1))); 134ok($objIs->eq("a\x{341}", pack('U', 0xE1))); 135ok($objIs->eq("A\x{301}", pack('U', 0xC1))); 136ok($objIs->eq("A\x{341}", pack('U', 0xC1))); 137ok($objIs->eq("d\x{335}", "\x{111}")); 138ok($objIs->eq("D\x{335}", "\x{110}")); 139ok($objIs->eq("e\x{301}", pack('U', 0xE9))); 140ok($objIs->eq("e\x{341}", pack('U', 0xE9))); 141ok($objIs->eq("E\x{301}", pack('U', 0xC9))); 142ok($objIs->eq("E\x{341}", pack('U', 0xC9))); 143ok($objIs->eq("i\x{301}", pack('U', 0xED))); 144ok($objIs->eq("i\x{341}", pack('U', 0xED))); 145ok($objIs->eq("I\x{301}", pack('U', 0xCD))); 146ok($objIs->eq("I\x{341}", pack('U', 0xCD))); 147ok($objIs->eq("o\x{301}", pack('U', 0xF3))); 148ok($objIs->eq("o\x{341}", pack('U', 0xF3))); 149ok($objIs->eq("O\x{301}", pack('U', 0xD3))); 150ok($objIs->eq("O\x{341}", pack('U', 0xD3))); 151ok($objIs->eq("u\x{301}", pack('U', 0xFA))); 152ok($objIs->eq("u\x{341}", pack('U', 0xFA))); 153ok($objIs->eq("U\x{301}", pack('U', 0xDA))); 154ok($objIs->eq("U\x{341}", pack('U', 0xDA))); 155ok($objIs->eq("y\x{301}", pack('U', 0xFD))); 156ok($objIs->eq("y\x{341}", pack('U', 0xFD))); 157ok($objIs->eq("Y\x{301}", pack('U', 0xDD))); 158ok($objIs->eq("Y\x{341}", pack('U', 0xDD))); 159ok($objIs->eq("a\x{308}", $auml)); 160ok($objIs->eq("A\x{308}", $Auml)); 161ok($objIs->eq("o\x{308}", $ouml)); 162ok($objIs->eq("O\x{308}", $Ouml)); 163ok($objIs->eq("o\x{338}", $ostk)); 164ok($objIs->eq("O\x{338}", $Ostk)); 165ok($objIs->eq("a\x{30A}", $arng)); 166ok($objIs->eq("A\x{30A}", $Arng)); 167 168# 91 169 170ok($objIs->eq("\x{1FD}", "$ae\x{301}")); 171ok($objIs->eq("\x{1FC}", "$AE\x{301}")); 172ok($objIs->eq("\x{1E3}", "$ae\x{304}")); 173ok($objIs->eq("\x{1E2}", "$AE\x{304}")); 174ok($objIs->eq("a\x{308}\x{304}", "\x{1DF}")); 175ok($objIs->eq("A\x{308}\x{304}", "\x{1DE}")); 176ok($objIs->eq("o\x{308}\x{304}", "\x{22B}")); 177ok($objIs->eq("O\x{308}\x{304}", "\x{22A}")); 178ok($objIs->eq("o\x{338}\x{301}", "\x{1FF}")); 179ok($objIs->eq("O\x{338}\x{301}", "\x{1FE}")); 180ok($objIs->eq("A\x{30A}", "\x{212B}")); 181ok($objIs->eq("a\x{30A}\x{301}", "\x{1FB}")); 182ok($objIs->eq("A\x{30A}\x{301}", "\x{1FA}")); 183 184# 104 185 186$objIs->change(upper_before_lower => 1); 187 188ok($objIs->gt($ae, $AE)); 189ok($objIs->lt($AE, "\x{1D2D}")); 190ok($objIs->gt($auml, $Auml)); 191ok($objIs->gt($ouml, $Ouml)); 192ok($objIs->gt($ostk, $Ostk)); 193ok($objIs->gt($arng, $Arng)); 194 195# 110 196