Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
85 changes: 35 additions & 50 deletions compiler/test/stdlib/string.test.gr
Original file line number Diff line number Diff line change
Expand Up @@ -244,61 +244,46 @@ assert String.replaceAll("/", "\/", "/test/test/test/")
assert String.replaceAll(",", "|", "test,test,test") == "test|test|test"

assert String.replaceAll("MeowMeow", "Meow", "MeowMeowMeowMeow") == "MeowMeow"
let processBytes = b => {
let ret = Array.make(Bytes.length(b), 0us)
for (let mut i = 0; i < Bytes.length(b); i += 1) {
ret[i] = Bytes.getUint8(i, b)
}
ret
}

// Simple cases
// formatter-ignore
assert processBytes(String.encode("ab", String.UTF8)) == [> 0x61us, 0x62us]
// formatter-ignore
assert processBytes(String.encode("ab", String.UTF16_BE)) == [> 0x00us, 0x61us, 0x00us, 0x62us]
// formatter-ignore
assert processBytes(String.encode("ab", String.UTF16_LE)) == [> 0x61us, 0x00us, 0x62us, 0x00us]
// formatter-ignore
assert processBytes(String.encode("ab", String.UTF32_BE)) == [> 0x00us, 0x00us, 0x00us, 0x61us, 0x00us, 0x00us, 0x00us, 0x62us]
// formatter-ignore
assert processBytes(String.encode("ab", String.UTF32_LE)) == [> 0x61us, 0x00us, 0x00us, 0x00us, 0x62us, 0x00us, 0x00us, 0x00us]
assert String.encode("ab", String.UTF8) == b"\x61\x62"
assert String.encode("ab", String.UTF16_BE) == b"\x00\x61\x00\x62"
assert String.encode("ab", String.UTF16_LE) == b"\x61\x00\x62\x00"
assert String.encode("ab", String.UTF32_BE)
== b"\x00\x00\x00\x61\x00\x00\x00\x62"
assert String.encode("ab", String.UTF32_LE)
== b"\x61\x00\x00\x00\x62\x00\x00\x00"

// Surrogate pairs
// formatter-ignore
assert processBytes(String.encode("𐐷", String.UTF8)) == [> 0xF0us, 0x90us, 0x90us, 0xB7us]
// formatter-ignore
assert processBytes(String.encode("𐐷", String.UTF16_BE)) == [> 0xD8us, 0x01us, 0xDCus, 0x37us]
// formatter-ignore
assert processBytes(String.encode("𐐷", String.UTF16_LE)) == [> 0x01us, 0xD8us, 0x37us, 0xDCus]
// formatter-ignore
assert processBytes(String.encode("𐐷", String.UTF32_BE)) == [> 0x00us, 0x01us, 0x04us, 0x37us]
// formatter-ignore
assert processBytes(String.encode("𐐷", String.UTF32_LE)) == [> 0x37us, 0x04us, 0x01us, 0x00us]

// formatter-ignore
assert processBytes(String.encodeAt("𐐷", String.UTF16_BE, Bytes.make(12), 5)) == [> 0x00us, 0x00us, 0x00us, 0x00us, 0x00us, 0xD8us, 0x01us, 0xDCus, 0x37us, 0x00us, 0x00us, 0x00us]
assert String.encode("𐐷", String.UTF8) == b"\xF0\x90\x90\xB7"
assert String.encode("𐐷", String.UTF16_BE) == b"\xD8\x01\xDC\x37"
assert String.encode("𐐷", String.UTF16_LE) == b"\x01\xD8\x37\xDC"
assert String.encode("𐐷", String.UTF32_BE) == b"\x00\x01\x04\x37"
assert String.encode("𐐷", String.UTF32_LE) == b"\x37\x04\x01\x00"

