KT-8283: fix Kotlin.equals method to compare arrays by reference

This commit is contained in:
Alexey Andreev
2016-09-07 17:56:04 +03:00
parent a04d60406b
commit a9330057cc
13 changed files with 68 additions and 15 deletions
+24
View File
@@ -18,6 +18,30 @@ fun <T> assertNotEquals(illegal: T, actual: T, message: String? = null) {
}
}
fun <T> assertArrayEquals(expected: Array<out T>, actual: Array<out T>, message: String? = null) {
if (!arraysEqual(expected, actual)) {
val msg = if (message == null) "" else (" message = '" + message + "',")
fail("Unexpected array:$msg expected = '$expected', actual = '$actual'")
}
}
private fun <T> arraysEqual(first: Array<out T>, second: Array<out T>): Boolean {
if (first === second) return true
if (first.size != second.size) return false
for (index in first.indices) {
if (!equal(first[index], second[index])) return false
}
return true
}
private fun equal(first: Any?, second: Any?) =
if (first is Array<*> && second is Array<*>) {
arraysEqual(first, second)
}
else {
first == second
}
fun assertTrue(actual: Boolean, message: String? = null) = assertEquals(true, actual, message)
fun assertFalse(actual: Boolean, message: String? = null) = assertEquals(false, actual, message)