Move test and cover more cases of string comparison
#KT-18067
This commit is contained in:
@@ -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)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user