Relax generic variance in Array.flatten

This commit is contained in:
Ilya Gorbunov
2016-10-24 15:26:02 +03:00
parent adaad58cc7
commit 49ea0f5984
2 changed files with 14 additions and 1 deletions
@@ -30,7 +30,7 @@ public inline fun <reified T> Array<out T>?.orEmpty(): Array<out T> = this ?: ar
/**
* Returns a single list of all elements from all arrays in the given array.
*/
public fun <T> Array<Array<out T>>.flatten(): List<T> {
public fun <T> Array<out Array<out T>>.flatten(): List<T> {
val result = ArrayList<T>(sumBy { it.size })
for (element in this) {
result.addAll(element)
@@ -956,6 +956,19 @@ class ArraysTest {
assertEquals(listOf(2), arrayOf("a", null, "test").mapIndexedNotNull { index, it -> it?.run { if (index != 0) length / index else null } })
}
@test fun flattenArray() {
val arr1: Array<Array<Int>> = arrayOf(arrayOf(1, 2, 3), arrayOf(4, 5, 6))
val arr2: Array<out Array<Int>> = arr1
val arr3: Array<out Array<out Int>> = arr1
val arr4: Array<Array<out Int>> = arr1 as Array<Array<out Int>>
val expected = listOf(1, 2, 3, 4, 5, 6)
assertEquals(expected, arr1.flatten())
assertEquals(expected, arr2.flatten())
assertEquals(expected, arr3.flatten())
assertEquals(expected, arr4.flatten())
}
@test fun asListPrimitives() {
// Array of primitives
val arr = intArrayOf(1, 2, 3, 4, 2, 5)