blob: 4237473d73efe69de8f883376177e0404641fc2a [file]
// TARGET_BACKEND: WASM
// WITH_STDLIB
@JsFun("""(s) => s.length""")
external fun jsLength(s: String): Int
@JsFun("""(s, index) => s.charCodeAt(index)""")
external fun jsCharCodeAt(s: String, index: Int): Int
private fun check(actual: String, expected: String, label: String): String? =
if (actual == expected) null else "Fail $label: <$actual>"
fun box(): String {
val chars = charArrayOf('a', '\uD83D', '\uDE80', '\u0000', 'e', '\u0301', 'z')
val s = chars.concatToString()
check(s, "a\uD83D\uDE80\u0000e\u0301z", "concatToString")?.let { return it }
if (s.length != chars.size) return "Fail Kotlin length: ${s.length}"
if (jsLength(s) != chars.size) return "Fail JS length: ${jsLength(s)}"
for (index in chars.indices) {
val actual = jsCharCodeAt(s, index)
if (actual != chars[index].code) return "Fail charCodeAt $index: $actual"
}
val destination = CharArray(8) { '_' }
val copied = s.toCharArray(destination, 1, 1, 6).concatToString()
val expectedCopy = charArrayOf('_', '\uD83D', '\uDE80', '\u0000', 'e', '\u0301', '_', '_').concatToString()
check(copied, expectedCopy, "toCharArray subrange")?.let { return it }
return "OK"
}