This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Updated Unicode-Collate to CPAN version 0.76
[perl5.git] / cpan / Unicode-Collate / t / rewrite.t
1
2 BEGIN {
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     }
8     if ($ENV{PERL_CORE}) {
9         chdir('t') if -d 't';
10         @INC = $^O eq 'MacOS' ? qw(::lib) : qw(../lib);
11     }
12 }
13
14 use Test;
15 BEGIN { plan tests => 17 };
16
17 use strict;
18 use warnings;
19 use Unicode::Collate;
20
21 ok(1);
22
23 #########################
24
25 my $code = sub {
26     my $line = shift;
27     $line =~ s/\[\.0000\..{4}\..{4}\./[.0000.0000.0000./g;
28     return $line;
29   };
30
31 #####
32
33 my $Collator = Unicode::Collate->new(
34   table => 'keys.txt', normalization => undef, rewrite => $code,
35 );
36
37 ok($Collator->eq("camel", "came\x{300}l"));
38 ok($Collator->eq("camel", "ca\x{300}me\x{301}l"));
39 ok($Collator->lt("camel", "Camel"));
40 {
41   my $s = "Camel donkey zebra came\x{301}l CAMEL horse cam\0e\0l.";
42   $Collator->gsubst($s, "camel", sub { "=$_[0]=" });
43   ok($s, "Camel donkey zebra =came\x{301}l= CAMEL horse =cam\0e\0l=.");
44 }
45
46 # 5
47
48 my $rewriteDUCET = Unicode::Collate->new(
49   normalization => undef, rewrite => $code,
50 );
51
52 ok($rewriteDUCET->eq("camel", "came\x{300}l"));
53 ok($rewriteDUCET->eq("camel", "ca\x{300}me\x{301}l"));
54 ok($rewriteDUCET->lt("camel", "Camel"));
55 {
56   my $s = "Camel donkey zebra came\x{301}l CAMEL horse cam\0e\0l.";
57   $rewriteDUCET->gsubst($s, "camel", sub { "=$_[0]=" });
58   ok($s, "Camel donkey zebra =came\x{301}l= CAMEL horse =cam\0e\0l=.");
59 }
60
61 # 9
62
63 my $undef_hira = Unicode::Collate->new(
64   table => 'keys.txt',
65   normalization => undef,
66   level => 1,
67   rewrite => sub {
68     my $line = shift;
69     return '' if $line =~ /HIRAGANA/;
70     return $line;
71   },
72 );
73
74 my $hiragana = "\x{3042}\x{3044}";
75 my $katakana = "\x{30A2}\x{30A4}";
76 my $cjkkanji = "\x{4E00}";
77
78 # HIRAGANA are undefined via rewrite
79 # So they are after CJK Unified Ideographs.
80
81 ok($undef_hira->lt("abc", "perl"));
82 ok($undef_hira->lt("", "ABC"));
83 ok($undef_hira->lt($katakana, $hiragana));
84 ok($undef_hira->lt($katakana, $cjkkanji));
85 ok($undef_hira->lt($cjkkanji, $hiragana));
86
87 $Collator->change(level => 1);
88 ok($Collator->eq($katakana, $hiragana));
89 ok($Collator->lt($katakana, $cjkkanji));
90 ok($Collator->gt($cjkkanji, $hiragana));
91
92 # 17