The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

BEGIN { $| = 1; print "1..100\n"; }

use Unicode::Transform ':ord';
use strict;
use warnings;

print "ok 1\n";

##### U+0000, 2..9

print ord_unicode("\x00") == 0
   ? "ok" : "not ok", " 2\n";

print ord_utf16le("\x00\x00") == 0
   ? "ok" : "not ok", " 3\n";

print ord_utf16be("\x00\x00") == 0
   ? "ok" : "not ok", " 4\n";

print ord_utf32le("\0\0\0\0") == 0
   ? "ok" : "not ok", " 5\n";

print ord_utf32be("\0\0\0\0") == 0
   ? "ok" : "not ok", " 6\n";

print ord_utf8("\x00") == 0
   ? "ok" : "not ok", " 7\n";

print ord_utf8mod("\x00") == 0
   ? "ok" : "not ok", " 8\n";

print ord_utfcp1047("\x00") == 0
   ? "ok" : "not ok", " 9\n";

##### undef, 10..17

print !defined ord_unicode("")
   ? "ok" : "not ok", " 10\n";

print !defined ord_utf16le("")
   ? "ok" : "not ok", " 11\n";

print !defined ord_utf16be("")
   ? "ok" : "not ok", " 12\n";

print !defined ord_utf32le("")
   ? "ok" : "not ok", " 13\n";

print !defined ord_utf32be("")
   ? "ok" : "not ok", " 14\n";

print !defined ord_utf8("")
   ? "ok" : "not ok", " 15\n";

print !defined ord_utf8mod("")
   ? "ok" : "not ok", " 16\n";

print !defined ord_utfcp1047("")
   ? "ok" : "not ok", " 17\n";

##### U+DFFF, 18..24

print ord_utf16le("\xFF\xDF") == 0xDFFF
   ? "ok" : "not ok", " 18\n";

print ord_utf16be("\xDF\xFF") == 0xDFFF
   ? "ok" : "not ok", " 19\n";

print ord_utf32le("\xFF\xDF\0\0") == 0xDFFF
   ? "ok" : "not ok", " 20\n";

print ord_utf32be("\0\0\xDF\xFF") == 0xDFFF
   ? "ok" : "not ok", " 21\n";

print ord_utf8("\xED\xBF\xBF") == 0xDFFF
   ? "ok" : "not ok", " 22\n";

print ord_utf8mod("\xF1\xB7\xBF\xBF") == 0xDFFF
   ? "ok" : "not ok", " 23\n";

print ord_utfcp1047("\xDD\x66\x73\x73") == 0xDFFF
   ? "ok" : "not ok", " 24\n";

##### U+FEFF, 25..32

print ord_unicode("\x{feff}") == 0xFEFF
   ? "ok" : "not ok", " 25\n";

print ord_utf16le("\xFF\xFE") == 0xFEFF
   ? "ok" : "not ok", " 26\n";

print ord_utf16be("\xFE\xFF") == 0xFEFF
   ? "ok" : "not ok", " 27\n";

print ord_utf32le("\xFF\xFE\0\0") == 0xFEFF
   ? "ok" : "not ok", " 28\n";

print ord_utf32be("\0\0\xFE\xFF") == 0xFEFF
   ? "ok" : "not ok", " 29\n";

print ord_utf8("\xEF\xBB\xBF") == 0xFEFF
   ? "ok" : "not ok", " 30\n";

print ord_utf8mod("\xF1\xBF\xB7\xBF") == 0xFEFF
   ? "ok" : "not ok", " 31\n";

print ord_utfcp1047("\xDD\x73\x66\x73") == 0xFEFF
   ? "ok" : "not ok", " 32\n";

##### U+12345, 33..40

print ord_unicode("\x{12345}") == 0x12345
   ? "ok" : "not ok", " 33\n";

print ord_utf16le("\x08\xD8\x45\xDF") == 0x12345
   ? "ok" : "not ok", " 34\n";

print ord_utf16be("\xD8\x08\xDF\x45") == 0x12345
   ? "ok" : "not ok", " 35\n";

print ord_utf32le("\x45\x23\x01\x00") == 0x12345
   ? "ok" : "not ok", " 36\n";

print ord_utf32be("\x00\x01\x23\x45") == 0x12345
   ? "ok" : "not ok", " 37\n";

