import "allocator/arena"; var str = "𐐷hi𤭢"; // -> f0 90 90 b7 68 69 f0 a4 ad a2 [00] function testUTF8Length(): void { assert(UTF8.length(str) == 10); assert(UTF8.length(str, true) == 11); } testUTF8Length(); function testUTF8Encode(): void { var buf = UTF8.encode(str); var ptr = changetype(buf); assert(buf.byteLength == 10); assert(load(ptr, 0) == 0xf0); assert(load(ptr, 1) == 0x90); assert(load(ptr, 2) == 0x90); assert(load(ptr, 3) == 0xb7); assert(load(ptr, 4) == 0x68); assert(load(ptr, 5) == 0x69); assert(load(ptr, 6) == 0xf0); assert(load(ptr, 7) == 0xa4); assert(load(ptr, 8) == 0xad); assert(load(ptr, 9) == 0xa2); } testUTF8Encode(); function testUTF8EncodeDelimited(): void { var buf = UTF8.encode(str, true); var ptr = changetype(buf); assert(buf.byteLength == 11); assert(load(ptr, 0) == 0xf0); assert(load(ptr, 1) == 0x90); assert(load(ptr, 2) == 0x90); assert(load(ptr, 3) == 0xb7); assert(load(ptr, 4) == 0x68); assert(load(ptr, 5) == 0x69); assert(load(ptr, 6) == 0xf0); assert(load(ptr, 7) == 0xa4); assert(load(ptr, 8) == 0xad); assert(load(ptr, 9) == 0xa2); assert(load(ptr, 10) == 0x00); } testUTF8EncodeDelimited(); function testUTF8Decode(): void { var buf = UTF8.encode(str); assert(UTF8.decode(buf) == str); } testUTF8Decode(); function testUTF8DecodeDelimited(): void { var buf = UTF8.encode(str, true); assert(UTF8.decode(buf, true) == str); } testUTF8DecodeDelimited(); function testUTF8Raw(): void { var buf = changetype(UTF8.encode(str)); assert(UTF8.decodeRaw(buf, 0) == ""); assert(UTF8.decodeRaw(buf, UTF8.length(str)) == str); assert(UTF8.decodeRaw(buf, 4) == "𐐷"); assert(UTF8.decodeRaw(buf + 4, 2) == "hi"); assert(UTF8.decodeRaw(buf + 6, 4) == "𤭢"); assert(UTF8.decodeRaw(buf + 10, 0) == ""); store(buf, 0, 10); // don't try this at home assert(UTF8.decodeRawDelimited(buf + 4) == "hi𤭢"); assert(UTF8.decodeRawDelimited(buf + 6) == "𤭢"); assert(UTF8.decodeRawDelimited(buf + 10) == ""); } testUTF8Raw();