assert String.encodeAt("𐐷", String.UTF16_BE, Bytes.make(12), 5)
== b"\x00\x00\x00\x00\x00\xD8\x01\xDC\x37\x00\x00\x00"
// test that BOM is prepended:
// formatter-ignore
assert processBytes(String.encode("𐐷", String.UTF8, includeBom=true)) == [> 0xEFus, 0xBBus, 0xBFus, 0xF0us, 0x90us, 0x90us, 0xB7us]
// formatter-ignore
assert processBytes(String.encode("𐐷", String.UTF16_BE, includeBom=true)) == [> 0xFEus, 0xFFus, 0xD8us, 0x01us, 0xDCus, 0x37us]
// formatter-ignore
assert processBytes(String.encode("𐐷", String.UTF16_LE, includeBom=true)) == [> 0xFFus, 0xFEus, 0x01us, 0xD8us, 0x37us, 0xDCus]
// formatter-ignore
assert processBytes(String.encode("𐐷", String.UTF32_BE, includeBom=true)) == [> 0x00us, 0x00us, 0xFEus, 0xFFus, 0x00us, 0x01us, 0x04us, 0x37us]
// formatter-ignore
assert processBytes(String.encode("𐐷", String.UTF32_LE, includeBom=true)) == [> 0xFFus, 0xFEus, 0x00us, 0x00us, 0x37us, 0x04us, 0x01us, 0x00us]

// formatter-ignore
assert processBytes(String.encode(emojis, String.UTF16_BE)) == [> 0x00us, 0x77us, 0x00us, 0x65us, 0x00us, 0x20us, 0x00us, 0x66us, 0x00us, 0x6fus, 0x00us, 0x75us, 0x00us, 0x6eus, 0x00us, 0x64us, 0x00us, 0x20us, 0x00us, 0x61us, 0x00us, 0x20us, 0x00us, 0x70us, 0x00us, 0x61us, 0x00us, 0x74us, 0x00us, 0x68us, 0xd8us, 0x3dus, 0xdeus, 0x80us, 0x00us, 0x20us, 0x00us, 0x74us, 0x00us, 0x6fus, 0x00us, 0x20us, 0x00us, 0x67us, 0x00us, 0x72us, 0x00us, 0x65us, 0x00us, 0x61us, 0x00us, 0x74us, 0x00us, 0x6eus, 0x00us, 0x65us, 0x00us, 0x73us, 0x00us, 0x73us, 0xd8us, 0x3cus, 0xdfus, 0xc5us, 0x00us, 0x62us, 0x00us, 0x75us, 0x00us, 0x74us, 0x00us, 0x20us, 0x00us, 0x74us, 0x00us, 0x68us, 0x00us, 0x65us, 0x00us, 0x20us, 0x00us, 0x67us, 0x00us, 0x72us, 0x00us, 0x69us, 0x00us, 0x6eus, 0x00us, 0x64us, 0x00us, 0x20us, 0x00us, 0x6eus, 0x00us, 0x65us, 0x00us, 0x76us, 0x00us, 0x65us, 0x00us, 0x72us, 0x00us, 0x20us, 0x00us, 0x71us, 0x00us, 0x75us, 0x00us, 0x69us, 0x00us, 0x74us, 0x00us, 0x73us, 0xd8us, 0x3dus, 0xdeus, 0x24us, 0xd8us, 0x3dus, 0xdcus, 0xaaus, 0xd8us, 0x3cus, 0xdfus, 0xfcus, 0x00us, 0x20us, 0x00us, 0x6bus, 0x00us, 0x65us, 0x00us, 0x65us, 0x00us, 0x70us, 0x00us, 0x20us, 0x00us, 0x6dus, 0x00us, 0x69us, 0x00us, 0x6cus, 0x00us, 0x6cus, 0x00us, 0x69us, 0x00us, 0x6eus, 0x00us, 0x67us, 0xd8us, 0x3dus, 0xdcus, 0xafus, 0xd8us, 0x3dus, 0xddus, 0x25us, 0xd8us, 0x3dus, 0xdeus, 0x08us]
// formatter-ignore
assert processBytes(String.encode(emojis, String.UTF16_LE)) == [> 0x77us, 0x00us, 0x65us, 0x00us, 0x20us, 0x00us, 0x66us, 0x00us, 0x6fus, 0x00us, 0x75us, 0x00us, 0x6eus, 0x00us, 0x64us, 0x00us, 0x20us, 0x00us, 0x61us, 0x00us, 0x20us, 0x00us, 0x70us, 0x00us, 0x61us, 0x00us, 0x74us, 0x00us, 0x68us, 0x00us, 0x3dus, 0xd8us, 0x80us, 0xdeus, 0x20us, 0x00us, 0x74us, 0x00us, 0x6fus, 0x00us, 0x20us, 0x00us, 0x67us, 0x00us, 0x72us, 0x00us, 0x65us, 0x00us, 0x61us, 0x00us, 0x74us, 0x00us, 0x6eus, 0x00us, 0x65us, 0x00us, 0x73us, 0x00us, 0x73us, 0x00us, 0x3cus, 0xd8us, 0xc5us, 0xdfus, 0x62us, 0x00us, 0x75us, 0x00us, 0x74us, 0x00us, 0x20us, 0x00us, 0x74us, 0x00us, 0x68us, 0x00us, 0x65us, 0x00us, 0x20us, 0x00us, 0x67us, 0x00us, 0x72us, 0x00us, 0x69us, 0x00us, 0x6eus, 0x00us, 0x64us, 0x00us, 0x20us, 0x00us, 0x6eus, 0x00us, 0x65us, 0x00us, 0x76us, 0x00us, 0x65us, 0x00us, 0x72us, 0x00us, 0x20us, 0x00us, 0x71us, 0x00us, 0x75us, 0x00us, 0x69us, 0x00us, 0x74us, 0x00us, 0x73us, 0x00us, 0x3dus, 0xd8us, 0x24us, 0xdeus, 0x3dus, 0xd8us, 0xaaus, 0xdcus, 0x3cus, 0xd8us, 0xfcus, 0xdfus, 0x20us, 0x00us, 0x6bus, 0x00us, 0x65us, 0x00us, 0x65us, 0x00us, 0x70us, 0x00us, 0x20us, 0x00us, 0x6dus, 0x00us, 0x69us, 0x00us, 0x6cus, 0x00us, 0x6cus, 0x00us, 0x69us, 0x00us, 0x6eus, 0x00us, 0x67us, 0x00us, 0x3dus, 0xd8us, 0xafus, 0xdcus, 0x3dus, 0xd8us, 0x25us, 0xddus, 0x3dus, 0xd8us, 0x08us, 0xdeus]

