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
9BEGIN {
10    unless (5.006001 <= $]) {
11	print "1..0 # skipped: Perl 5.6.1 or later".
12		" needed for this test\n";
13	exit;
14    }
15}
16
17#########################
18
19use strict;
20use warnings;
21BEGIN { $| = 1; print "1..26\n"; }
22my $count = 0;
23sub ok { Unicode::Normalize::ok(\$count, @_) }
24
25use Unicode::Normalize qw(:all);
26
27ok(1);
28
29sub _pack_U   { Unicode::Normalize::dot_t_pack_U(@_) }
30sub _unpack_U { Unicode::Normalize::undot_t_pack_U(@_) }
31
32#########################
33
34sub arraynorm {
35    my $form   = shift;
36    my @string = @_;
37    my $result = "";
38    my $unproc = "";
39    foreach my $str (@string) {
40        $unproc .= $str;
41        $result .= normalize_partial($form, $unproc);
42    }
43    $result .= $unproc;
44    return $result;
45}
46
47my $strD = "\x{3C9}\x{301}\x{1100}\x{1161}\x{11A8}\x{1100}\x{1161}\x{11AA}";
48my $strC = "\x{3CE}\x{AC01}\x{AC03}";
49my @str1 = (substr($strD,0,3), substr($strD,3,4), substr($strD,7));
50my @str2 = (substr($strD,0,1), substr($strD,1,3), substr($strD,4));
51ok($strC eq NFC($strD));
52ok($strD eq join('', @str1));
53ok($strC eq arraynorm('NFC', @str1));
54ok($strD eq join('', @str2));
55ok($strC eq arraynorm('NFC', @str2));
56
57my @strX = ("\x{300}\x{AC00}", "\x{11A8}");
58my $strX =  "\x{300}\x{AC01}";
59ok($strX eq NFC(join('', @strX)));
60ok($strX eq arraynorm('NFC', @strX));
61ok($strX eq NFKC(join('', @strX)));
62ok($strX eq arraynorm('NFKC', @strX));
63
64my @strY = ("\x{304B}\x{0308}", "\x{0323}\x{3099}");
65my $strY = ("\x{304C}\x{0323}\x{0308}");
66ok($strY eq NFC(join('', @strY)));
67ok($strY eq arraynorm('NFC', @strY));
68ok($strY eq NFKC(join('', @strY)));
69ok($strY eq arraynorm('NFKC', @strY));
70
71my @strZ = ("\x{304B}\x{0308}", "\x{0323}", "\x{3099}");
72my $strZ = ("\x{304B}\x{3099}\x{0323}\x{0308}");
73ok($strZ eq NFD(join('', @strZ)));
74ok($strZ eq arraynorm('NFD', @strZ));
75ok($strZ eq NFKD(join('', @strZ)));
76ok($strZ eq arraynorm('NFKD', @strZ));
77
78# 18
79
80# must modify the source
81my $sNFD = "\x{FA19}";
82ok(normalize_partial('NFD', $sNFD), "");
83ok($sNFD, "\x{795E}");
84
85my $sNFC = "\x{FA1B}";
86ok(normalize_partial('NFC', $sNFC), "");
87ok($sNFC, "\x{798F}");
88
89my $sNFKD = "\x{FA1E}";
90ok(normalize_partial('NFKD', $sNFKD), "");
91ok($sNFKD, "\x{7FBD}");
92
93my $sNFKC = "\x{FA26}";
94ok(normalize_partial('NFKC', $sNFKC), "");
95ok($sNFKC, "\x{90FD}");
96
97# 26
98
99