blob: 763a8c1ecde4de5fc9a49e5752465ccaed6b1a83 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
|
#!./perl
BEGIN {
chdir 't' if -d 't';
@INC = '../lib';
}
print "1..15\n";
print "not " unless length("") == 0;
print "ok 1\n";
print "not " unless length("abc") == 3;
print "ok 2\n";
$_ = "foobar";
print "not " unless length() == 6;
print "ok 3\n";
# Okay, so that wasn't very challenging. Let's go Unicode.
{
my $a = "\x{41}";
print "not " unless length($a) == 1;
print "ok 4\n";
$test++;
use bytes;
print "not " unless $a eq "\x41" && length($a) == 1;
print "ok 5\n";
$test++;
}
{
my $a = pack("U", 0xFF);
print "not " unless length($a) == 1;
print "ok 6\n";
$test++;
use bytes;
if (ord('A') == 193)
{
printf "#%vx for 0xFF\n",$a;
print "not " unless $a eq "\x80\x45" && length($a) == 2;
}
else
{
print "not " unless $a eq "\xc3\xbf" && length($a) == 2;
}
print "ok 7\n";
$test++;
}
{
my $a = "\x{100}";
print "not " unless length($a) == 1;
print "ok 8\n";
$test++;
use bytes;
if (ord('A') == 193)
{
printf "#%vx for 0x100\n",$a;
print "not " unless $a eq "\x8c\x41" && length($a) == 2;
}
else
{
print "not " unless $a eq "\xc4\x80" && length($a) == 2;
}
print "ok 9\n";
$test++;
}
{
my $a = "\x{100}\x{80}";
print "not " unless length($a) == 2;
print "ok 10\n";
$test++;
use bytes;
if (ord('A') == 193)
{
printf "#%vx for 0x100 0x80\n",$a;
print "not " unless $a eq "\x8c\x41\x8a\x67" && length($a) == 4;
}
else
{
print "not " unless $a eq "\xc4\x80\xc2\x80" && length($a) == 4;
}
print "ok 11\n";
$test++;
}
{
my $a = "\x{80}\x{100}";
print "not " unless length($a) == 2;
print "ok 12\n";
$test++;
use bytes;
if (ord('A') == 193)
{
printf "#%vx for 0x80 0x100\n",$a;
print "not " unless $a eq "\x8a\x67\x8c\x41" && length($a) == 4;
}
else
{
print "not " unless $a eq "\xc2\x80\xc4\x80" && length($a) == 4;
}
print "ok 13\n";
$test++;
}
# Now for Unicode with magical vtbls
{
require Tie::Scalar;
my $a;
tie $a, 'Tie::StdScalar'; # makes $a magical
$a = "\x{263A}";
print "not " unless length($a) == 1;
print "ok 14\n";
$test++;
use bytes;
print "not " unless length($a) == 3;
print "ok 15\n";
$test++;
}
|