// formatter-ignore
assert processBytes(String.encode(emojis, String.UTF32_BE)) == [> 0x00us, 0x00us, 0x00us, 0x77us, 0x00us, 0x00us, 0x00us, 0x65us, 0x00us, 0x00us, 0x00us, 0x20us, 0x00us, 0x00us, 0x00us, 0x66us, 0x00us, 0x00us, 0x00us, 0x6fus, 0x00us, 0x00us, 0x00us, 0x75us, 0x00us, 0x00us, 0x00us, 0x6eus, 0x00us, 0x00us, 0x00us, 0x64us, 0x00us, 0x00us, 0x00us, 0x20us, 0x00us, 0x00us, 0x00us, 0x61us, 0x00us, 0x00us, 0x00us, 0x20us, 0x00us, 0x00us, 0x00us, 0x70us, 0x00us, 0x00us, 0x00us, 0x61us, 0x00us, 0x00us, 0x00us, 0x74us, 0x00us, 0x00us, 0x00us, 0x68us, 0x00us, 0x01us, 0xf6us, 0x80us, 0x00us, 0x00us, 0x00us, 0x20us, 0x00us, 0x00us, 0x00us, 0x74us, 0x00us, 0x00us, 0x00us, 0x6fus, 0x00us, 0x00us, 0x00us, 0x20us, 0x00us, 0x00us, 0x00us, 0x67us, 0x00us, 0x00us, 0x00us, 0x72us, 0x00us, 0x00us, 0x00us, 0x65us, 0x00us, 0x00us, 0x00us, 0x61us, 0x00us, 0x00us, 0x00us, 0x74us, 0x00us, 0x00us, 0x00us, 0x6eus, 0x00us, 0x00us, 0x00us, 0x65us, 0x00us, 0x00us, 0x00us, 0x73us, 0x00us, 0x00us, 0x00us, 0x73us, 0x00us, 0x01us, 0xf3us, 0xc5us, 0x00us, 0x00us, 0x00us, 0x62us, 0x00us, 0x00us, 0x00us, 0x75us, 0x00us, 0x00us, 0x00us, 0x74us, 0x00us, 0x00us, 0x00us, 0x20us, 0x00us, 0x00us, 0x00us, 0x74us, 0x00us, 0x00us, 0x00us, 0x68us, 0x00us, 0x00us, 0x00us, 0x65us, 0x00us, 0x00us, 0x00us, 0x20us, 0x00us, 0x00us, 0x00us, 0x67us, 0x00us, 0x00us, 0x00us, 0x72us, 0x00us, 0x00us, 0x00us, 0x69us, 0x00us, 0x00us, 0x00us, 0x6eus, 0x00us, 0x00us, 0x00us, 0x64us, 0x00us, 0x00us, 0x00us, 0x20us, 0x00us, 0x00us, 0x00us, 0x6eus, 0x00us, 0x00us, 0x00us, 0x65us, 0x00us, 0x00us, 0x00us, 0x76us, 0x00us, 0x00us, 0x00us, 0x65us, 0x00us, 0x00us, 0x00us, 0x72us, 0x00us, 0x00us, 0x00us, 0x20us, 0x00us, 0x00us, 0x00us, 0x71us, 0x00us, 0x00us, 0x00us, 0x75us, 0x00us, 0x00us, 0x00us, 0x69us, 0x00us, 0x00us, 0x00us, 0x74us, 0x00us, 0x00us, 0x00us, 0x73us, 0x00us, 0x01us, 0xf6us, 0x24us, 0x00us, 0x01us, 0xf4us, 0xaaus, 0x00us, 0x01us, 0xf3us, 0xfcus, 0x00us, 0x00us, 0x00us, 0x20us, 0x00us, 0x00us, 0x00us, 0x6bus, 0x00us, 0x00us, 0x00us, 0x65us, 0x00us, 0x00us, 0x00us, 0x65us, 0x00us, 0x00us, 0x00us, 0x70us, 0x00us, 0x00us, 0x00us, 0x20us, 0x00us, 0x00us, 0x00us, 0x6dus, 0x00us, 0x00us, 0x00us, 0x69us, 0x00us, 0x00us, 0x00us, 0x6cus, 0x00us, 0x00us, 0x00us, 0x6cus, 0x00us, 0x00us, 0x00us, 0x69us, 0x00us, 0x00us, 0x00us, 0x6eus, 0x00us, 0x00us, 0x00us, 0x67us, 0x00us, 0x01us, 0xf4us, 0xafus, 0x00us, 0x01us, 0xf5us, 0x25us, 0x00us, 0x01us, 0xf6us, 0x08us]
// formatter-ignore
assert processBytes(String.encode(emojis, String.UTF32_LE)) == [> 0x77us, 0x00us, 0x00us, 0x00us, 0x65us, 0x00us, 0x00us, 0x00us, 0x20us, 0x00us, 0x00us, 0x00us, 0x66us, 0x00us, 0x00us, 0x00us, 0x6fus, 0x00us, 0x00us, 0x00us, 0x75us, 0x00us, 0x00us, 0x00us, 0x6eus, 0x00us, 0x00us, 0x00us, 0x64us, 0x00us, 0x00us, 0x00us, 0x20us, 0x00us, 0x00us, 0x00us, 0x61us, 0x00us, 0x00us, 0x00us, 0x20us, 0x00us, 0x00us, 0x00us, 0x70us, 0x00us, 0x00us, 0x00us, 0x61us, 0x00us, 0x00us, 0x00us, 0x74us, 0x00us, 0x00us, 0x00us, 0x68us, 0x00us, 0x00us, 0x00us, 0x80us, 0xf6us, 0x01us, 0x00us, 0x20us, 0x00us, 0x00us, 0x00us, 0x74us, 0x00us, 0x00us, 0x00us, 0x6fus, 0x00us, 0x00us, 0x00us, 0x20us, 0x00us, 0x00us, 0x00us, 0x67us, 0x00us, 0x00us, 0x00us, 0x72us, 0x00us, 0x00us, 0x00us, 0x65us, 0x00us, 0x00us, 0x00us, 0x61us, 0x00us, 0x00us, 0x00us, 0x74us, 0x00us, 0x00us, 0x00us, 0x6eus, 0x00us, 0x00us, 0x00us, 0x65us, 0x00us, 0x00us, 0x00us, 0x73us, 0x00us, 0x00us, 0x00us, 0x73us, 0x00us, 0x00us, 0x00us, 0xc5us, 0xf3us, 0x01us, 0x00us, 0x62us, 0x00us, 0x00us, 0x00us, 0x75us, 0x00us, 0x00us, 0x00us, 0x74us, 0x00us, 0x00us, 0x00us, 0x20us, 0x00us, 0x00us, 0x00us, 0x74us, 0x00us, 0x00us, 0x00us, 0x68us, 0x00us, 0x00us, 0x00us, 0x65us, 0x00us, 0x00us, 0x00us, 0x20us, 0x00us, 0x00us, 0x00us, 0x67us, 0x00us, 0x00us, 0x00us, 0x72us, 0x00us, 0x00us, 0x00us, 0x69us, 0x00us, 0x00us, 0x00us, 0x6eus, 0x00us, 0x00us, 0x00us, 0x64us, 0x00us, 0x00us, 0x00us, 0x20us, 0x00us, 0x00us, 0x00us, 0x6eus, 0x00us, 0x00us, 0x00us, 0x65us, 0x00us, 0x00us, 0x00us, 0x76us, 0x00us, 0x00us, 0x00us, 0x65us, 0x00us, 0x00us, 0x00us, 0x72us, 0x00us, 0x00us, 0x00us, 0x20us, 0x00us, 0x00us, 0x00us, 0x71us, 0x00us, 0x00us, 0x00us, 0x75us, 0x00us, 0x00us, 0x00us, 0x69us, 0x00us, 0x00us, 0x00us, 0x74us, 0x00us, 0x00us, 0x00us, 0x73us, 0x00us, 0x00us, 0x00us, 0x24us, 0xf6us, 0x01us, 0x00us, 0xaaus, 0xf4us, 0x01us, 0x00us, 0xfcus, 0xf3us, 0x01us, 0x00us, 0x20us, 0x00us, 0x00us, 0x00us, 0x6bus, 0x00us, 0x00us, 0x00us, 0x65us, 0x00us, 0x00us, 0x00us, 0x65us, 0x00us, 0x00us, 0x00us, 0x70us, 0x00us, 0x00us, 0x00us, 0x20us, 0x00us, 0x00us, 0x00us, 0x6dus, 0x00us, 0x00us, 0x00us, 0x69us, 0x00us, 0x00us, 0x00us, 0x6cus, 0x00us, 0x00us, 0x00us, 0x6cus, 0x00us, 0x00us, 0x00us, 0x69us, 0x00us, 0x00us, 0x00us, 0x6eus, 0x00us, 0x00us, 0x00us, 0x67us, 0x00us, 0x00us, 0x00us, 0xafus, 0xf4us, 0x01us, 0x00us, 0x25us, 0xf5us, 0x01us, 0x00us, 0x08us, 0xf6us, 0x01us, 0x00us]
assert String.encode("𐐷", String.UTF8, includeBom=true)
== b"\xEF\xBB\xBF\xF0\x90\x90\xB7"
assert String.encode("𐐷", String.UTF16_BE, includeBom=true)
== b"\xFE\xFF\xD8\x01\xDC\x37"
assert String.encode("𐐷", String.UTF16_LE, includeBom=true)
== b"\xFF\xFE\x01\xD8\x37\xDC"
assert String.encode("𐐷", String.UTF32_BE, includeBom=true)
== b"\x00\x00\xFE\xFF\x00\x01\x04\x37"
assert String.encode("𐐷", String.UTF32_LE, includeBom=true)
== b"\xFF\xFE\x00\x00\x37\x04\x01\x00"