print ord_utf8("\xF0\x92\x8D\x85") == 0x12345
   ? "ok" : "not ok", " 38\n";

print ord_utf8mod("\xF2\xA8\xBA\xA5") == 0x12345
   ? "ok" : "not ok", " 39\n";

print ord_utfcp1047("\xDE\x49\x69\x46") == 0x12345
   ? "ok" : "not ok", " 40\n";

##### U+10FFFF, 41..47

print ord_utf16le("\xFF\xDB\xFF\xDF") == 0x10FFFF
   ? "ok" : "not ok", " 41\n";

print ord_utf16be("\xDB\xFF\xDF\xFF") == 0x10FFFF
   ? "ok" : "not ok", " 42\n";

print ord_utf32le("\xFF\xFF\x10\x00") == 0x10FFFF
   ? "ok" : "not ok", " 43\n";

print ord_utf32be("\x00\x10\xFF\xFF") == 0x10FFFF
   ? "ok" : "not ok", " 44\n";

print ord_utf8("\xF4\x8F\xBF\xBF") == 0x10FFFF
   ? "ok" : "not ok", " 45\n";

print ord_utf8mod("\xF9\xA1\xBF\xBF\xBF") == 0x10FFFF
   ? "ok" : "not ok", " 46\n";

print ord_utfcp1047("\xEE\x42\x73\x73\x73") == 0x10FFFF
   ? "ok" : "not ok", " 47\n";

##### misc., 48..58

print ord_unicode("Perl") == 0x50
   ? "ok" : "not ok", " 48\n";

print ord_utf8("\x50\x65\x72\x6C") == 0x50
   ? "ok" : "not ok", " 49\n";

print ord_utf8("\320\261") == 0x0431
   ? "ok" : "not ok", " 50\n";

print ord_utf8("\316\261") == 0x03B1
   ? "ok" : "not ok", " 51\n";

print ord_utf8("\327\221") == 0x05D1
   ? "ok" : "not ok", " 52\n";

print ord_utf8("\360\220\221\215") == 0x1044D
   ? "ok" : "not ok", " 53\n";

print ord_utfcp1047("\301") == 0x41
   ? "ok" : "not ok", " 54\n";

print ord_utfcp1047("\270\102\130") == 0x0431
   ? "ok" : "not ok", " 55\n";

print ord_utfcp1047("\264\130") == 0x03B1
   ? "ok" : "not ok", " 56\n";

print ord_utfcp1047("\270\125\130") == 0x05D1
   ? "ok" : "not ok", " 57\n";

print ord_utfcp1047("\336\102\103\124") == 0x1044D
   ? "ok" : "not ok", " 58\n";

##### U+D800, 59..65

print ord_utf16le("\x00\xD8") == 0xD800
   ? "ok" : "not ok", " 59\n";

print ord_utf16be("\xD8\x00") == 0xD800
   ? "ok" : "not ok", " 60\n";

print ord_utf32le("\x00\xD8\0\0") == 0xD800
   ? "ok" : "not ok", " 61\n";

print ord_utf32be("\0\0\xD8\x00") == 0xD800
   ? "ok" : "not ok", " 62\n";

print ord_utf8("\xED\xA0\x80") == 0xD800
   ? "ok" : "not ok", " 63\n";

print ord_utf8mod("\xF1\xB6\xA0\xA0") == 0xD800
   ? "ok" : "not ok", " 64\n";

print ord_utfcp1047("\xDD\x65\x41\x41") == 0xD800
   ? "ok" : "not ok", " 65\n";

##### U+110000, 66..71

print ord_unicode("\x{110000}") == 0x110000
   ? "ok" : "not ok", " 66\n";

print ord_utf32le("\x00\x00\x11\x00") == 0x110000
   ? "ok" : "not ok", " 67\n";

print ord_utf32be("\x00\x11\x00\x00") == 0x110000
   ? "ok" : "not ok", " 68\n";

print ord_utf8("\xF4\x90\x80\x80") == 0x110000
   ? "ok" : "not ok", " 69\n";

print ord_utf8mod("\xF9\xA2\xA0\xA0\xA0") == 0x110000
   ? "ok" : "not ok", " 70\n";

print ord_utfcp1047("\xEE\x43\x41\x41\x41") == 0x110000
   ? "ok" : "not ok", " 71\n";

##### unicode 72..74

