From 1e301843f7eadbd3c470cdb57def6aef8eb03ce9 Mon Sep 17 00:00:00 2001 From: Alexander Zolotov Date: Tue, 26 Jun 2012 00:13:26 +0400 Subject: [PATCH 1/3] 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 From 1cc7ab6b8d7bdd847f4c688f916bc219a4aa98d9 Mon Sep 17 00:00:00 2001 From: Alexander Zolotov Date: Tue, 26 Jun 2012 00:15:27 +0400 Subject: [PATCH 2/3] Fix function List.reverse(). - fix tests names --- libraries/stdlib/test/CollectionTest.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libraries/stdlib/test/CollectionTest.kt b/libraries/stdlib/test/CollectionTest.kt index 3e1f06c1a89..e8bf63c717c 100644 --- a/libraries/stdlib/test/CollectionTest.kt +++ b/libraries/stdlib/test/CollectionTest.kt @@ -325,13 +325,13 @@ class CollectionTest { assertEquals(arrayList("bar", "foo"), rev) } - test fun reverseFunctionShouldReturnSortedCopyForList() { + test fun reverseFunctionShouldReturnReversedCopyForList() { val list : List = arrayList(2, 3, 1) expect(arrayList(1, 3, 2)) { list.reverse() } expect(arrayList(2, 3, 1)) { list } } - test fun reverseFunctionShouldReturnSortedCopyForIterable() { + test fun reverseFunctionShouldReturnReversedCopyForIterable() { val iterable : java.lang.Iterable = arrayList(2, 3, 1) expect(arrayList(1, 3, 2)) { iterable.reverse() } expect(arrayList(2, 3, 1)) { iterable } From 34f485e45ae05cd50f5aad490d106f149eae3857 Mon Sep 17 00:00:00 2001 From: Alexander Zolotov Date: Tue, 26 Jun 2012 00:36:24 +0400 Subject: [PATCH 3/3] Fix functions List.sort() and add sort functions for java.lang.Iterables. See Problem 3 at https://github.com/JetBrains/kotlin/pull/78#issuecomment-6533534 --- .../src/kotlin/JLangIterablesSpecial.kt | 12 ++++++++++ libraries/stdlib/src/kotlin/JUtil.kt | 11 ---------- libraries/stdlib/test/CollectionTest.kt | 22 ++++++++++++------- 3 files changed, 26 insertions(+), 19 deletions(-) diff --git a/libraries/stdlib/src/kotlin/JLangIterablesSpecial.kt b/libraries/stdlib/src/kotlin/JLangIterablesSpecial.kt index adc2be1e622..ae0f882e4e2 100644 --- a/libraries/stdlib/src/kotlin/JLangIterablesSpecial.kt +++ b/libraries/stdlib/src/kotlin/JLangIterablesSpecial.kt @@ -105,6 +105,18 @@ public fun java.lang.Iterable.withIndices() : java.lang.Iterable<#(Int, T } } +public inline fun > java.lang.Iterable.sort() : List { + val list = toList() + java.util.Collections.sort(list) + return list +} + +public inline fun java.lang.Iterable.sort(comparator: java.util.Comparator) : List { + val list = toList() + java.util.Collections.sort(list, comparator) + return list +} + private class NumberedIterator(private val sourceIterator : java.util.Iterator) : java.util.Iterator<#(Int, TT)> { private var nextIndex = 0 diff --git a/libraries/stdlib/src/kotlin/JUtil.kt b/libraries/stdlib/src/kotlin/JUtil.kt index 4d4f7005e4a..a0190a6adba 100644 --- a/libraries/stdlib/src/kotlin/JUtil.kt +++ b/libraries/stdlib/src/kotlin/JUtil.kt @@ -40,17 +40,6 @@ public inline fun > java.lang.Iterable.toSorted // List APIs - -public inline fun > List.sort() : List { - Collections.sort(this) - return this -} - -public inline fun List.sort(comparator: java.util.Comparator) : List { - Collections.sort(this, comparator) - return this -} - /** Returns the List if its not null otherwise returns the empty list */ public inline fun java.util.List?.orEmpty() : java.util.List = if (this != null) this else Collections.emptyList() as java.util.List diff --git a/libraries/stdlib/test/CollectionTest.kt b/libraries/stdlib/test/CollectionTest.kt index e8bf63c717c..60992eefed8 100644 --- a/libraries/stdlib/test/CollectionTest.kt +++ b/libraries/stdlib/test/CollectionTest.kt @@ -337,15 +337,21 @@ class CollectionTest { expect(arrayList(2, 3, 1)) { iterable } } - test fun sort() { - val coll: List = arrayList("foo", "bar", "abc") - - // TODO fixme - // Some sort of in/out variance thing - or an issue with Java interop? - //coll.sort() + test fun sortFunctionShouldReturnSortedCopyForList() { + // TODO fixme Some sort of in/out variance thing - or an issue with Java interop? todo { - assertEquals(3, coll.size) - assertEquals(arrayList("abc", "bar", "foo"), coll) +// val list : List = arrayList(2, 3, 1) +// expect(arrayList(1, 2, 3)) { list.sort() } +// expect(arrayList(2, 3, 1)) { list } + } + } + + test fun sortFunctionShouldReturnSortedCopyForIterable() { + // TODO fixme Some sort of in/out variance thing - or an issue with Java interop? + todo { +// val list : java.lang.Iterable = arrayList(2, 3, 1) +// expect(arrayList(1, 2, 3)) { list.sort() } +// expect(arrayList(2, 3, 1)) { list } } }