tests: Move StringBuilder tests into single file
This commit is contained in:
@@ -1080,16 +1080,6 @@ task string_builder0(type: RunKonanTest) {
|
||||
source = "runtime/text/string_builder0.kt"
|
||||
}
|
||||
|
||||
task string_builder_reverse(type: RunKonanTest) {
|
||||
goldValue = "OK\n"
|
||||
source = "runtime/text/string_builder_reverse.kt"
|
||||
}
|
||||
|
||||
task string_builder_insert(type: RunKonanTest) {
|
||||
goldValue = "OK\n"
|
||||
source = "runtime/text/string_builder_insert.kt"
|
||||
}
|
||||
|
||||
task string0(type: RunKonanTest) {
|
||||
goldValue = "true\ntrue\nПРИВЕТ\nпривет\nПока\ntrue\n"
|
||||
source = "runtime/text/string0.kt"
|
||||
|
||||
@@ -1,23 +1,237 @@
|
||||
// Utils ====================================================================================================
|
||||
fun assertTrue(cond: Boolean) {
|
||||
if (!cond)
|
||||
println("FAIL")
|
||||
throw AssertionError("Condition expected to be true")
|
||||
}
|
||||
|
||||
fun assertFalse(cond: Boolean) {
|
||||
if (cond)
|
||||
println("FAIL")
|
||||
throw AssertionError("Condition expected to be false")
|
||||
}
|
||||
|
||||
fun assertEquals(value1: String, value2: String) {
|
||||
if (value1 != value2)
|
||||
println("FAIL: '" + value1 + "' != '" + value2 + "'")
|
||||
throw AssertionError("FAIL: '" + value1 + "' != '" + value2 + "'")
|
||||
}
|
||||
|
||||
fun assertEquals(value1: Int, value2: Int) {
|
||||
if (value1 != value2)
|
||||
println("FAIL" + value1.toString() + " != " + value2.toString())
|
||||
throw AssertionError("FAIL" + value1.toString() + " != " + value2.toString())
|
||||
}
|
||||
|
||||
fun assertEquals(builder: StringBuilder, content: String) = assertEquals(builder.toString(), content)
|
||||
|
||||
// IndexOutOfBoundsException
|
||||
fun assertException(body: () -> Unit) {
|
||||
try {
|
||||
body()
|
||||
throw AssertionError ("Test failed: no IndexOutOfBoundsException on wrong indices")
|
||||
} catch (e: IndexOutOfBoundsException) {}
|
||||
}
|
||||
|
||||
fun String.toCharArray(): CharArray = CharArray(length) { i -> this[i] }
|
||||
|
||||
// Insert ===================================================================================================
|
||||
fun testInsertString(initial: String, index: Int, toInsert: String, expected: String) {
|
||||
assertEquals(StringBuilder(initial).insert(index, toInsert), expected)
|
||||
assertEquals(StringBuilder(initial).insert(index, toInsert.toCharArray()), expected)
|
||||
assertEquals(StringBuilder(initial).insert(index, toInsert as CharSequence), expected)
|
||||
}
|
||||
|
||||
fun testInsertStringException(initial: String, index: Int, toInsert: String) {
|
||||
assertException { StringBuilder(initial).insert(index, toInsert) }
|
||||
assertException { StringBuilder(initial).insert(index, toInsert.toCharArray()) }
|
||||
assertException { StringBuilder(initial).insert(index, toInsert as CharSequence) }
|
||||
}
|
||||
|
||||
fun testInsertSingle(value: Byte) {
|
||||
assertEquals(StringBuilder("abcd").insert(0, value), value.toString() + "abcd")
|
||||
assertEquals(StringBuilder("abcd").insert(4, value), "abcd" + value.toString())
|
||||
assertEquals(StringBuilder("abcd").insert(2, value), "ab" + value.toString() + "cd")
|
||||
assertEquals(StringBuilder("").insert(0, value), value.toString())
|
||||
}
|
||||
|
||||
fun testInsertSingle(value: Short) {
|
||||
assertEquals(StringBuilder("abcd").insert(0, value), value.toString() + "abcd")
|
||||
assertEquals(StringBuilder("abcd").insert(4, value), "abcd" + value.toString())
|
||||
assertEquals(StringBuilder("abcd").insert(2, value), "ab" + value.toString() + "cd")
|
||||
assertEquals(StringBuilder("").insert(0, value), value.toString())
|
||||
}
|
||||
|
||||
fun testInsertSingle(value: Int) {
|
||||
assertEquals(StringBuilder("abcd").insert(0, value), value.toString() + "abcd")
|
||||
assertEquals(StringBuilder("abcd").insert(4, value), "abcd" + value.toString())
|
||||
assertEquals(StringBuilder("abcd").insert(2, value), "ab" + value.toString() + "cd")
|
||||
assertEquals(StringBuilder("").insert(0, value), value.toString())
|
||||
}
|
||||
|
||||
fun testInsertSingle(value: Long) {
|
||||
assertEquals(StringBuilder("abcd").insert(0, value), value.toString() + "abcd")
|
||||
assertEquals(StringBuilder("abcd").insert(4, value), "abcd" + value.toString())
|
||||
assertEquals(StringBuilder("abcd").insert(2, value), "ab" + value.toString() + "cd")
|
||||
assertEquals(StringBuilder("").insert(0, value), value.toString())
|
||||
}
|
||||
|
||||
fun testInsertSingle(value: Float) {
|
||||
assertEquals(StringBuilder("abcd").insert(0, value), value.toString() + "abcd")
|
||||
assertEquals(StringBuilder("abcd").insert(4, value), "abcd" + value.toString())
|
||||
assertEquals(StringBuilder("abcd").insert(2, value), "ab" + value.toString() + "cd")
|
||||
assertEquals(StringBuilder("").insert(0, value), value.toString())
|
||||
}
|
||||
|
||||
fun testInsertSingle(value: Double) {
|
||||
assertEquals(StringBuilder("abcd").insert(0, value), value.toString() + "abcd")
|
||||
assertEquals(StringBuilder("abcd").insert(4, value), "abcd" + value.toString())
|
||||
assertEquals(StringBuilder("abcd").insert(2, value), "ab" + value.toString() + "cd")
|
||||
assertEquals(StringBuilder("").insert(0, value), value.toString())
|
||||
}
|
||||
|
||||
fun testInsertSingle(value: Any?) {
|
||||
assertEquals(StringBuilder("abcd").insert(0, value), value.toString() + "abcd")
|
||||
assertEquals(StringBuilder("abcd").insert(4, value), "abcd" + value.toString())
|
||||
assertEquals(StringBuilder("abcd").insert(2, value), "ab" + value.toString() + "cd")
|
||||
assertEquals(StringBuilder("").insert(0, value), value.toString())
|
||||
}
|
||||
|
||||
fun testInsertSingle(value: Char) {
|
||||
assertEquals(StringBuilder("abcd").insert(0, value), value.toString() + "abcd")
|
||||
assertEquals(StringBuilder("abcd").insert(4, value), "abcd" + value.toString())
|
||||
assertEquals(StringBuilder("abcd").insert(2, value), "ab" + value.toString() + "cd")
|
||||
assertEquals(StringBuilder("").insert(0, value), value.toString())
|
||||
}
|
||||
|
||||
fun testInsert() {
|
||||
// String/CharSequence/CharArray
|
||||
testInsertString("abcd", 0, "12", "12abcd")
|
||||
testInsertString("abcd", 4, "12", "abcd12")
|
||||
testInsertString("abcd", 2, "12", "ab12cd")
|
||||
testInsertString("", 0, "12", "12")
|
||||
testInsertStringException("a", -1, "1")
|
||||
testInsertStringException("a", 2, "1")
|
||||
|
||||
// Subsequence of CharSequence
|
||||
// Insert in the beginning
|
||||
assertEquals(StringBuilder("abcd").insert(0, "1234", 0, 0), "abcd") // 0 symbols
|
||||
assertEquals(StringBuilder("abcd").insert(0, "1234", 0, 1), "1abcd") // 1 symbol
|
||||
assertEquals(StringBuilder("abcd").insert(0, "1234", 1, 3), "23abcd") // 2 symbols
|
||||
|
||||
// Insert in the end
|
||||
assertEquals(StringBuilder("abcd").insert(4, "1234", 0, 0), "abcd")
|
||||
assertEquals(StringBuilder("abcd").insert(4, "1234", 0, 1), "abcd1")
|
||||
assertEquals(StringBuilder("abcd").insert(4, "1234", 1, 3), "abcd23")
|
||||
|
||||
// Insert in the middle
|
||||
assertEquals(StringBuilder("abcd").insert(2, "1234", 0, 0), "abcd")
|
||||
assertEquals(StringBuilder("abcd").insert(2, "1234", 0, 1), "ab1cd")
|
||||
assertEquals(StringBuilder("abcd").insert(2, "1234", 1, 3), "ab23cd")
|
||||
|
||||
// Incorrect indices
|
||||
assertException { StringBuilder("a").insert(-1, "1", 0, 0) }
|
||||
assertException { StringBuilder("a").insert(2, "1", 0, 0) }
|
||||
assertException { StringBuilder("a").insert(1, "1", -1, 0) }
|
||||
assertException { StringBuilder("a").insert(1, "1", 0, 2) }
|
||||
assertException { StringBuilder("a").insert(1, "123", 2, 0) }
|
||||
|
||||
|
||||
// Other types
|
||||
testInsertSingle(true)
|
||||
testInsertSingle(42.toByte())
|
||||
testInsertSingle(42.toShort())
|
||||
testInsertSingle(42.toInt())
|
||||
testInsertSingle(42.toLong())
|
||||
testInsertSingle(42.2.toFloat())
|
||||
testInsertSingle(42.2.toDouble())
|
||||
testInsertSingle(object {
|
||||
override fun toString(): String {
|
||||
return "Object"
|
||||
}
|
||||
})
|
||||
testInsertSingle('a')
|
||||
|
||||
}
|
||||
|
||||
// Reverse ==================================================================================================
|
||||
fun testReverse(original: String, reversed: String, reversedBack: String) {
|
||||
assertEquals(StringBuilder(original).reverse(), reversed)
|
||||
assertEquals(StringBuilder(reversed).reverse(), reversedBack)
|
||||
}
|
||||
|
||||
fun testReverse() {
|
||||
var builder = StringBuilder("123456")
|
||||
assertTrue(builder === builder.reverse())
|
||||
assertEquals(builder, "654321")
|
||||
|
||||
builder.length = 1
|
||||
assertEquals(builder, "6")
|
||||
|
||||
builder.length = 0
|
||||
assertEquals(builder, "")
|
||||
|
||||
var str: String = "a"
|
||||
testReverse(str, str, str)
|
||||
|
||||
str = "ab"
|
||||
testReverse(str, "ba", str)
|
||||
|
||||
str = "abcdef"
|
||||
testReverse(str, "fedcba", str)
|
||||
|
||||
str = "abcdefg"
|
||||
testReverse(str, "gfedcba", str)
|
||||
|
||||
str = "\ud800\udc00"
|
||||
testReverse(str, str, str)
|
||||
|
||||
str = "\udc00\ud800"
|
||||
testReverse(str, "\ud800\udc00", "\ud800\udc00")
|
||||
|
||||
str = "a\ud800\udc00"
|
||||
testReverse(str, "\ud800\udc00a", str)
|
||||
|
||||
str = "ab\ud800\udc00"
|
||||
testReverse(str, "\ud800\udc00ba", str)
|
||||
|
||||
str = "abc\ud800\udc00"
|
||||
testReverse(str, "\ud800\udc00cba", str)
|
||||
|
||||
str = "\ud800\udc00\udc01\ud801\ud802\udc02"
|
||||
testReverse(str, "\ud802\udc02\ud801\udc01\ud800\udc00",
|
||||
"\ud800\udc00\ud801\udc01\ud802\udc02")
|
||||
|
||||
str = "\ud800\udc00\ud801\udc01\ud802\udc02"
|
||||
testReverse(str, "\ud802\udc02\ud801\udc01\ud800\udc00", str)
|
||||
|
||||
str = "\ud800\udc00\udc01\ud801a"
|
||||
testReverse(str, "a\ud801\udc01\ud800\udc00",
|
||||
"\ud800\udc00\ud801\udc01a")
|
||||
|
||||
str = "a\ud800\udc00\ud801\udc01"
|
||||
testReverse(str, "\ud801\udc01\ud800\udc00a", str)
|
||||
|
||||
str = "\ud800\udc00\udc01\ud801ab"
|
||||
testReverse(str, "ba\ud801\udc01\ud800\udc00",
|
||||
"\ud800\udc00\ud801\udc01ab")
|
||||
|
||||
str = "ab\ud800\udc00\ud801\udc01"
|
||||
testReverse(str, "\ud801\udc01\ud800\udc00ba", str)
|
||||
|
||||
str = "\ud800\udc00\ud801\udc01"
|
||||
testReverse(str, "\ud801\udc01\ud800\udc00", str)
|
||||
|
||||
str = "a\ud800\udc00z\ud801\udc01"
|
||||
testReverse(str, "\ud801\udc01z\ud800\udc00a", str)
|
||||
|
||||
str = "a\ud800\udc00bz\ud801\udc01"
|
||||
testReverse(str, "\ud801\udc01zb\ud800\udc00a", str)
|
||||
|
||||
str = "abc\ud802\udc02\ud801\udc01\ud800\udc00"
|
||||
testReverse(str, "\ud800\udc00\ud801\udc01\ud802\udc02cba", str)
|
||||
|
||||
str = "abcd\ud802\udc02\ud801\udc01\ud800\udc00"
|
||||
testReverse(str, "\ud800\udc00\ud801\udc01\ud802\udc02dcba", str)
|
||||
}
|
||||
|
||||
// Basic ====================================================================================================
|
||||
fun testBasic() {
|
||||
val sb = StringBuilder()
|
||||
assertEquals(0, sb.length)
|
||||
@@ -42,5 +256,7 @@ fun testBasic() {
|
||||
|
||||
fun main(args : Array<String>) {
|
||||
testBasic()
|
||||
testInsert()
|
||||
testReverse()
|
||||
println("OK")
|
||||
}
|
||||
@@ -1,136 +0,0 @@
|
||||
fun assertEquals(builder: StringBuilder, content: String) {
|
||||
if (builder.toString() != content) throw AssertionError("Test failed: " + builder.toString() + " != " + content)
|
||||
}
|
||||
|
||||
fun assertTrue(condition: Boolean) {
|
||||
if (!condition) throw AssertionError("The condition is false")
|
||||
}
|
||||
|
||||
// IndexOutOfBoundsException
|
||||
fun assertException(body: () -> Unit) {
|
||||
try {
|
||||
body()
|
||||
throw AssertionError ("Test failed: no IndexOutOfBoundsException on wrong indices")
|
||||
} catch (e: IndexOutOfBoundsException) {}
|
||||
}
|
||||
|
||||
fun String.toCharArray(): CharArray = CharArray(length) { i -> this[i] }
|
||||
|
||||
fun testInsertString(initial: String, index: Int, toInsert: String, expected: String) {
|
||||
assertEquals(StringBuilder(initial).insert(index, toInsert), expected)
|
||||
assertEquals(StringBuilder(initial).insert(index, toInsert.toCharArray()), expected)
|
||||
assertEquals(StringBuilder(initial).insert(index, toInsert as CharSequence), expected)
|
||||
}
|
||||
|
||||
fun testInsertStringException(initial: String, index: Int, toInsert: String) {
|
||||
assertException { StringBuilder(initial).insert(index, toInsert) }
|
||||
assertException { StringBuilder(initial).insert(index, toInsert.toCharArray()) }
|
||||
assertException { StringBuilder(initial).insert(index, toInsert as CharSequence) }
|
||||
}
|
||||
|
||||
fun testInsertSingle(value: Byte) {
|
||||
assertEquals(StringBuilder("abcd").insert(0, value), value.toString() + "abcd")
|
||||
assertEquals(StringBuilder("abcd").insert(4, value), "abcd" + value.toString())
|
||||
assertEquals(StringBuilder("abcd").insert(2, value), "ab" + value.toString() + "cd")
|
||||
assertEquals(StringBuilder("").insert(0, value), value.toString())
|
||||
}
|
||||
|
||||
fun testInsertSingle(value: Short) {
|
||||
assertEquals(StringBuilder("abcd").insert(0, value), value.toString() + "abcd")
|
||||
assertEquals(StringBuilder("abcd").insert(4, value), "abcd" + value.toString())
|
||||
assertEquals(StringBuilder("abcd").insert(2, value), "ab" + value.toString() + "cd")
|
||||
assertEquals(StringBuilder("").insert(0, value), value.toString())
|
||||
}
|
||||
|
||||
fun testInsertSingle(value: Int) {
|
||||
assertEquals(StringBuilder("abcd").insert(0, value), value.toString() + "abcd")
|
||||
assertEquals(StringBuilder("abcd").insert(4, value), "abcd" + value.toString())
|
||||
assertEquals(StringBuilder("abcd").insert(2, value), "ab" + value.toString() + "cd")
|
||||
assertEquals(StringBuilder("").insert(0, value), value.toString())
|
||||
}
|
||||
|
||||
fun testInsertSingle(value: Long) {
|
||||
assertEquals(StringBuilder("abcd").insert(0, value), value.toString() + "abcd")
|
||||
assertEquals(StringBuilder("abcd").insert(4, value), "abcd" + value.toString())
|
||||
assertEquals(StringBuilder("abcd").insert(2, value), "ab" + value.toString() + "cd")
|
||||
assertEquals(StringBuilder("").insert(0, value), value.toString())
|
||||
}
|
||||
|
||||
fun testInsertSingle(value: Float) {
|
||||
assertEquals(StringBuilder("abcd").insert(0, value), value.toString() + "abcd")
|
||||
assertEquals(StringBuilder("abcd").insert(4, value), "abcd" + value.toString())
|
||||
assertEquals(StringBuilder("abcd").insert(2, value), "ab" + value.toString() + "cd")
|
||||
assertEquals(StringBuilder("").insert(0, value), value.toString())
|
||||
}
|
||||
|
||||
fun testInsertSingle(value: Double) {
|
||||
assertEquals(StringBuilder("abcd").insert(0, value), value.toString() + "abcd")
|
||||
assertEquals(StringBuilder("abcd").insert(4, value), "abcd" + value.toString())
|
||||
assertEquals(StringBuilder("abcd").insert(2, value), "ab" + value.toString() + "cd")
|
||||
assertEquals(StringBuilder("").insert(0, value), value.toString())
|
||||
}
|
||||
|
||||
fun testInsertSingle(value: Any?) {
|
||||
assertEquals(StringBuilder("abcd").insert(0, value), value.toString() + "abcd")
|
||||
assertEquals(StringBuilder("abcd").insert(4, value), "abcd" + value.toString())
|
||||
assertEquals(StringBuilder("abcd").insert(2, value), "ab" + value.toString() + "cd")
|
||||
assertEquals(StringBuilder("").insert(0, value), value.toString())
|
||||
}
|
||||
|
||||
fun testInsertSingle(value: Char) {
|
||||
assertEquals(StringBuilder("abcd").insert(0, value), value.toString() + "abcd")
|
||||
assertEquals(StringBuilder("abcd").insert(4, value), "abcd" + value.toString())
|
||||
assertEquals(StringBuilder("abcd").insert(2, value), "ab" + value.toString() + "cd")
|
||||
assertEquals(StringBuilder("").insert(0, value), value.toString())
|
||||
}
|
||||
|
||||
fun main(args: Array<String>) {
|
||||
// String/CharSequence/CharArray
|
||||
testInsertString("abcd", 0, "12", "12abcd")
|
||||
testInsertString("abcd", 4, "12", "abcd12")
|
||||
testInsertString("abcd", 2, "12", "ab12cd")
|
||||
testInsertString("", 0, "12", "12")
|
||||
testInsertStringException("a", -1, "1")
|
||||
testInsertStringException("a", 2, "1")
|
||||
|
||||
// Subsequence of CharSequence
|
||||
// Insert in the beginning
|
||||
assertEquals(StringBuilder("abcd").insert(0, "1234", 0, 0), "abcd") // 0 symbols
|
||||
assertEquals(StringBuilder("abcd").insert(0, "1234", 0, 1), "1abcd") // 1 symbol
|
||||
assertEquals(StringBuilder("abcd").insert(0, "1234", 1, 3), "23abcd") // 2 symbols
|
||||
|
||||
// Insert in the end
|
||||
assertEquals(StringBuilder("abcd").insert(4, "1234", 0, 0), "abcd")
|
||||
assertEquals(StringBuilder("abcd").insert(4, "1234", 0, 1), "abcd1")
|
||||
assertEquals(StringBuilder("abcd").insert(4, "1234", 1, 3), "abcd23")
|
||||
|
||||
// Insert in the middle
|
||||
assertEquals(StringBuilder("abcd").insert(2, "1234", 0, 0), "abcd")
|
||||
assertEquals(StringBuilder("abcd").insert(2, "1234", 0, 1), "ab1cd")
|
||||
assertEquals(StringBuilder("abcd").insert(2, "1234", 1, 3), "ab23cd")
|
||||
|
||||
// Incorrect indices
|
||||
assertException { StringBuilder("a").insert(-1, "1", 0, 0) }
|
||||
assertException { StringBuilder("a").insert(2, "1", 0, 0) }
|
||||
assertException { StringBuilder("a").insert(1, "1", -1, 0) }
|
||||
assertException { StringBuilder("a").insert(1, "1", 0, 2) }
|
||||
assertException { StringBuilder("a").insert(1, "123", 2, 0) }
|
||||
|
||||
|
||||
// Other types
|
||||
testInsertSingle(true)
|
||||
testInsertSingle(42.toByte())
|
||||
testInsertSingle(42.toShort())
|
||||
testInsertSingle(42.toInt())
|
||||
testInsertSingle(42.toLong())
|
||||
testInsertSingle(42.2.toFloat())
|
||||
testInsertSingle(42.2.toDouble())
|
||||
testInsertSingle(object {
|
||||
override fun toString(): String {
|
||||
return "Object"
|
||||
}
|
||||
})
|
||||
testInsertSingle('a')
|
||||
|
||||
println("OK")
|
||||
}
|
||||
@@ -1,90 +0,0 @@
|
||||
fun assertEquals(builder: StringBuilder, content: String) {
|
||||
if (builder.toString() != content) throw AssertionError("Test failed: $builder != $content")
|
||||
}
|
||||
|
||||
fun assertTrue(condition: Boolean) {
|
||||
if (!condition) throw AssertionError("The condition is false")
|
||||
}
|
||||
|
||||
fun reverseTest(original: String, reversed: String, reversedBack: String) {
|
||||
assertEquals(StringBuilder(original).reverse(), reversed)
|
||||
assertEquals(StringBuilder(reversed).reverse(), reversedBack)
|
||||
}
|
||||
|
||||
|
||||
fun main(args: Array<String>) {
|
||||
var builder = StringBuilder("123456")
|
||||
assertTrue(builder === builder.reverse())
|
||||
assertEquals(builder, "654321")
|
||||
|
||||
builder.length = 1
|
||||
assertEquals(builder, "6")
|
||||
|
||||
builder.length = 0
|
||||
assertEquals(builder, "")
|
||||
|
||||
var str: String = "a"
|
||||
reverseTest(str, str, str)
|
||||
|
||||
str = "ab"
|
||||
reverseTest(str, "ba", str)
|
||||
|
||||
str = "abcdef"
|
||||
reverseTest(str, "fedcba", str)
|
||||
|
||||
str = "abcdefg"
|
||||
reverseTest(str, "gfedcba", str)
|
||||
|
||||
str = "\ud800\udc00"
|
||||
reverseTest(str, str, str)
|
||||
|
||||
str = "\udc00\ud800"
|
||||
reverseTest(str, "\ud800\udc00", "\ud800\udc00")
|
||||
|
||||
str = "a\ud800\udc00"
|
||||
reverseTest(str, "\ud800\udc00a", str)
|
||||
|
||||
str = "ab\ud800\udc00"
|
||||
reverseTest(str, "\ud800\udc00ba", str)
|
||||
|
||||
str = "abc\ud800\udc00"
|
||||
reverseTest(str, "\ud800\udc00cba", str)
|
||||
|
||||
str = "\ud800\udc00\udc01\ud801\ud802\udc02"
|
||||
reverseTest(str, "\ud802\udc02\ud801\udc01\ud800\udc00",
|
||||
"\ud800\udc00\ud801\udc01\ud802\udc02")
|
||||
|
||||
str = "\ud800\udc00\ud801\udc01\ud802\udc02"
|
||||
reverseTest(str, "\ud802\udc02\ud801\udc01\ud800\udc00", str)
|
||||
|
||||
str = "\ud800\udc00\udc01\ud801a"
|
||||
reverseTest(str, "a\ud801\udc01\ud800\udc00",
|
||||
"\ud800\udc00\ud801\udc01a")
|
||||
|
||||
str = "a\ud800\udc00\ud801\udc01"
|
||||
reverseTest(str, "\ud801\udc01\ud800\udc00a", str)
|
||||
|
||||
str = "\ud800\udc00\udc01\ud801ab"
|
||||
reverseTest(str, "ba\ud801\udc01\ud800\udc00",
|
||||
"\ud800\udc00\ud801\udc01ab")
|
||||
|
||||
str = "ab\ud800\udc00\ud801\udc01"
|
||||
reverseTest(str, "\ud801\udc01\ud800\udc00ba", str)
|
||||
|
||||
str = "\ud800\udc00\ud801\udc01"
|
||||
reverseTest(str, "\ud801\udc01\ud800\udc00", str)
|
||||
|
||||
str = "a\ud800\udc00z\ud801\udc01"
|
||||
reverseTest(str, "\ud801\udc01z\ud800\udc00a", str)
|
||||
|
||||
str = "a\ud800\udc00bz\ud801\udc01"
|
||||
reverseTest(str, "\ud801\udc01zb\ud800\udc00a", str)
|
||||
|
||||
str = "abc\ud802\udc02\ud801\udc01\ud800\udc00"
|
||||
reverseTest(str, "\ud800\udc00\ud801\udc01\ud802\udc02cba", str)
|
||||
|
||||
str = "abcd\ud802\udc02\ud801\udc01\ud800\udc00"
|
||||
reverseTest(str, "\ud800\udc00\ud801\udc01\ud802\udc02dcba", str)
|
||||
|
||||
println("OK")
|
||||
}
|
||||
Reference in New Issue
Block a user