assert String.encode(emojis, String.UTF16_BE)
== b"\x00\x77\x00\x65\x00\x20\x00\x66\x00\x6f\x00\x75\x00\x6e\x00\x64\x00\x20\x00\x61\x00\x20\x00\x70\x00\x61\x00\x74\x00\x68\xd8\x3d\xde\x80\x00\x20\x00\x74\x00\x6f\x00\x20\x00\x67\x00\x72\x00\x65\x00\x61\x00\x74\x00\x6e\x00\x65\x00\x73\x00\x73\xd8\x3c\xdf\xc5\x00\x62\x00\x75\x00\x74\x00\x20\x00\x74\x00\x68\x00\x65\x00\x20\x00\x67\x00\x72\x00\x69\x00\x6e\x00\x64\x00\x20\x00\x6e\x00\x65\x00\x76\x00\x65\x00\x72\x00\x20\x00\x71\x00\x75\x00\x69\x00\x74\x00\x73\xd8\x3d\xde\x24\xd8\x3d\xdc\xaa\xd8\x3c\xdf\xfc\x00\x20\x00\x6b\x00\x65\x00\x65\x00\x70\x00\x20\x00\x6d\x00\x69\x00\x6c\x00\x6c\x00\x69\x00\x6e\x00\x67\xd8\x3d\xdc\xaf\xd8\x3d\xdd\x25\xd8\x3d\xde\x08"
assert String.encode(emojis, String.UTF16_LE)
== b"\x77\x00\x65\x00\x20\x00\x66\x00\x6f\x00\x75\x00\x6e\x00\x64\x00\x20\x00\x61\x00\x20\x00\x70\x00\x61\x00\x74\x00\x68\x00\x3d\xd8\x80\xde\x20\x00\x74\x00\x6f\x00\x20\x00\x67\x00\x72\x00\x65\x00\x61\x00\x74\x00\x6e\x00\x65\x00\x73\x00\x73\x00\x3c\xd8\xc5\xdf\x62\x00\x75\x00\x74\x00\x20\x00\x74\x00\x68\x00\x65\x00\x20\x00\x67\x00\x72\x00\x69\x00\x6e\x00\x64\x00\x20\x00\x6e\x00\x65\x00\x76\x00\x65\x00\x72\x00\x20\x00\x71\x00\x75\x00\x69\x00\x74\x00\x73\x00\x3d\xd8\x24\xde\x3d\xd8\xaa\xdc\x3c\xd8\xfc\xdf\x20\x00\x6b\x00\x65\x00\x65\x00\x70\x00\x20\x00\x6d\x00\x69\x00\x6c\x00\x6c\x00\x69\x00\x6e\x00\x67\x00\x3d\xd8\xaf\xdc\x3d\xd8\x25\xdd\x3d\xd8\x08\xde"

