Commit | Line | Data |
646ca15d |
1 | #!./perl |
2 | |
3 | BEGIN { |
4 | chdir 't' if -d 't'; |
5 | @INC = qw(. ../lib); # ../lib needed for test.deparse |
6 | require "test.pl"; |
7 | } |
8 | |
9 | plan tests => 26; |
10 | |
11 | # Note that t/op/ord.t already tests for chr() <-> ord() rountripping. |
12 | |
13 | # Don't assume ASCII. |
14 | |
15 | is(chr(ord("A")), "A"); |
16 | |
17 | is(chr( 0), "\x00"); |
18 | is(chr(127), "\x7F"); |
19 | is(chr(128), "\x80"); |
20 | is(chr(255), "\xFF"); |
21 | |
22 | # is(chr(-1), undef); # Shouldn't it be? |
23 | |
24 | # Check UTF-8. |
25 | |
26 | sub hexes { join(" ",map{sprintf"%02x",$_}unpack("C*",chr($_[0]))) } |
27 | |
28 | # The following code points are some interesting steps in UTF-8. |
29 | is(hexes( 0x100), "c4 80"); |
30 | is(hexes( 0x7FF), "df bf"); |
31 | is(hexes( 0x800), "e0 a0 80"); |
32 | is(hexes( 0xFFF), "e0 bf bf"); |
33 | is(hexes( 0x1000), "e1 80 80"); |
34 | is(hexes( 0xCFFF), "ec bf bf"); |
35 | is(hexes( 0xD000), "ed 80 80"); |
36 | is(hexes( 0xD7FF), "ed 9f bf"); |
37 | is(hexes( 0xD800), "ed a0 80"); # not strict utf-8 (surrogate area begin) |
38 | is(hexes( 0xDFFF), "ed bf bf"); # not strict utf-8 (surrogate area end) |
39 | is(hexes( 0xE000), "ee 80 80"); |
40 | is(hexes( 0xFFFF), "ef bf bf"); |
41 | is(hexes( 0x10000), "f0 90 80 80"); |
42 | is(hexes( 0x3FFFF), "f0 bf bf bf"); |
43 | is(hexes( 0x40000), "f1 80 80 80"); |
44 | is(hexes( 0xFFFFF), "f3 bf bf bf"); |
45 | is(hexes(0x100000), "f4 80 80 80"); |
46 | is(hexes(0x10FFFF), "f4 8f bf bf"); # Unicode (4.1) last code point |
47 | is(hexes(0x110000), "f4 90 80 80"); |
48 | is(hexes(0x1FFFFF), "f7 bf bf bf"); # last four byte encoding |
49 | is(hexes(0x200000), "f8 88 80 80 80"); |
50 | |