summaryrefslogtreecommitdiff
path: root/src/main/java/au/id/zancanaro/javacheck/RoseTree.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/au/id/zancanaro/javacheck/RoseTree.java')
-rw-r--r--src/main/java/au/id/zancanaro/javacheck/RoseTree.java19
1 files changed, 9 insertions, 10 deletions
diff --git a/src/main/java/au/id/zancanaro/javacheck/RoseTree.java b/src/main/java/au/id/zancanaro/javacheck/RoseTree.java
index 5a54d6f..c735b46 100644
--- a/src/main/java/au/id/zancanaro/javacheck/RoseTree.java
+++ b/src/main/java/au/id/zancanaro/javacheck/RoseTree.java
@@ -6,6 +6,7 @@ import java.util.*;
import java.util.function.Function;
import java.util.function.Predicate;
+@SuppressWarnings("unused")
public class RoseTree<T> {
private final T value;
private final Iterable<RoseTree<T>> children;
@@ -49,14 +50,17 @@ public class RoseTree<T> {
));
}
- public static <T, R> RoseTree<R> zip(Function<List<T>, R> fn, RoseTree<T>[] trees) {
- @SuppressWarnings("unchecked")
- List<T> heads = new ArrayList(trees.length);
+ private static <T> List<T> makeHeadList(RoseTree<T>[] trees) {
+ List<T> heads = new ArrayList<>(trees.length);
for (RoseTree<T> tree : trees) {
heads.add(tree.getValue());
}
+ return heads;
+ }
+
+ public static <T, R> RoseTree<R> zip(Function<List<T>, R> fn, RoseTree<T>[] trees) {
return new RoseTree<>(
- fn.apply(heads),
+ fn.apply(makeHeadList(trees)),
() -> Iterators.mappingIterator(
roses -> RoseTree.zip(fn, roses),
RoseTree.permutations(trees)));
@@ -76,13 +80,8 @@ public class RoseTree<T> {
}
public static <T, R> RoseTree<R> shrink(Function<List<T>, R> fn, RoseTree<T>[] trees) {
- @SuppressWarnings("unchecked")
- List<T> heads = new ArrayList(trees.length);
- for (RoseTree<T> tree : trees) {
- heads.add(tree.getValue());
- }
return new RoseTree<>(
- fn.apply(heads),
+ fn.apply(makeHeadList(trees)),
() -> Iterators.mappingIterator(
roses -> RoseTree.shrink(fn, roses),
RoseTree.removeEach(trees)));