assert String.encode(emojis, String.UTF32_BE)
== b"\x00\x00\x00\x77\x00\x00\x00\x65\x00\x00\x00\x20\x00\x00\x00\x66\x00\x00\x00\x6f\x00\x00\x00\x75\x00\x00\x00\x6e\x00\x00\x00\x64\x00\x00\x00\x20\x00\x00\x00\x61\x00\x00\x00\x20\x00\x00\x00\x70\x00\x00\x00\x61\x00\x00\x00\x74\x00\x00\x00\x68\x00\x01\xf6\x80\x00\x00\x00\x20\x00\x00\x00\x74\x00\x00\x00\x6f\x00\x00\x00\x20\x00\x00\x00\x67\x00\x00\x00\x72\x00\x00\x00\x65\x00\x00\x00\x61\x00\x00\x00\x74\x00\x00\x00\x6e\x00\x00\x00\x65\x00\x00\x00\x73\x00\x00\x00\x73\x00\x01\xf3\xc5\x00\x00\x00\x62\x00\x00\x00\x75\x00\x00\x00\x74\x00\x00\x00\x20\x00\x00\x00\x74\x00\x00\x00\x68\x00\x00\x00\x65\x00\x00\x00\x20\x00\x00\x00\x67\x00\x00\x00\x72\x00\x00\x00\x69\x00\x00\x00\x6e\x00\x00\x00\x64\x00\x00\x00\x20\x00\x00\x00\x6e\x00\x00\x00\x65\x00\x00\x00\x76\x00\x00\x00\x65\x00\x00\x00\x72\x00\x00\x00\x20\x00\x00\x00\x71\x00\x00\x00\x75\x00\x00\x00\x69\x00\x00\x00\x74\x00\x00\x00\x73\x00\x01\xf6\x24\x00\x01\xf4\xaa\x00\x01\xf3\xfc\x00\x00\x00\x20\x00\x00\x00\x6b\x00\x00\x00\x65\x00\x00\x00\x65\x00\x00\x00\x70\x00\x00\x00\x20\x00\x00\x00\x6d\x00\x00\x00\x69\x00\x00\x00\x6c\x00\x00\x00\x6c\x00\x00\x00\x69\x00\x00\x00\x6e\x00\x00\x00\x67\x00\x01\xf4\xaf\x00\x01\xf5\x25\x00\x01\xf6\x08"
assert String.encode(emojis, String.UTF32_LE)
== b"\x77\x00\x00\x00\x65\x00\x00\x00\x20\x00\x00\x00\x66\x00\x00\x00\x6f\x00\x00\x00\x75\x00\x00\x00\x6e\x00\x00\x00\x64\x00\x00\x00\x20\x00\x00\x00\x61\x00\x00\x00\x20\x00\x00\x00\x70\x00\x00\x00\x61\x00\x00\x00\x74\x00\x00\x00\x68\x00\x00\x00\x80\xf6\x01\x00\x20\x00\x00\x00\x74\x00\x00\x00\x6f\x00\x00\x00\x20\x00\x00\x00\x67\x00\x00\x00\x72\x00\x00\x00\x65\x00\x00\x00\x61\x00\x00\x00\x74\x00\x00\x00\x6e\x00\x00\x00\x65\x00\x00\x00\x73\x00\x00\x00\x73\x00\x00\x00\xc5\xf3\x01\x00\x62\x00\x00\x00\x75\x00\x00\x00\x74\x00\x00\x00\x20\x00\x00\x00\x74\x00\x00\x00\x68\x00\x00\x00\x65\x00\x00\x00\x20\x00\x00\x00\x67\x00\x00\x00\x72\x00\x00\x00\x69\x00\x00\x00\x6e\x00\x00\x00\x64\x00\x00\x00\x20\x00\x00\x00\x6e\x00\x00\x00\x65\x00\x00\x00\x76\x00\x00\x00\x65\x00\x00\x00\x72\x00\x00\x00\x20\x00\x00\x00\x71\x00\x00\x00\x75\x00\x00\x00\x69\x00\x00\x00\x74\x00\x00\x00\x73\x00\x00\x00\x24\xf6\x01\x00\xaa\xf4\x01\x00\xfc\xf3\x01\x00\x20\x00\x00\x00\x6b\x00\x00\x00\x65\x00\x00\x00\x65\x00\x00\x00\x70\x00\x00\x00\x20\x00\x00\x00\x6d\x00\x00\x00\x69\x00\x00\x00\x6c\x00\x00\x00\x6c\x00\x00\x00\x69\x00\x00\x00\x6e\x00\x00\x00\x67\x00\x00\x00\xaf\xf4\x01\x00\x25\xf5\x01\x00\x08\xf6\x01\x00"

// round-trip tests
assert String.decode(String.encode("foo", String.UTF8), String.UTF8) == "foo"
Expand Down