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..17\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
30
31ok(1);
32
33#
34# No test for Unicode::Collate is included in this .t file.
35#
36# UCA conformance test requires completely ignorable characters
37# (including noncharacters) must be able to be sorted in code point order.
38# If not so, Unicode::Collate must not be compliant with UCA.
39#
40# ~~~ CollationTest_SHIFTED.txt in CollationTest-4.0.0
41#
42# 206F 0021;	# ! NOMINAL DIGIT SHAPES	[| | | 0251]
43# D800 0021;	# ! <surrogate-D800>	[| | | 0251]
44# DFFF 0021;	# ! <surrogate-DFFF>	[| | | 0251]
45# FDD0 0021;	# ! <noncharacter-FDD0>	[| | | 0251]
46# FFFB 0021;	# ! INTERLINEAR ANNOTATION TERMINATOR	[| | | 0251]
47# FFFE 0021;	# ! <noncharacter-FFFE>	[| | | 0251]
48# FFFF 0021;	# ! <noncharacter-FFFF>	[| | | 0251]
49# 1D165 0021;	# ! MS. Cm. STEM	[| | | 0251]
50#
51# ~~~ CollationTest_NON_IGNORABLE.txt in CollationTest-4.0.0
52#
53# 206F 0021;	# ! NOMINAL DIGIT SHAPES	[0251 | 0020 | 0002 |]
54# D800 0021;	# ! <surrogate-D800>	[0251 | 0020 | 0002 |]
55# DFFF 0021;	# ! <surrogate-DFFF>	[0251 | 0020 | 0002 |]
56# FDD0 0021;	# ! <noncharacter-FDD0>	[0251 | 0020 | 0002 |]
57# FFFB 0021;	# ! INTERLINEAR ANNOTATION TERMINATOR	[0251 | 0020 | 0002 |]
58# FFFE 0021;	# ! <noncharacter-FFFE>	[0251 | 0020 | 0002 |]
59# FFFF 0021;	# ! <noncharacter-FFFF>	[0251 | 0020 | 0002 |]
60# 1D165 0021;	# ! MS. Cm. STEM	[0251 | 0020 | 0002 |]
61#
62
63no warnings 'utf8';
64
65ok("\x{206F}!" lt "\x{D800}!");
66ok(pack('U*', 0x206F, 0x21) lt pack('U*', 0xD800, 0x21));
67
68ok("\x{D800}!" lt "\x{DFFF}!");
69ok(pack('U*', 0xD800, 0x21) lt pack('U*', 0xDFFF, 0x21));
70
71ok("\x{DFFF}!" lt "\x{FDD0}!");
72ok(pack('U*', 0xDFFF, 0x21) lt pack('U*', 0xFDD0, 0x21) );
73
74ok("\x{FDD0}!" lt "\x{FFFB}!");
75ok(pack('U*', 0xFDD0, 0x21) lt pack('U*', 0xFFFB, 0x21));
76
77ok("\x{FFFB}!" lt "\x{FFFE}!");
78ok(pack('U*', 0xFFFB, 0x21) lt pack('U*', 0xFFFE, 0x21));
79
80ok("\x{FFFE}!" lt "\x{FFFF}!");
81ok(pack('U*', 0xFFFE, 0x21) lt pack('U*', 0xFFFF, 0x21));
82
83ok("\x{FFFF}!" lt "\x{1D165}!");
84ok(pack('U*', 0xFFFF, 0x21) lt pack('U*', 0x1D165, 0x21));
85
86ok("\000!" lt "\x{FFFF}!");
87ok(pack('U*', 0, 0x21) lt pack('U*', 0xFFFF, 0x21));
88
89