package kotlin fun assertArrayEquals(expected: Array, actual: Array, message: String? = null) { if (!arraysEqual(expected, actual)) { val msg = if (message == null) "" else ", message = '$message'" fail("Unexpected array: expected = '$expected', actual = '$actual'$msg") } } private fun arraysEqual(first: Array, second: Array): Boolean { if (first === second) return true if (first.size != second.size) return false for (index in 0..first.size - 1) { 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 }