This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Upgrade Unicode::Normalize from version 1.17 to 1.18
[perl5.git] / cpan / Unicode-Normalize / t / partial2.t
1
2 BEGIN {
3     unless ('A' eq pack('U', 0x41)) {
4         print "1..0 # Unicode::Normalize cannot pack a Unicode code point\n";
5         exit 0;
6     }
7     unless (0x41 == unpack('U', 'A')) {
8         print "1..0 # Unicode::Normalize cannot get a Unicode code point\n";
9         exit 0;
10     }
11 }
12
13 BEGIN {
14     if ($ENV{PERL_CORE}) {
15         chdir('t') if -d 't';
16         @INC = $^O eq 'MacOS' ? qw(::lib) : qw(../lib);
17     }
18 }
19
20 BEGIN {
21     unless (5.006001 <= $]) {
22         print "1..0 # skipped: Perl 5.6.1 or later".
23                 " needed for this test\n";
24         exit;
25     }
26 }
27
28 #########################
29
30 use strict;
31 use warnings;
32 BEGIN { $| = 1; print "1..26\n"; }
33 my $count = 0;
34 sub ok ($;$) {
35     my $p = my $r = shift;
36     if (@_) {
37         my $x = shift;
38         $p = !defined $x ? !defined $r : !defined $r ? 0 : $r eq $x;
39     }
40     print $p ? "ok" : "not ok", ' ', ++$count, "\n";
41 }
42
43 use Unicode::Normalize qw(:all);
44
45 ok(1);
46
47 sub _pack_U   { Unicode::Normalize::pack_U(@_) }
48 sub _unpack_U { Unicode::Normalize::unpack_U(@_) }
49
50 #########################
51
52 sub arraynorm {
53     my $form   = shift;
54     my @string = @_;
55     my $result = "";
56     my $unproc = "";
57     foreach my $str (@string) {
58         $unproc .= $str;
59         $result .= normalize_partial($form, $unproc);
60     }
61     $result .= $unproc;
62     return $result;
63 }
64
65 my $strD = "\x{3C9}\x{301}\x{1100}\x{1161}\x{11A8}\x{1100}\x{1161}\x{11AA}";
66 my $strC = "\x{3CE}\x{AC01}\x{AC03}";
67 my @str1 = (substr($strD,0,3), substr($strD,3,4), substr($strD,7));
68 my @str2 = (substr($strD,0,1), substr($strD,1,3), substr($strD,4));
69 ok($strC eq NFC($strD));
70 ok($strD eq join('', @str1));
71 ok($strC eq arraynorm('NFC', @str1));
72 ok($strD eq join('', @str2));
73 ok($strC eq arraynorm('NFC', @str2));
74
75 my @strX = ("\x{300}\x{AC00}", "\x{11A8}");
76 my $strX =  "\x{300}\x{AC01}";
77 ok($strX eq NFC(join('', @strX)));
78 ok($strX eq arraynorm('NFC', @strX));
79 ok($strX eq NFKC(join('', @strX)));
80 ok($strX eq arraynorm('NFKC', @strX));
81
82 my @strY = ("\x{304B}\x{0308}", "\x{0323}\x{3099}");
83 my $strY = ("\x{304C}\x{0323}\x{0308}");
84 ok($strY eq NFC(join('', @strY)));
85 ok($strY eq arraynorm('NFC', @strY));
86 ok($strY eq NFKC(join('', @strY)));
87 ok($strY eq arraynorm('NFKC', @strY));
88
89 my @strZ = ("\x{304B}\x{0308}", "\x{0323}", "\x{3099}");
90 my $strZ = ("\x{304B}\x{3099}\x{0323}\x{0308}");
91 ok($strZ eq NFD(join('', @strZ)));
92 ok($strZ eq arraynorm('NFD', @strZ));
93 ok($strZ eq NFKD(join('', @strZ)));
94 ok($strZ eq arraynorm('NFKD', @strZ));
95
96 # 18
97
98 # must modify the source
99 my $sNFD = "\x{FA19}";
100 ok(normalize_partial('NFD', $sNFD), "");
101 ok($sNFD, "\x{795E}");
102
103 my $sNFC = "\x{FA1B}";
104 ok(normalize_partial('NFC', $sNFC), "");
105 ok($sNFC, "\x{798F}");
106
107 my $sNFKD = "\x{FA1E}";
108 ok(normalize_partial('NFKD', $sNFKD), "");
109 ok($sNFKD, "\x{7FBD}");
110
111 my $sNFKC = "\x{FA26}";
112 ok(normalize_partial('NFKC', $sNFKC), "");
113 ok($sNFKC, "\x{90FD}");
114
115 # 26
116