From 1e301843f7eadbd3c470cdb57def6aef8eb03ce9 Mon Sep 17 00:00:00 2001 From: Alexander Zolotov Date: Tue, 26 Jun 2012 00:13:26 +0400 Subject: [PATCH] Fix function List.reverse(). For now all iterables (including List) return reversed *copy* of collection. See Problem 3 at https://github.com/JetBrains/kotlin/pull/78#issuecomment-6533534 --- .../src/generated/ArraysFromJLangIterables.kt | 3 ++- .../generated/BooleanArraysFromJLangIterables.kt | 3 ++- .../src/generated/ByteArraysFromJLangIterables.kt | 3 ++- .../src/generated/CharArraysFromJLangIterables.kt | 3 ++- .../generated/DoubleArraysFromJLangIterables.kt | 3 ++- .../src/generated/FloatArraysFromJLangIterables.kt | 3 ++- .../src/generated/IntArraysFromJLangIterables.kt | 3 ++- .../generated/JUtilIteratorsFromJLangIterables.kt | 3 ++- .../src/generated/LongArraysFromJLangIterables.kt | 3 ++- .../src/generated/ShortArraysFromJLangIterables.kt | 3 ++- .../src/generated/StandardFromJLangIterables.kt | 3 ++- libraries/stdlib/src/kotlin/JLangIterables.kt | 3 ++- libraries/stdlib/src/kotlin/JUtil.kt | 9 --------- libraries/stdlib/test/ArraysTest.kt | 11 +++++++++++ libraries/stdlib/test/CollectionTest.kt | 14 ++++++++++++-- 15 files changed, 47 insertions(+), 23 deletions(-) diff --git a/libraries/stdlib/src/generated/ArraysFromJLangIterables.kt b/libraries/stdlib/src/generated/ArraysFromJLangIterables.kt index 91ef67657e6..aa7cc45dd9c 100644 --- a/libraries/stdlib/src/generated/ArraysFromJLangIterables.kt +++ b/libraries/stdlib/src/generated/ArraysFromJLangIterables.kt @@ -245,7 +245,8 @@ public inline fun > Array.toCollection(result: C) : */ public inline fun Array.reverse() : List { val list = toList() - return list.reverse() + Collections.reverse(list) + return list } /** Copies all elements into a [[LinkedList]] */ diff --git a/libraries/stdlib/src/generated/BooleanArraysFromJLangIterables.kt b/libraries/stdlib/src/generated/BooleanArraysFromJLangIterables.kt index 62ab715c1dc..884b0654750 100644 --- a/libraries/stdlib/src/generated/BooleanArraysFromJLangIterables.kt +++ b/libraries/stdlib/src/generated/BooleanArraysFromJLangIterables.kt @@ -245,7 +245,8 @@ public inline fun > BooleanArray.toCollection(result: C) */ public inline fun BooleanArray.reverse() : List { val list = toList() - return list.reverse() + Collections.reverse(list) + return list } /** Copies all elements into a [[LinkedList]] */ diff --git a/libraries/stdlib/src/generated/ByteArraysFromJLangIterables.kt b/libraries/stdlib/src/generated/ByteArraysFromJLangIterables.kt index 1892bb7c346..ed6c87d76d8 100644 --- a/libraries/stdlib/src/generated/ByteArraysFromJLangIterables.kt +++ b/libraries/stdlib/src/generated/ByteArraysFromJLangIterables.kt @@ -245,7 +245,8 @@ public inline fun > ByteArray.toCollection(result: C) : C { */ public inline fun ByteArray.reverse() : List { val list = toList() - return list.reverse() + Collections.reverse(list) + return list } /** Copies all elements into a [[LinkedList]] */ diff --git a/libraries/stdlib/src/generated/CharArraysFromJLangIterables.kt b/libraries/stdlib/src/generated/CharArraysFromJLangIterables.kt index da2d49bbb83..fa8fb1dbdf8 100644 --- a/libraries/stdlib/src/generated/CharArraysFromJLangIterables.kt +++ b/libraries/stdlib/src/generated/CharArraysFromJLangIterables.kt @@ -245,7 +245,8 @@ public inline fun > CharArray.toCollection(result: C) : C { */ public inline fun CharArray.reverse() : List { val list = toList() - return list.reverse() + Collections.reverse(list) + return list } /** Copies all elements into a [[LinkedList]] */ diff --git a/libraries/stdlib/src/generated/DoubleArraysFromJLangIterables.kt b/libraries/stdlib/src/generated/DoubleArraysFromJLangIterables.kt index c5589d9d81d..6c03f330ffe 100644 --- a/libraries/stdlib/src/generated/DoubleArraysFromJLangIterables.kt +++ b/libraries/stdlib/src/generated/DoubleArraysFromJLangIterables.kt @@ -245,7 +245,8 @@ public inline fun > DoubleArray.toCollection(result: C) : */ public inline fun DoubleArray.reverse() : List { val list = toList() - return list.reverse() + Collections.reverse(list) + return list } /** Copies all elements into a [[LinkedList]] */ diff --git a/libraries/stdlib/src/generated/FloatArraysFromJLangIterables.kt b/libraries/stdlib/src/generated/FloatArraysFromJLangIterables.kt index 8a45fec0264..00ca183972e 100644 --- a/libraries/stdlib/src/generated/FloatArraysFromJLangIterables.kt +++ b/libraries/stdlib/src/generated/FloatArraysFromJLangIterables.kt @@ -245,7 +245,8 @@ public inline fun > FloatArray.toCollection(result: C) : C */ public inline fun FloatArray.reverse() : List { val list = toList() - return list.reverse() + Collections.reverse(list) + return list } /** Copies all elements into a [[LinkedList]] */ diff --git a/libraries/stdlib/src/generated/IntArraysFromJLangIterables.kt b/libraries/stdlib/src/generated/IntArraysFromJLangIterables.kt index db2d6656aa8..d3b4a25723c 100644 --- a/libraries/stdlib/src/generated/IntArraysFromJLangIterables.kt +++ b/libraries/stdlib/src/generated/IntArraysFromJLangIterables.kt @@ -245,7 +245,8 @@ public inline fun > IntArray.toCollection(result: C) : C { */ public inline fun IntArray.reverse() : List { val list = toList() - return list.reverse() + Collections.reverse(list) + return list } /** Copies all elements into a [[LinkedList]] */ diff --git a/libraries/stdlib/src/generated/JUtilIteratorsFromJLangIterables.kt b/libraries/stdlib/src/generated/JUtilIteratorsFromJLangIterables.kt index c02c56c285a..7591b57acbd 100644 --- a/libraries/stdlib/src/generated/JUtilIteratorsFromJLangIterables.kt +++ b/libraries/stdlib/src/generated/JUtilIteratorsFromJLangIterables.kt @@ -243,7 +243,8 @@ public inline fun > java.util.Iterator.toCollection */ public inline fun java.util.Iterator.reverse() : List { val list = toList() - return list.reverse() + Collections.reverse(list) + return list } /** Copies all elements into a [[LinkedList]] */ diff --git a/libraries/stdlib/src/generated/LongArraysFromJLangIterables.kt b/libraries/stdlib/src/generated/LongArraysFromJLangIterables.kt index c45a6e1ba4d..54e9b5177d8 100644 --- a/libraries/stdlib/src/generated/LongArraysFromJLangIterables.kt +++ b/libraries/stdlib/src/generated/LongArraysFromJLangIterables.kt @@ -245,7 +245,8 @@ public inline fun > LongArray.toCollection(result: C) : C { */ public inline fun LongArray.reverse() : List { val list = toList() - return list.reverse() + Collections.reverse(list) + return list } /** Copies all elements into a [[LinkedList]] */ diff --git a/libraries/stdlib/src/generated/ShortArraysFromJLangIterables.kt b/libraries/stdlib/src/generated/ShortArraysFromJLangIterables.kt index 7637d2ce156..bb55738749c 100644 --- a/libraries/stdlib/src/generated/ShortArraysFromJLangIterables.kt +++ b/libraries/stdlib/src/generated/ShortArraysFromJLangIterables.kt @@ -245,7 +245,8 @@ public inline fun > ShortArray.toCollection(result: C) : C */ public inline fun ShortArray.reverse() : List { val list = toList() - return list.reverse() + Collections.reverse(list) + return list } /** Copies all elements into a [[LinkedList]] */ diff --git a/libraries/stdlib/src/generated/StandardFromJLangIterables.kt b/libraries/stdlib/src/generated/StandardFromJLangIterables.kt index 67b9b37d080..e1381a366ce 100644 --- a/libraries/stdlib/src/generated/StandardFromJLangIterables.kt +++ b/libraries/stdlib/src/generated/StandardFromJLangIterables.kt @@ -245,7 +245,8 @@ public inline fun > Iterable.toCollection(result: C */ public inline fun Iterable.reverse() : List { val list = toList() - return list.reverse() + Collections.reverse(list) + return list } /** Copies all elements into a [[LinkedList]] */ diff --git a/libraries/stdlib/src/kotlin/JLangIterables.kt b/libraries/stdlib/src/kotlin/JLangIterables.kt index b18c739f0ca..d6f75cc8247 100644 --- a/libraries/stdlib/src/kotlin/JLangIterables.kt +++ b/libraries/stdlib/src/kotlin/JLangIterables.kt @@ -235,7 +235,8 @@ public inline fun > java.lang.Iterable.toCollection */ public inline fun java.lang.Iterable.reverse() : List { val list = toList() - return list.reverse() + Collections.reverse(list) + return list } /** Copies all elements into a [[LinkedList]] */ diff --git a/libraries/stdlib/src/kotlin/JUtil.kt b/libraries/stdlib/src/kotlin/JUtil.kt index 3b0c743de9d..4d4f7005e4a 100644 --- a/libraries/stdlib/src/kotlin/JUtil.kt +++ b/libraries/stdlib/src/kotlin/JUtil.kt @@ -40,15 +40,6 @@ public inline fun > java.lang.Iterable.toSorted // List APIs -/** - * Reverses the order the elements into a list - * - * @includeFunctionBody ../../test/CollectionTest.kt reverse - */ -public inline fun List.reverse() : List { - Collections.reverse(this) - return this -} public inline fun > List.sort() : List { Collections.sort(this) diff --git a/libraries/stdlib/test/ArraysTest.kt b/libraries/stdlib/test/ArraysTest.kt index 4c956fa86db..7b3c41df213 100644 --- a/libraries/stdlib/test/ArraysTest.kt +++ b/libraries/stdlib/test/ArraysTest.kt @@ -88,4 +88,15 @@ class ArraysTest { } } + test fun reverse() { + expect(arrayList(3, 2, 1)) { intArray(1, 2, 3).reverse() } + expect(arrayList(3, 2, 1)) { byteArray(1, 2, 3).reverse() } + expect(arrayList(3, 2, 1)) { shortArray(1, 2, 3).reverse() } + expect(arrayList(3, 2, 1)) { longArray(1, 2, 3).reverse() } + expect(arrayList(3.toFloat(), 2.toFloat(), 1.toFloat())) { floatArray(1.toFloat(), 2.toFloat(), 3.toFloat()).reverse() } + expect(arrayList(3.0, 2.0, 1.0)) { doubleArray(1.0, 2.0, 3.0).reverse() } + expect(arrayList('3', '2', '1')) { charArray('1', '2', '3').reverse() } + expect(arrayList(false, false, true)) { booleanArray(true, false, false).reverse() } + } + } diff --git a/libraries/stdlib/test/CollectionTest.kt b/libraries/stdlib/test/CollectionTest.kt index d80743a32d2..3e1f06c1a89 100644 --- a/libraries/stdlib/test/CollectionTest.kt +++ b/libraries/stdlib/test/CollectionTest.kt @@ -325,6 +325,18 @@ class CollectionTest { assertEquals(arrayList("bar", "foo"), rev) } + test fun reverseFunctionShouldReturnSortedCopyForList() { + val list : List = arrayList(2, 3, 1) + expect(arrayList(1, 3, 2)) { list.reverse() } + expect(arrayList(2, 3, 1)) { list } + } + + test fun reverseFunctionShouldReturnSortedCopyForIterable() { + val iterable : java.lang.Iterable = arrayList(2, 3, 1) + expect(arrayList(1, 3, 2)) { iterable.reverse() } + expect(arrayList(2, 3, 1)) { iterable } + } + test fun sort() { val coll: List = arrayList("foo", "bar", "abc") @@ -334,7 +346,6 @@ class CollectionTest { todo { assertEquals(3, coll.size) assertEquals(arrayList("abc", "bar", "foo"), coll) - } } @@ -445,7 +456,6 @@ class CollectionTest { // assertFalse(IterableWrapper(linkedList()).contains(15)) } - class IterableWrapper(collection : java.lang.Iterable) : java.lang.Iterable { private val collection = collection