You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by em...@apache.org on 2024/01/23 22:46:58 UTC
(groovy) branch master updated: GROOVY-11296: DGM: `shuffled` preserves input order
This is an automated email from the ASF dual-hosted git repository.
emilles pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/groovy.git
The following commit(s) were added to refs/heads/master by this push:
new b39bef39b5 GROOVY-11296: DGM: `shuffled` preserves input order
b39bef39b5 is described below
commit b39bef39b5a22bd53769298d43a8192cbedecb63
Author: Eric Milles <er...@thomsonreuters.com>
AuthorDate: Tue Jan 23 16:46:24 2024 -0600
GROOVY-11296: DGM: `shuffled` preserves input order
---
.../groovy/runtime/ArrayGroovyMethods.java | 24 ++++++++++++----------
.../groovy/runtime/DefaultGroovyMethods.java | 20 ++++++++++--------
2 files changed, 25 insertions(+), 19 deletions(-)
diff --git a/src/main/java/org/codehaus/groovy/runtime/ArrayGroovyMethods.java b/src/main/java/org/codehaus/groovy/runtime/ArrayGroovyMethods.java
index ca16a4b9a9..7ec9494531 100644
--- a/src/main/java/org/codehaus/groovy/runtime/ArrayGroovyMethods.java
+++ b/src/main/java/org/codehaus/groovy/runtime/ArrayGroovyMethods.java
@@ -7002,10 +7002,12 @@ public class ArrayGroovyMethods extends DefaultGroovyMethodsSupport {
/**
* Creates a new array containing the elements of the specified array but in a random order.
* <pre class="groovyTestCase">
- * Integer[] orig = [10, 5, 20]
- * def array = orig.shuffled()
- * assert orig.size() == array.size()
- * assert orig.every{ array.contains(it) }
+ * Integer[] array = [10, 5, 20]
+ * def result = array.shuffled()
+ * assert array !== result
+ * assert array.length == result.length
+ * assert array.every{ result.contains(it) }
+ * assert array == new Integer[] {10, 5, 20}
* </pre>
*
* @param self an array
@@ -7024,10 +7026,12 @@ public class ArrayGroovyMethods extends DefaultGroovyMethodsSupport {
* order using the specified random instance as the source of randomness.
* <pre class="groovyTestCase">
* def r = new Random()
- * Integer[] orig = [10, 5, 20]
- * def array = orig.shuffled(r)
- * assert orig.size() == array.size()
- * assert orig.every{ array.contains(it) }
+ * Integer[] array = [10, 5, 20]
+ * def result = array.shuffled(r)
+ * assert array !== result
+ * assert array.length == result.length
+ * assert array.every{ result.contains(it) }
+ * assert array == new Integer[] {10, 5, 20}
* </pre>
*
* @param self an array
@@ -7036,9 +7040,7 @@ public class ArrayGroovyMethods extends DefaultGroovyMethodsSupport {
*/
public static <T> T[] shuffled(T[] self, Random rnd) {
T[] result = self.clone();
- List<T> items = Arrays.asList(self);
- Collections.shuffle(items, rnd);
- System.arraycopy(items.toArray(), 0, result, 0, items.size());
+ Collections.shuffle(Arrays.asList(result), rnd);
return result;
}
diff --git a/src/main/java/org/codehaus/groovy/runtime/DefaultGroovyMethods.java b/src/main/java/org/codehaus/groovy/runtime/DefaultGroovyMethods.java
index c14097fb2f..424bcdb476 100644
--- a/src/main/java/org/codehaus/groovy/runtime/DefaultGroovyMethods.java
+++ b/src/main/java/org/codehaus/groovy/runtime/DefaultGroovyMethods.java
@@ -11636,10 +11636,12 @@ public class DefaultGroovyMethods extends DefaultGroovyMethodsSupport {
* Creates a new list containing the elements of the specified list
* but in a random order.
* <pre class="groovyTestCase">
- * def orig = ["a", 4, false]
- * def shuffled = orig.shuffled()
- * assert orig.size() == shuffled.size()
- * assert orig.every{ shuffled.contains(it) }
+ * def list = ["a", 4, false]
+ * def result = list.shuffled()
+ * assert list !== result
+ * assert list == ["a", 4, false]
+ * assert list.size() == result.size()
+ * assert list.every{ result.contains(it) }
* </pre>
*
* @param self a List
@@ -11657,10 +11659,12 @@ public class DefaultGroovyMethods extends DefaultGroovyMethodsSupport {
* order using the specified random instance as the source of randomness.
* <pre class="groovyTestCase">
* def r = new Random()
- * def orig = ["a", 4, false]
- * def shuffled = orig.shuffled(r)
- * assert orig.size() == shuffled.size()
- * assert orig.every{ shuffled.contains(it) }
+ * def list = ["a", 4, false]
+ * def result = list.shuffled(r)
+ * assert list !== result
+ * assert list == ["a", 4, false]
+ * assert list.size() == result.size()
+ * assert list.every{ result.contains(it) }
* </pre>
*
* @param self a List