This is an automated email from the ASF dual-hosted git repository.
paulk 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 56d872b20d GROOVY-11255: DGM#flatten flattens nested structures
including arrays but not primitive arrays
56d872b20d is described below
commit 56d872b20d20e76dc6d8303994e32164eb85b101
Author: Paul King <[email protected]>
AuthorDate: Wed Dec 20 22:08:50 2023 +1000
GROOVY-11255: DGM#flatten flattens nested structures including arrays but
not primitive arrays
---
.../codehaus/groovy/runtime/DefaultGroovyMethods.java | 9 ++++++---
src/test/groovy/ListTest.groovy | 18 +++++++++++++++---
2 files changed, 21 insertions(+), 6 deletions(-)
diff --git
a/src/main/java/org/codehaus/groovy/runtime/DefaultGroovyMethods.java
b/src/main/java/org/codehaus/groovy/runtime/DefaultGroovyMethods.java
index 6999785f8b..555b54231b 100644
--- a/src/main/java/org/codehaus/groovy/runtime/DefaultGroovyMethods.java
+++ b/src/main/java/org/codehaus/groovy/runtime/DefaultGroovyMethods.java
@@ -3469,9 +3469,11 @@ public class DefaultGroovyMethods extends
DefaultGroovyMethodsSupport {
for (BigDecimal i = self; i.compareTo(to1) >= 0; i =
i.subtract(one)) {
closure.call(i);
}
- } else
+ } else {
throw new GroovyRuntimeException("The argument (" + to +
- ") to downto() cannot be greater than the value (" +
self + ") it's called on."); } else if (to instanceof BigInteger) {
+ ") to downto() cannot be greater than the value (" + self
+ ") it's called on.");
+ }
+ } else if (to instanceof BigInteger) {
BigDecimal to1 = new BigDecimal((BigInteger) to);
if (self.compareTo(to1) >= 0) {
for (BigDecimal i = self; i.compareTo(to1) >= 0; i =
i.subtract(one)) {
@@ -5796,7 +5798,8 @@ public class DefaultGroovyMethods extends
DefaultGroovyMethodsSupport {
if (element instanceof Collection) {
flatten((Collection<T>) element, addTo, flattenOptionals);
} else if (element != null && element.getClass().isArray()) {
- flatten(new ArrayIterable<>((T[]) element), addTo,
flattenOptionals);
+ // handles non-primitive case too
+
flatten(DefaultTypeTransformation.primitiveArrayToUnmodifiableList(element),
addTo, flattenOptionals);
} else {
Object flattened = element;
if (flattened instanceof Optional && flattenOptionals) {
diff --git a/src/test/groovy/ListTest.groovy b/src/test/groovy/ListTest.groovy
index 8e892a0af2..d20ef0773f 100644
--- a/src/test/groovy/ListTest.groovy
+++ b/src/test/groovy/ListTest.groovy
@@ -92,7 +92,7 @@ class ListTest extends GroovyTestCase {
l = [1, 2, 7]
assert l.max() == 7
- // GROOVY-1006
+ // GROOVY-1006
l = [1, 3.2, 4L, (short) 7]
assert l.max() == (short) 7
}
@@ -107,7 +107,7 @@ class ListTest extends GroovyTestCase {
l = [1, 2, 7]
assert l.min() == 1
- // GROOVY-1006
+ // GROOVY-1006
l = [(long) 1, 3.2, 4L, (short) 7]
assert l.min() == (long) 1
}
@@ -162,7 +162,7 @@ class ListTest extends GroovyTestCase {
def list = [1, 1]
assert list - [] == list
- // GROOVY-1006
+ // GROOVY-1006
list = [1, 2, 2, 3, 1]
assert list - [] == list
}
@@ -240,6 +240,18 @@ class ListTest extends GroovyTestCase {
assert flat == [1, 3, 20, 21, 22, 23, 24, 33]
}
+ void testFlattenWithPrimitiveArray() {
+ char[] fooChars = 'foo'.chars
+ assert [fooChars].flatten() == ['f', 'o', 'o']
+ }
+
+ void testFlattenWithMultiDimensionalPrimitiveArray() {
+ int[][] identityMatrix = [[1, 0], [0, 1]]
+ assert identityMatrix.flatten() == [1, 0, 0, 1]
+ assert [identityMatrix].flatten() == [1, 0, 0, 1]
+ assert [[identityMatrix]].flatten() == [1, 0, 0, 1]
+ }
+
void testListsAndRangesCompare() {
def l = [1, 2, 3]
def r = 1..3