source: trunk/essentials/dev-lang/perl/t/op/length.t

Last change on this file was 3181, checked in by bird, 18 years ago

perl 5.8.8

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