/* * Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license * that can be found in the license/LICENSE.txt file. */ @file:Suppress("SIGNED_CONSTANT_CONVERTED_TO_UNSIGNED") package test.collections import test.collections.behaviors.collectionBehavior import kotlin.test.* class UnsignedArraysTest { @Test fun collectionBehavior() { compare(listOf(), ubyteArrayOf()) { this.collectionBehavior() } compare(listOf(1), ushortArrayOf(1)) { this.collectionBehavior() } compare(listOf(1, 2), uintArrayOf(1u, 2u)) { this.collectionBehavior() } compare(listOf(1, 2, 3), ulongArrayOf(1u, 2u, 3u)) { this.collectionBehavior() } } @Test fun ubyteArrayInit() { val zeroArray = UByteArray(42) assertEquals(42, zeroArray.size) for (index in zeroArray.indices) { assertEquals(0u, zeroArray[index]) } val initArray = UByteArray(42) { it.toUByte() } for (index in initArray.indices) { assertEquals(index.toUByte(), initArray[index]) } } @Test fun ushortArrayInit() { val zeroArray = UShortArray(42) assertEquals(42, zeroArray.size) for (index in zeroArray.indices) { assertEquals(0u, zeroArray[index]) } val initArray = UShortArray(42) { it.toUShort() } for (index in initArray.indices) { assertEquals(index.toUShort(), initArray[index]) } } @Test fun uintArrayInit() { val zeroArray = UIntArray(42) assertEquals(42, zeroArray.size) for (index in zeroArray.indices) { assertEquals(0u, zeroArray[index]) } val initArray = UIntArray(42) { it.toUInt() } for (index in initArray.indices) { assertEquals(index.toUInt(), initArray[index]) } } @Test fun ulongArrayInit() { val zeroArray = ULongArray(42) assertEquals(42, zeroArray.size) for (index in zeroArray.indices) { assertEquals(0u, zeroArray[index]) } val initArray = ULongArray(42) { it.toULong() } for (index in initArray.indices) { 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 { uintArrayOf().copyOf(-1) } assertFailsWith { 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) } } } }