Move test and cover more cases of string comparison

#KT-18067
This commit is contained in:
Ilya Gorbunov
2018-08-12 03:19:34 +03:00
parent 27dde5f730
commit 6866f5d19a
+48 -25
View File
@@ -9,6 +9,7 @@ import kotlin.test.*
import test.*
import test.collections.behaviors.iteratorBehavior
import test.collections.compare
import kotlin.math.sign
fun createString(content: String): CharSequence = content
@@ -755,6 +756,53 @@ class StringTest {
assertTrue(null.equals(null, ignoreCase = false))
}
@Test fun compareToIgnoreCase() {
fun assertCompareResult(expectedResult: Int, v1: String, v2: String, ignoreCase: Boolean) {
val result = v1.compareTo(v2, ignoreCase = ignoreCase).sign
assertEquals(expectedResult, result, "Comparing '$v1' with '$v2', ignoreCase = $ignoreCase")
if (expectedResult == 0)
assertTrue(v1.equals(v2, ignoreCase = ignoreCase))
if (!ignoreCase)
assertEquals(v1.compareTo(v2).sign, result)
}
fun assertCompareResult(expectedResult: Int, expectedResultIgnoreCase: Int, v1: String, v2: String) {
assertCompareResult(expectedResult, v1, v2, false)
assertCompareResult(expectedResultIgnoreCase, v1, v2, true)
}
val (EQ, LT, GT) = listOf(0, -1, 1)
assertCompareResult(EQ, EQ, "ABC", "ABC")
assertCompareResult(LT, EQ, "ABC", "ABc")
assertCompareResult(GT, EQ, "ABc", "ABC")
assertCompareResult(LT, LT, "ABC", "ABx")
assertCompareResult(LT, GT, "ABX", "ABc")
assertCompareResult(LT, LT, "[", "aa")
assertCompareResult(GT, LT, "[", "AA")
assertCompareResult(EQ, EQ, "", "")
assertCompareResult(LT, LT, "", "A")
assertCompareResult(GT, GT, "A", "")
run {
val a32 = "A".repeat(32)
assertCompareResult(LT, EQ, a32 + "B", a32 + "b")
assertCompareResult(LT, GT, a32 + "BB", a32 + "b")
assertCompareResult(LT, GT, a32 + "C", a32 + "b")
}
val equalIgnoringCase = listOf("ABC", "ABc", "aBC", "AbC", "abc")
for (item1 in equalIgnoringCase) {
for (item2 in equalIgnoringCase) {
assertCompareResult(EQ, item1, item2, ignoreCase = true)
}
}
}
@Test fun replace() {
val input = "abbAb"
@@ -1336,29 +1384,4 @@ ${" "}
assertEquals(" ABC\n \n 123", "ABC\n \n123".prependIndent(" "))
assertEquals(" ", "".prependIndent(" "))
}
@Test fun testCompareToIgnoreCase() {
assertTrue("ABC".compareTo("ABC", ignoreCase = false) == 0)
assertTrue("ABC".compareTo("ABc", ignoreCase = false) < 0)
assertTrue("ABc".compareTo("ABC", ignoreCase = false) > 0)
assertTrue("ABC".compareTo("ABx", ignoreCase = false) < 0)
assertTrue("ABx".compareTo("ABC", ignoreCase = false) > 0)
assertTrue("[".compareTo("aa", ignoreCase = false) < 0)
assertTrue("".compareTo("", ignoreCase = false) == 0)
assertTrue("".compareTo("A", ignoreCase = false) < 0)
assertTrue("A".compareTo("", ignoreCase = false) > 0)
assertTrue(("A".repeat(16) + "B").compareTo("A".repeat(16) + "b", ignoreCase = false) < 0)
assertTrue("ABC".compareTo("ABC", ignoreCase = true) == 0)
assertTrue("ABC".compareTo("ABc", ignoreCase = true) == 0)
assertTrue("ABc".compareTo("ABC", ignoreCase = true) == 0)
assertTrue("ABC".compareTo("ABx", ignoreCase = true) < 0)
assertTrue("ABx".compareTo("ABC", ignoreCase = true) > 0)
assertTrue("[".compareTo("aa", ignoreCase = true) < 0)
assertTrue("".compareTo("", ignoreCase = false) == 0)
assertTrue("".compareTo("A", ignoreCase = false) < 0)
assertTrue("A".compareTo("", ignoreCase = false) > 0)
assertTrue(("A".repeat(16) + "B").compareTo("A".repeat(16) + "b", ignoreCase = false) < 0)
}
}