Specialize contentDeepEquals/HashCode/ToString for arrays of unsigned types

#KT-26388
This commit is contained in:
Ilya Gorbunov
2018-09-12 02:41:27 +03:00
parent 3cc606577c
commit 2d356b89b5
8 changed files with 208 additions and 47 deletions
@@ -209,10 +209,19 @@ class ArraysTest {
@Test fun contentDeepEquals() {
val arr1 = arrayOf("a", 1, intArrayOf(2))
val arr2 = arrayOf("a", 1, intArrayOf(2))
val arr3 = arrayOf("a", 1, uintArrayOf(2u))
val arr4 = arrayOf("a", 1, uintArrayOf(2u))
assertFalse(arr1 contentEquals arr2)
assertTrue(arr1 contentDeepEquals arr2)
assertFalse(arr1 contentDeepEquals arr3)
assertTrue(arr3 contentDeepEquals arr4)
arr2[2] = arr1
assertFalse(arr1 contentDeepEquals arr2)
arr4[2] = arr3
assertFalse(arr3 contentDeepEquals arr4)
}
@Test fun contentToString() {
@@ -230,8 +239,13 @@ class ArraysTest {
return
}
val arr = arrayOf("aa", 1, null, charArrayOf('d'))
assertEquals("[aa, 1, null, [d]]", arr.contentDeepToString())
val arr = arrayOf(
"aa", 1, null, arrayOf(arrayOf("foo")), charArrayOf('d'), booleanArrayOf(false),
intArrayOf(-1), longArrayOf(-1), shortArrayOf(-1), byteArrayOf(-1),
uintArrayOf(UInt.MAX_VALUE), ulongArrayOf(ULong.MAX_VALUE), ushortArrayOf(UShort.MAX_VALUE), ubyteArrayOf(UByte.MAX_VALUE),
doubleArrayOf(3.14), floatArrayOf(1.25f)
)
assertEquals("[aa, 1, null, [[foo]], [d], [false], [-1], [-1], [-1], [-1], [4294967295], [18446744073709551615], [65535], [255], [3.14], [1.25]]", arr.contentDeepToString())
}
@Test fun contentDeepToStringNoRecursion() {
@@ -262,6 +276,16 @@ class ArraysTest {
@Test fun contentDeepHashCode() {
val arr = arrayOf(null, Value(2), arrayOf(Value(3)))
assertEquals(((1*31 + 0)*31 + 2) * 31 + (1 * 31 + 3), arr.contentDeepHashCode())
val intArray2 = arrayOf(intArrayOf(1, 2), intArrayOf(3, 4))
val intList2 = listOf(listOf(1, 2), listOf(3, 4))
assertEquals(intList2.hashCode(), intArray2.contentDeepHashCode())
val uintArray2 = arrayOf(uintArrayOf(1u, 2u), uintArrayOf(3u, 4u))
val uintList2 = listOf(listOf(1u, 2u), listOf(3u, 4u))
assertEquals(uintList2.hashCode(), uintArray2.contentDeepHashCode())
}