import "allocator/arena"; var str = "𐐷hi𤭢"; // -> f0 90 90 b7 68 69 f0 a4 ad a2 [00] function testUTF8Length(): void { assert(UTF8Encoder.byteLength(str) == 10); assert(UTF8Encoder.byteLength(str, true) == 11); } testUTF8Length(); function testUTF8Encode(): void { var buf = UTF8Encoder.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 testUTF8EncodeNullTerminated(): void { var buf = UTF8Encoder.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); } testUTF8EncodeNullTerminated(); function testUTF8Decode(): void { var buf = UTF8Encoder.encode(str); assert(UTF8Decoder.decode(buf) == str); } testUTF8Decode(); function testUTF8DecodeNullTerminated(): void { var buf = UTF8Encoder.encode(str, true); assert(UTF8Decoder.decode(buf, true) == str); } testUTF8DecodeNullTerminated(); function testUTF8DecodeUnsafe(): void { var buf = changetype(UTF8Encoder.encode(str)); assert(UTF8Decoder.decodeUnsafe(buf, 0) == ""); assert(UTF8Decoder.decodeUnsafe(buf, UTF8Encoder.byteLength(str)) == str); assert(UTF8Decoder.decodeUnsafe(buf, 4) == "𐐷"); assert(UTF8Decoder.decodeUnsafe(buf + 4, 2) == "hi"); assert(UTF8Decoder.decodeUnsafe(buf + 6, 4) == "𤭢"); assert(UTF8Decoder.decodeUnsafe(buf + 10, 0) == ""); store(buf, 0, 10); // don't try this at home assert(UTF8Decoder.decodeNullTerminatedUnsafe(buf + 4) == "hi𤭢"); assert(UTF8Decoder.decodeNullTerminatedUnsafe(buf + 6) == "𤭢"); assert(UTF8Decoder.decodeNullTerminatedUnsafe(buf + 10) == ""); } testUTF8DecodeUnsafe();