Generate extensions for unsigned arrays and provide tests for them
- contentEquals, contentToString, contentHashCode - as[Signed]Array, as[Unsigned]Array - to[Signed]Array, to[Unsigned]Array - toTypedArray - copyOf(), copyOf(newSize), copyOfRange(...)
This commit is contained in:
@@ -64,4 +64,158 @@ class UnsignedArraysTest {
|
||||
assertEquals(index.toULong(), initArray[index])
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
fun contentHashCode() {
|
||||
ulongArrayOf(1uL, ULong.MAX_VALUE, ULong.MIN_VALUE).let { assertEquals(it.toList().hashCode(), it.contentHashCode()) }
|
||||
uintArrayOf(1u, UInt.MAX_VALUE, UInt.MIN_VALUE).let { assertEquals(it.toList().hashCode(), it.contentHashCode()) }
|
||||
ushortArrayOf(1u, UShort.MAX_VALUE, UShort.MIN_VALUE).let { assertEquals(it.toList().hashCode(), it.contentHashCode()) }
|
||||
ubyteArrayOf(1u, UByte.MAX_VALUE, UByte.MIN_VALUE).let { assertEquals(it.toList().hashCode(), it.contentHashCode()) }
|
||||
}
|
||||
|
||||
@Test
|
||||
fun contentToString() {
|
||||
ulongArrayOf(1uL, ULong.MAX_VALUE, ULong.MIN_VALUE).let { assertEquals(it.toList().toString(), it.contentToString()) }
|
||||
uintArrayOf(1u, UInt.MAX_VALUE, UInt.MIN_VALUE).let { assertEquals(it.toList().toString(), it.contentToString()) }
|
||||
ushortArrayOf(1u, UShort.MAX_VALUE, UShort.MIN_VALUE).let { assertEquals(it.toList().toString(), it.contentToString()) }
|
||||
ubyteArrayOf(1u, UByte.MAX_VALUE, UByte.MIN_VALUE).let { assertEquals(it.toList().toString(), it.contentToString()) }
|
||||
}
|
||||
|
||||
@Test
|
||||
fun contentEquals() {
|
||||
uintArrayOf(1u, UInt.MAX_VALUE, UInt.MIN_VALUE).let { arr ->
|
||||
assertTrue(arr contentEquals UIntArray(arr.size, arr::get))
|
||||
assertFalse(arr contentEquals UIntArray(arr.size - 1, arr::get))
|
||||
}
|
||||
ulongArrayOf(1u, ULong.MAX_VALUE, ULong.MIN_VALUE).let { arr ->
|
||||
assertTrue(arr contentEquals ULongArray(arr.size, arr::get))
|
||||
assertFalse(arr contentEquals ULongArray(arr.size - 1, arr::get))
|
||||
}
|
||||
ushortArrayOf(1u, UShort.MAX_VALUE, UShort.MIN_VALUE).let { arr ->
|
||||
assertTrue(arr contentEquals UShortArray(arr.size, arr::get))
|
||||
assertFalse(arr contentEquals UShortArray(arr.size - 1, arr::get))
|
||||
}
|
||||
ubyteArrayOf(1u, UByte.MAX_VALUE, UByte.MIN_VALUE).let { arr ->
|
||||
assertTrue(arr contentEquals UByteArray(arr.size, arr::get))
|
||||
assertFalse(arr contentEquals UByteArray(arr.size - 1, arr::get))
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun asArray() {
|
||||
val uintArray = uintArrayOf(1, UInt.MAX_VALUE)
|
||||
val intArray = uintArray.asIntArray()
|
||||
assertTrue(intArray contentEquals intArrayOf(1, -1))
|
||||
|
||||
intArray.reverse()
|
||||
val uintArray2 = intArray.asUIntArray()
|
||||
|
||||
assertTrue(uintArray contentEquals uintArray2)
|
||||
assertTrue(uintArray contentEquals uintArrayOf(UInt.MAX_VALUE, 1))
|
||||
|
||||
|
||||
val ulongArray = ulongArrayOf(1, ULong.MAX_VALUE)
|
||||
val longArray = ulongArray.asLongArray()
|
||||
assertTrue(longArray contentEquals longArrayOf(1, -1))
|
||||
|
||||
longArray.reverse()
|
||||
val ulongArray2 = longArray.asULongArray()
|
||||
assertTrue(ulongArray contentEquals ulongArray2)
|
||||
assertTrue(ulongArray contentEquals ulongArrayOf(ULong.MAX_VALUE, 1))
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
fun toArray() {
|
||||
val uintArray = uintArrayOf(UInt.MAX_VALUE)
|
||||
val intArray = uintArray.toIntArray()
|
||||
assertTrue(intArray contentEquals intArrayOf(-1))
|
||||
|
||||
intArray[0] = 0
|
||||
val uintArray2 = intArray.toUIntArray()
|
||||
assertEquals(UInt.MAX_VALUE, uintArray[0])
|
||||
|
||||
intArray[0] = 1
|
||||
assertEquals(0u, uintArray2[0])
|
||||
|
||||
|
||||
val ulongArray = ulongArrayOf(ULong.MAX_VALUE)
|
||||
val longArray = ulongArray.toLongArray()
|
||||
assertTrue(longArray contentEquals longArrayOf(-1))
|
||||
|
||||
longArray[0] = 0
|
||||
val ulongArray2 = longArray.toULongArray()
|
||||
assertEquals(ULong.MAX_VALUE, ulongArray[0])
|
||||
|
||||
longArray[0] = 1
|
||||
assertEquals(0u, ulongArray2[0])
|
||||
}
|
||||
|
||||
@Test
|
||||
fun toTypedArray() {
|
||||
uintArrayOf(UInt.MIN_VALUE, UInt.MAX_VALUE).let { assertTrue(it.toTypedArray() contentEquals it.toList().toTypedArray()) }
|
||||
ulongArrayOf(ULong.MIN_VALUE, ULong.MAX_VALUE).let { assertTrue(it.toTypedArray() contentEquals it.toList().toTypedArray()) }
|
||||
ushortArrayOf(UShort.MIN_VALUE, UShort.MAX_VALUE).let { assertTrue(it.toTypedArray() contentEquals it.toList().toTypedArray()) }
|
||||
ubyteArrayOf(UByte.MIN_VALUE, UByte.MAX_VALUE).let { assertTrue(it.toTypedArray() contentEquals it.toList().toTypedArray()) }
|
||||
}
|
||||
|
||||
@Test
|
||||
fun copyOf() {
|
||||
uintArrayOf(UInt.MAX_VALUE).let { arr ->
|
||||
val copy = arr.copyOf()
|
||||
assertTrue(arr contentEquals copy)
|
||||
copy[0] = 1u
|
||||
assertFalse(arr contentEquals copy)
|
||||
arr[0] = 2u
|
||||
assertFalse(arr contentEquals copy)
|
||||
}
|
||||
ulongArrayOf(ULong.MAX_VALUE).let { arr ->
|
||||
val copy = arr.copyOf()
|
||||
assertTrue(arr contentEquals copy)
|
||||
copy[0] = 1u
|
||||
assertFalse(arr contentEquals copy)
|
||||
arr[0] = 2u
|
||||
assertFalse(arr contentEquals copy)
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun copyAndResize() {
|
||||
assertTrue(uintArrayOf(1, 2) contentEquals uintArrayOf(1, 2, 3).copyOf(2))
|
||||
assertTrue(uintArrayOf(1, 2, 0) contentEquals uintArrayOf(1, 2).copyOf(3))
|
||||
|
||||
assertTrue(ulongArrayOf(1, 2) contentEquals ulongArrayOf(1, 2, 3).copyOf(2))
|
||||
assertTrue(ulongArrayOf(1, 2, 0) contentEquals ulongArrayOf(1, 2).copyOf(3))
|
||||
|
||||
|
||||
assertTrue(uintArrayOf() contentEquals uintArrayOf(1).copyOf(0))
|
||||
assertTrue(ulongArrayOf() contentEquals ulongArrayOf(1).copyOf(0))
|
||||
|
||||
// RuntimeException is the most specific common of JVM and JS implementations
|
||||
assertFailsWith<RuntimeException> { uintArrayOf().copyOf(-1) }
|
||||
assertFailsWith<RuntimeException> { ulongArrayOf().copyOf(-1) }
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
fun copyOfRange() {
|
||||
assertTrue(ubyteArrayOf(0, 1, 2) contentEquals ubyteArrayOf(0, 1, 2, 3, 4, 5).copyOfRange(0, 3))
|
||||
assertTrue(ushortArrayOf(0, 1, 2) contentEquals ushortArrayOf(0, 1, 2, 3, 4, 5).copyOfRange(0, 3))
|
||||
assertTrue(uintArrayOf(0, 1, 2) contentEquals uintArrayOf(0, 1, 2, 3, 4, 5).copyOfRange(0, 3))
|
||||
assertTrue(ulongArrayOf(0, 1, 2) contentEquals ulongArrayOf(0, 1, 2, 3, 4, 5).copyOfRange(0, 3))
|
||||
|
||||
for (pos in 0..3) {
|
||||
assertTrue(uintArrayOf() contentEquals uintArrayOf(1, 2, 3).copyOfRange(pos, pos))
|
||||
assertTrue(ulongArrayOf() contentEquals ULongArray(3) { it.toULong() }.copyOfRange(pos, pos))
|
||||
}
|
||||
|
||||
for ((start, end) in listOf(-1 to 0, 0 to 2, 2 to 2, 1 to 0)) {
|
||||
val bounds = "start: $start, end: $end"
|
||||
val exClass = if (start > end) IllegalArgumentException::class else IndexOutOfBoundsException::class
|
||||
assertFailsWith(exClass, bounds) { uintArrayOf(1).copyOfRange(start, end) }
|
||||
assertFailsWith(exClass, bounds) { ulongArrayOf(1uL).copyOfRange(start, end) }
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user