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
9use strict;
10use warnings;
11BEGIN { $| = 1; print "1..17\n"; }
12my $count = 0;
13sub ok ($;$) {
14    my $p = my $r = shift;
15    if (@_) {
16	my $x = shift;
17	$p = !defined $x ? !defined $r : !defined $r ? 0 : $r eq $x;
18    }
19    print $p ? "ok" : "not ok", ' ', ++$count, "\n";
20}
21
22use Unicode::Collate;
23
24ok(1);
25
26sub _pack_U   { Unicode::Collate::pack_U(@_) }
27sub _unpack_U { Unicode::Collate::unpack_U(@_) }
28
29#########################
30
31#
32# No test for Unicode::Collate is included in this .t file.
33#
34# UCA conformance test requires completely ignorable characters
35# (including noncharacters) must be able to be sorted in code point order.
36# If not so, Unicode::Collate must not be compliant with UCA.
37#
38# ~~~ CollationTest_SHIFTED.txt in CollationTest-4.0.0
39#
40# 206F 0021;	# ! NOMINAL DIGIT SHAPES	[| | | 0251]
41# D800 0021;	# ! <surrogate-D800>	[| | | 0251]
42# DFFF 0021;	# ! <surrogate-DFFF>	[| | | 0251]
43# FDD0 0021;	# ! <noncharacter-FDD0>	[| | | 0251]
44# FFFB 0021;	# ! INTERLINEAR ANNOTATION TERMINATOR	[| | | 0251]
45# FFFE 0021;	# ! <noncharacter-FFFE>	[| | | 0251]
46# FFFF 0021;	# ! <noncharacter-FFFF>	[| | | 0251]
47# 1D165 0021;	# ! MS. Cm. STEM	[| | | 0251]
48#
49# ~~~ CollationTest_NON_IGNORABLE.txt in CollationTest-4.0.0
50#
51# 206F 0021;	# ! NOMINAL DIGIT SHAPES	[0251 | 0020 | 0002 |]
52# D800 0021;	# ! <surrogate-D800>	[0251 | 0020 | 0002 |]
53# DFFF 0021;	# ! <surrogate-DFFF>	[0251 | 0020 | 0002 |]
54# FDD0 0021;	# ! <noncharacter-FDD0>	[0251 | 0020 | 0002 |]
55# FFFB 0021;	# ! INTERLINEAR ANNOTATION TERMINATOR	[0251 | 0020 | 0002 |]
56# FFFE 0021;	# ! <noncharacter-FFFE>	[0251 | 0020 | 0002 |]
57# FFFF 0021;	# ! <noncharacter-FFFF>	[0251 | 0020 | 0002 |]
58# 1D165 0021;	# ! MS. Cm. STEM	[0251 | 0020 | 0002 |]
59#
60
61no warnings 'utf8';
62
63ok("\x{206F}!" lt "\x{D800}!");
64ok(_pack_U(0x206F, 0x21) lt _pack_U(0xD800, 0x21));
65
66ok("\x{D800}!" lt "\x{DFFF}!");
67ok(_pack_U(0xD800, 0x21) lt _pack_U(0xDFFF, 0x21));
68
69ok("\x{DFFF}!" lt "\x{FDD0}!");
70ok(_pack_U(0xDFFF, 0x21) lt _pack_U(0xFDD0, 0x21) );
71
72ok("\x{FDD0}!" lt "\x{FFFB}!");
73ok(_pack_U(0xFDD0, 0x21) lt _pack_U(0xFFFB, 0x21));
74
75ok("\x{FFFB}!" lt "\x{FFFE}!");
76ok(_pack_U(0xFFFB, 0x21) lt _pack_U(0xFFFE, 0x21));
77
78ok("\x{FFFE}!" lt "\x{FFFF}!");
79ok(_pack_U(0xFFFE, 0x21) lt _pack_U(0xFFFF, 0x21));
80
81ok("\x{FFFF}!" lt "\x{1D165}!");
82ok(_pack_U(0xFFFF, 0x21) lt _pack_U(0x1D165, 0x21));
83
84ok("\000!" lt "\x{FFFF}!");
85ok(_pack_U(0, 0x21) lt _pack_U(0xFFFF, 0x21));
86
87