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..217\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 $objSe = Unicode::Collate::Locale-> 37 new(locale => 'SE', normalization => undef); 38 39my $eth = pack 'U', 0xF0; 40my $ETH = pack 'U', 0xD0; 41my $thrn = pack 'U', 0xFE; 42my $THRN = pack 'U', 0xDE; 43my $ae = pack 'U', 0xE6; 44my $AE = pack 'U', 0xC6; 45 46ok($objSe->getlocale, 'se'); 47 48$objSe->change(level => 1); 49 50ok($objSe->lt("a", "a\x{301}")); 51ok($objSe->gt("b", "a\x{301}")); 52ok($objSe->lt("c", "c\x{30C}")); 53ok($objSe->lt("c\x{30C}", "\x{292}")); 54ok($objSe->lt( "\x{292}", "\x{1EF}")); 55ok($objSe->gt("d", "\x{1EF}")); 56ok($objSe->lt("d", "d\x{335}")); 57ok($objSe->gt("e", "d\x{335}")); 58ok($objSe->lt("g", "g\x{30C}")); 59ok($objSe->lt("g\x{30C}", "\x{1E5}")); 60ok($objSe->gt("h", "\x{1E5}")); 61ok($objSe->lt("k", "k\x{30C}")); 62ok($objSe->gt("l", "k\x{30C}")); 63ok($objSe->lt("n", "\x{14B}")); 64ok($objSe->gt("o", "\x{14B}")); 65ok($objSe->lt("s", "s\x{30C}")); 66ok($objSe->gt("t", "s\x{30C}")); 67ok($objSe->lt("t", "\x{167}")); 68ok($objSe->gt("u", "\x{167}")); 69ok($objSe->lt("z", "z\x{30C}")); 70ok($objSe->lt("z\x{30C}", "o\x{338}")); 71ok($objSe->lt("o\x{338}", $ae)); 72ok($objSe->lt($ae, "a\x{30A}")); 73ok($objSe->lt("a\x{30A}", "a\x{308}")); 74ok($objSe->lt("a\x{308}", "o\x{308}")); 75ok($objSe->lt("o\x{308}", "\x{1C0}")); 76 77# 28 78 79ok($objSe->eq("d\x{335}", $eth)); 80ok($objSe->eq( "\x{14B}", "n\x{301}")); 81ok($objSe->eq("n\x{301}", "n\x{303}")); 82ok($objSe->eq( "\x{167}", $thrn)); 83ok($objSe->eq("y", "u\x{308}")); 84ok($objSe->eq("u\x{308}", "u\x{30B}")); 85ok($objSe->eq("o\x{338}", "\x{153}")); 86ok($objSe->eq("a\x{30A}", "a\x{307}")); 87ok($objSe->eq("a\x{308}", "a\x{303}")); 88ok($objSe->eq("o\x{308}", "o\x{30B}")); 89ok($objSe->eq("o\x{30B}", "o\x{303}")); 90ok($objSe->eq("o\x{303}", "o\x{302}")); 91ok($objSe->eq("o\x{302}", "o\x{328}")); 92 93# 41 94 95$objSe->change(level => 2); 96 97ok($objSe->lt("d\x{335}", $eth)); 98ok($objSe->lt( "\x{14B}", "n\x{301}")); 99ok($objSe->lt("n\x{301}", "n\x{303}")); 100ok($objSe->lt( "\x{167}", $thrn)); 101ok($objSe->lt("y", "u\x{308}")); 102ok($objSe->lt("u\x{308}", "u\x{30B}")); 103ok($objSe->lt("o\x{338}", "\x{153}")); 104ok($objSe->lt("a\x{30A}", "a\x{307}")); 105ok($objSe->lt("a\x{308}", "a\x{303}")); 106ok($objSe->lt("o\x{308}", "o\x{30B}")); 107ok($objSe->lt("o\x{30B}", "o\x{303}")); 108ok($objSe->lt("o\x{303}", "o\x{302}")); 109ok($objSe->lt("o\x{302}", "o\x{328}")); 110 111# 54 112 113ok($objSe->eq("a\x{301}", "A\x{301}")); 114ok($objSe->eq("c\x{30C}", "C\x{30C}")); 115ok($objSe->eq( "\x{292}", "\x{1B7}")); 116ok($objSe->eq( "\x{1EF}", "\x{1EE}")); 117ok($objSe->eq("d\x{335}", "D\x{335}")); 118ok($objSe->eq($eth, $ETH)); 119ok($objSe->eq("g\x{30C}", "G\x{30C}")); 120ok($objSe->eq( "\x{1E5}", "\x{1E4}")); 121ok($objSe->eq("k\x{30C}", "K\x{30C}")); 122ok($objSe->eq( "\x{14B}", "\x{14A}")); 123ok($objSe->eq("n\x{301}", "N\x{301}")); 124ok($objSe->eq("n\x{303}", "N\x{303}")); 125ok($objSe->eq("s\x{30C}", "S\x{30C}")); 126ok($objSe->eq( "\x{167}", "\x{166}")); 127ok($objSe->eq($thrn, $THRN)); 128ok($objSe->eq("u\x{308}", "U\x{308}")); 129ok($objSe->eq("u\x{30B}", "U\x{30B}")); 130ok($objSe->eq("z\x{30C}", "Z\x{30C}")); 131ok($objSe->eq("o\x{338}", "O\x{338}")); 132ok($objSe->eq( "\x{153}", "\x{152}")); 133ok($objSe->eq($ae, $AE)); 134ok($objSe->eq($AE, "\x{1D2D}")); 135ok($objSe->eq("a\x{30A}", "A\x{30A}")); 136ok($objSe->eq("a\x{307}", "A\x{307}")); 137ok($objSe->eq("a\x{308}", "A\x{308}")); 138ok($objSe->eq("a\x{303}", "A\x{303}")); 139ok($objSe->eq("o\x{308}", "O\x{308}")); 140ok($objSe->eq("o\x{30B}", "O\x{30B}")); 141ok($objSe->eq("o\x{303}", "O\x{303}")); 142ok($objSe->eq("o\x{302}", "O\x{302}")); 143ok($objSe->eq("o\x{328}", "O\x{328}")); 144 145# 85 146 147$objSe->change(level => 3); 148 149ok($objSe->lt("a\x{301}", "A\x{301}")); 150ok($objSe->lt("c\x{30C}", "C\x{30C}")); 151ok($objSe->lt( "\x{292}", "\x{1B7}")); 152ok($objSe->lt( "\x{1EF}", "\x{1EE}")); 153ok($objSe->lt("d\x{335}", "D\x{335}")); 154ok($objSe->lt($eth, $ETH)); 155ok($objSe->lt("g\x{30C}", "G\x{30C}")); 156ok($objSe->lt( "\x{1E5}", "\x{1E4}")); 157ok($objSe->lt("k\x{30C}", "K\x{30C}")); 158ok($objSe->lt( "\x{14B}", "\x{14A}")); 159ok($objSe->lt("n\x{301}", "N\x{301}")); 160ok($objSe->lt("n\x{303}", "N\x{303}")); 161ok($objSe->lt("s\x{30C}", "S\x{30C}")); 162ok($objSe->lt( "\x{167}", "\x{166}")); 163ok($objSe->lt($thrn, $THRN)); 164ok($objSe->lt("u\x{308}", "U\x{308}")); 165ok($objSe->lt("u\x{30B}", "U\x{30B}")); 166ok($objSe->lt("z\x{30C}", "Z\x{30C}")); 167ok($objSe->lt("o\x{338}", "O\x{338}")); 168ok($objSe->lt( "\x{153}", "\x{152}")); 169ok($objSe->lt($ae, $AE)); 170ok($objSe->lt($AE, "\x{1D2D}")); 171ok($objSe->lt("a\x{30A}", "A\x{30A}")); 172ok($objSe->lt("a\x{307}", "A\x{307}")); 173ok($objSe->lt("a\x{308}", "A\x{308}")); 174ok($objSe->lt("a\x{303}", "A\x{303}")); 175ok($objSe->lt("o\x{308}", "O\x{308}")); 176ok($objSe->lt("o\x{30B}", "O\x{30B}")); 177ok($objSe->lt("o\x{303}", "O\x{303}")); 178ok($objSe->lt("o\x{302}", "O\x{302}")); 179ok($objSe->lt("o\x{328}", "O\x{328}")); 180 181# 116 182 183ok($objSe->eq("a\x{301}", pack('U', 0xE1))); 184ok($objSe->eq("a\x{341}", pack('U', 0xE1))); 185ok($objSe->eq("A\x{301}", pack('U', 0xC1))); 186ok($objSe->eq("A\x{341}", pack('U', 0xC1))); 187ok($objSe->eq("c\x{30C}", "\x{10D}")); 188ok($objSe->eq("C\x{30C}", "\x{10C}")); 189ok($objSe->eq("\x{1EF}", "\x{292}\x{30C}")); 190ok($objSe->eq("\x{1EE}", "\x{1B7}\x{30C}")); 191ok($objSe->eq("d\x{335}", "\x{111}")); 192ok($objSe->eq("D\x{335}", "\x{110}")); 193ok($objSe->eq("g\x{30C}", "\x{1E7}")); 194ok($objSe->eq("G\x{30C}", "\x{1E6}")); 195ok($objSe->eq("k\x{30C}", "\x{1E9}")); 196ok($objSe->eq("K\x{30C}", "\x{1E8}")); 197ok($objSe->eq("n\x{301}", "\x{144}")); 198ok($objSe->eq("n\x{341}", "\x{144}")); 199ok($objSe->eq("N\x{301}", "\x{143}")); 200ok($objSe->eq("N\x{341}", "\x{143}")); 201ok($objSe->eq("n\x{303}", pack('U', 0xF1))); 202ok($objSe->eq("N\x{303}", pack('U', 0xD1))); 203ok($objSe->eq("s\x{30C}", "\x{161}")); 204ok($objSe->eq("S\x{30C}", "\x{160}")); 205ok($objSe->eq("u\x{308}", pack('U', 0xFC))); 206ok($objSe->eq("U\x{308}", pack('U', 0xDC))); 207ok($objSe->eq("u\x{30B}", "\x{171}")); 208ok($objSe->eq("U\x{30B}", "\x{170}")); 209 210# 142 211 212ok($objSe->eq("z\x{30C}", "\x{17E}")); 213ok($objSe->eq("Z\x{30C}", "\x{17D}")); 214ok($objSe->eq("o\x{338}", pack('U', 0xF8))); 215ok($objSe->eq("O\x{338}", pack('U', 0xD8))); 216ok($objSe->eq("a\x{30A}", pack('U', 0xE5))); 217ok($objSe->eq("A\x{30A}", pack('U', 0xC5))); 218ok($objSe->eq("a\x{307}", "\x{227}")); 219ok($objSe->eq("A\x{307}", "\x{226}")); 220ok($objSe->eq("a\x{308}", pack('U', 0xE4))); 221ok($objSe->eq("A\x{308}", pack('U', 0xC4))); 222ok($objSe->eq("a\x{303}", pack('U', 0xE3))); 223ok($objSe->eq("A\x{303}", pack('U', 0xC3))); 224ok($objSe->eq("o\x{308}", pack('U', 0xF6))); 225ok($objSe->eq("O\x{308}", pack('U', 0xD6))); 226ok($objSe->eq("o\x{30B}", "\x{151}")); 227ok($objSe->eq("O\x{30B}", "\x{150}")); 228ok($objSe->eq("o\x{303}", pack('U', 0xF5))); 229ok($objSe->eq("O\x{303}", pack('U', 0xD5))); 230ok($objSe->eq("o\x{302}", pack('U', 0xF4))); 231ok($objSe->eq("O\x{302}", pack('U', 0xD4))); 232ok($objSe->eq("o\x{328}", "\x{1EB}")); 233ok($objSe->eq("O\x{328}", "\x{1EA}")); 234 235# 164 236 237ok($objSe->eq("u\x{308}\x{300}", "\x{1DC}")); 238ok($objSe->eq("U\x{308}\x{300}", "\x{1DB}")); 239ok($objSe->eq("u\x{308}\x{301}", "\x{1D8}")); 240ok($objSe->eq("U\x{308}\x{301}", "\x{1D7}")); 241ok($objSe->eq("u\x{308}\x{304}", "\x{1D6}")); 242ok($objSe->eq("U\x{308}\x{304}", "\x{1D5}")); 243ok($objSe->eq("u\x{308}\x{30C}", "\x{1DA}")); 244ok($objSe->eq("U\x{308}\x{30C}", "\x{1D9}")); 245ok($objSe->eq("o\x{338}\x{301}", "\x{1FF}")); 246ok($objSe->eq("O\x{338}\x{301}", "\x{1FE}")); 247 248ok($objSe->eq("\x{1FD}", "$ae\x{301}")); 249ok($objSe->eq("\x{1FC}", "$AE\x{301}")); 250ok($objSe->eq("\x{1E3}", "$ae\x{304}")); 251ok($objSe->eq("\x{1E2}", "$AE\x{304}")); 252ok($objSe->eq("A\x{30A}", "\x{212B}")); 253ok($objSe->eq("a\x{30A}\x{301}", "\x{1FB}")); 254ok($objSe->eq("A\x{30A}\x{301}", "\x{1FA}")); 255ok($objSe->eq("a\x{308}\x{304}", "\x{1DF}")); 256ok($objSe->eq("A\x{308}\x{304}", "\x{1DE}")); 257 258ok($objSe->eq("o\x{308}\x{304}", "\x{22B}")); 259ok($objSe->eq("O\x{308}\x{304}", "\x{22A}")); 260ok($objSe->eq("o\x{303}\x{301}","\x{1E4D}")); 261ok($objSe->eq("O\x{303}\x{301}","\x{1E4C}")); 262ok($objSe->eq("o\x{303}\x{304}", "\x{22D}")); 263ok($objSe->eq("O\x{303}\x{304}", "\x{22C}")); 264ok($objSe->eq("o\x{303}\x{308}","\x{1E4F}")); 265ok($objSe->eq("O\x{303}\x{308}","\x{1E4E}")); 266ok($objSe->eq("o\x{303}\x{31B}","\x{1EE1}")); 267ok($objSe->eq("O\x{303}\x{31B}","\x{1EE0}")); 268 269ok($objSe->eq("o\x{302}\x{300}", "\x{1ED3}")); 270ok($objSe->eq("O\x{302}\x{300}", "\x{1ED2}")); 271ok($objSe->eq("o\x{302}\x{301}", "\x{1ED1}")); 272ok($objSe->eq("O\x{302}\x{301}", "\x{1ED0}")); 273ok($objSe->eq("o\x{302}\x{303}", "\x{1ED7}")); 274ok($objSe->eq("O\x{302}\x{303}", "\x{1ED6}")); 275ok($objSe->eq("o\x{302}\x{309}", "\x{1ED5}")); 276ok($objSe->eq("O\x{302}\x{309}", "\x{1ED4}")); 277ok($objSe->eq("o\x{302}\x{323}", "\x{1ED9}")); 278ok($objSe->eq("O\x{302}\x{323}", "\x{1ED8}")); 279 280# 203 281 282$objSe->change(upper_before_lower => 1); 283 284ok($objSe->gt("z\x{30C}", "Z\x{30C}")); 285ok($objSe->gt("o\x{338}", "O\x{338}")); 286ok($objSe->gt( "\x{153}", "\x{152}")); 287ok($objSe->gt($ae, $AE)); 288ok($objSe->lt($AE, "\x{1D2D}")); 289ok($objSe->gt("a\x{30A}", "A\x{30A}")); 290ok($objSe->gt("a\x{307}", "A\x{307}")); 291ok($objSe->gt("a\x{308}", "A\x{308}")); 292ok($objSe->gt("a\x{303}", "A\x{303}")); 293ok($objSe->gt("o\x{308}", "O\x{308}")); 294ok($objSe->gt("o\x{30B}", "O\x{30B}")); 295ok($objSe->gt("o\x{303}", "O\x{303}")); 296ok($objSe->gt("o\x{302}", "O\x{302}")); 297ok($objSe->gt("o\x{328}", "O\x{328}")); 298 299# 217 300