print ord_unicode("\x{1234567}") == 0x1234567
   ? "ok" : "not ok", " 72\n";

print ord_unicode("\x{12345678}") == 0x12345678
   ? "ok" : "not ok", " 73\n";

print ord_unicode("\x{7FFFFFFD}") == 0x7FFFFFFD
   ? "ok" : "not ok", " 74\n";

##### utf32le 75..77

print ord_utf32le("\x67\x45\x23\x01") == 0x1234567
   ? "ok" : "not ok", " 75\n";

print ord_utf32le("\x78\x56\x34\x12") == 0x12345678
   ? "ok" : "not ok", " 76\n";

print ord_utf32le("\xFF\xFF\xFF\x7F") == 0x7FFFFFFF
   ? "ok" : "not ok", " 77\n";

##### utf32be 78..80

print ord_utf32be("\x01\x23\x45\x67") == 0x1234567
   ? "ok" : "not ok", " 78\n";

print ord_utf32be("\x12\x34\x56\x78") == 0x12345678
   ? "ok" : "not ok", " 79\n";

print ord_utf32be("\x7F\xFF\xFF\xFF") == 0x7FFFFFFF
   ? "ok" : "not ok", " 80\n";

##### utf8 81..90

print ord_utf8("\xF4\xA3\x91\x96") == 0x123456
   ? "ok" : "not ok", " 81\n";

print ord_utf8("\xF8\x88\x80\x80\x80") == 0x200000
   ? "ok" : "not ok", " 82\n";

print ord_utf8("\xF9\x80\x80\x80\x80") == 0x1000000
   ? "ok" : "not ok", " 83\n";

print ord_utf8("\xF9\x88\xB4\x95\xA7") == 0x1234567
   ? "ok" : "not ok", " 84\n";

print ord_utf8("\xFB\xBF\xBF\xBF\xBF") == 0x3FFFFFF
   ? "ok" : "not ok", " 85\n";

print ord_utf8("\xFC\x84\x80\x80\x80\x80") == 0x4000000
   ? "ok" : "not ok", " 86\n";

print ord_utf8("\xFC\x8F\xBF\xBF\xBF\xBF") == 0xFFFFFFF
   ? "ok" : "not ok", " 87\n";

print ord_utf8("\xFC\x90\x80\x80\x80\x80") == 0x10000000
   ? "ok" : "not ok", " 88\n";

print ord_utf8("\xFC\x92\x8D\x85\x99\xB8") == 0x12345678
   ? "ok" : "not ok", " 89\n";

print ord_utf8("\xFD\xBF\xBF\xBF\xBF\xBF") == 0x7FFFFFFF
   ? "ok" : "not ok", " 90\n";

##### utf8mod 91..100

print ord_utf8mod("\xF8\xA8\xA0\xA0\xA0") == 0x40000
   ? "ok" : "not ok", " 91\n";

print ord_utf8mod("\xFB\xBF\xBF\xBF\xBF") == 0x3FFFFF
   ? "ok" : "not ok", " 92\n";

print ord_utf8mod("\xFC\xA4\xA0\xA0\xA0\xA0") == 0x400000
   ? "ok" : "not ok", " 93\n";

print ord_utf8mod("\xFC\xB2\xA6\xB1\xAB\xA7") == 0x1234567
   ? "ok" : "not ok", " 94\n";

print ord_utf8mod("\xFD\xBF\xBF\xBF\xBF\xBF") == 0x3FFFFFF
   ? "ok" : "not ok", " 95\n";

print ord_utf8mod("\xFE\xA2\xA0\xA0\xA0\xA0\xA0") == 0x4000000
   ? "ok" : "not ok", " 96\n";

print ord_utf8mod("\xFE\xA9\xA3\xA8\xB5\xB3\xB8") == 0x12345678
   ? "ok" : "not ok", " 97\n";

print ord_utf8mod("\xFE\xBF\xBF\xBF\xBF\xBF\xBF") == 0x3FFFFFFF
   ? "ok" : "not ok", " 98\n";

print ord_utf8mod("\xFF\xA0\xA0\xA0\xA0\xA0\xA0") == 0x40000000
   ? "ok" : "not ok", " 99\n";

print ord_utf8mod("\xFF\xBF\xBF\xBF\xBF\xBF\xBF") == 0x7FFFFFFF
   ? "ok" : "not ok", " 100\n";