diff --git a/libraries/stdlib/src/kotlin/Arrays.kt b/libraries/stdlib/src/kotlin/Arrays.kt index 74a8cd50b08..15f4e031e92 100644 --- a/libraries/stdlib/src/kotlin/Arrays.kt +++ b/libraries/stdlib/src/kotlin/Arrays.kt @@ -124,3 +124,30 @@ public inline fun Array.isEmpty() : Boolean = this.size == 0 /** Returns the array if its not null or else returns an empty array */ public inline fun Array?.orEmpty() : Array = if (this != null) this else array() + +public inline val BooleanArray.lastIndex : Int + get() = this.size - 1 + +public inline val ByteArray.lastIndex : Int + get() = this.size - 1 + +public inline val ShortArray.lastIndex : Int + get() = this.size - 1 + +public inline val IntArray.lastIndex : Int + get() = this.size - 1 + +public inline val LongArray.lastIndex : Int + get() = this.size - 1 + +public inline val FloatArray.lastIndex : Int + get() = this.size - 1 + +public inline val DoubleArray.lastIndex : Int + get() = this.size - 1 + +public inline val CharArray.lastIndex : Int + get() = this.size - 1 + +public inline val Array.lastIndex : Int + get() = this.size - 1 diff --git a/libraries/stdlib/test/ArraysTest.kt b/libraries/stdlib/test/ArraysTest.kt index 4fe0f3b133b..77620c63610 100644 --- a/libraries/stdlib/test/ArraysTest.kt +++ b/libraries/stdlib/test/ArraysTest.kt @@ -39,4 +39,22 @@ class ArraysTest() : TestCase() { assertFalse(iter.hasNext, "Invalid length (hasNext)") } + fun testEmptyArrayLastIndex() { + val arr1 = IntArray(0) + assertEquals(-1, arr1.lastIndex) + + val arr2 = Array(0, {"$it"}) + assertEquals(-1, arr2.lastIndex) + } + + fun testArrayLastIndex() { + val arr1 = intArray(0, 1, 2, 3, 4) + assertEquals(4, arr1.lastIndex) + assertEquals(4, arr1[arr1.lastIndex]) + + val arr2 = Array(5, {"$it"}) + assertEquals(4, arr2.lastIndex) + assertEquals("4", arr2[arr2.lastIndex]) + } + }