From 7b1a783b749ab04ab8219ef28f9b1abb0ded6ca4 Mon Sep 17 00:00:00 2001 From: Carlo Zancanaro Date: Wed, 3 Jun 2015 14:32:07 +1000 Subject: Rename RoseTree to ShrinkTree (less confusing and more specific) --- .../java/au/id/zancanaro/javacheck/RoseTree.java | 128 --------------------- 1 file changed, 128 deletions(-) delete mode 100644 src/main/java/au/id/zancanaro/javacheck/RoseTree.java (limited to 'src/main/java/au/id/zancanaro/javacheck/RoseTree.java') diff --git a/src/main/java/au/id/zancanaro/javacheck/RoseTree.java b/src/main/java/au/id/zancanaro/javacheck/RoseTree.java deleted file mode 100644 index c735b46..0000000 --- a/src/main/java/au/id/zancanaro/javacheck/RoseTree.java +++ /dev/null @@ -1,128 +0,0 @@ -package au.id.zancanaro.javacheck; - -import java.io.IOException; -import java.io.Writer; -import java.util.*; -import java.util.function.Function; -import java.util.function.Predicate; - -@SuppressWarnings("unused") -public class RoseTree { - private final T value; - private final Iterable> children; - - public RoseTree(T value, Iterable> children) { - this.value = value; - this.children = children; - } - - public T getValue() { - return value; - } - - public Iterator> getChildren() { - return children.iterator(); - } - - public static RoseTree pure(T value) { - return new RoseTree<>(value, Collections.emptyList()); - } - - public static RoseTree join(RoseTree> tree) { - return new RoseTree<>( - tree.getValue().getValue(), - () -> Iterators.concat( - Iterators.mappingIterator(RoseTree::join, tree.children.iterator()), - tree.getValue().children.iterator())); - } - - private static Iterator[]> permutations(RoseTree[] trees) { - return Iterators.flatten( - Iterators.rangeIterator(trees.length, - index -> Iterators.mappingIterator(child -> { - @SuppressWarnings("unchecked") - RoseTree[] result = (RoseTree[]) new RoseTree[trees.length]; - for (int i = 0; i < trees.length; ++i) { - result[i] = (i == index ? child : trees[i]); - } - return result; - }, trees[index].getChildren()) - )); - } - - private static List makeHeadList(RoseTree[] trees) { - List heads = new ArrayList<>(trees.length); - for (RoseTree tree : trees) { - heads.add(tree.getValue()); - } - return heads; - } - - public static RoseTree zip(Function, R> fn, RoseTree[] trees) { - return new RoseTree<>( - fn.apply(makeHeadList(trees)), - () -> Iterators.mappingIterator( - roses -> RoseTree.zip(fn, roses), - RoseTree.permutations(trees))); - } - - private static Iterator[]> removeEach(RoseTree[] trees) { - return Iterators.concat( - Iterators.rangeIterator(trees.length, index -> { - @SuppressWarnings("unchecked") - RoseTree[] result = (RoseTree[]) new RoseTree[trees.length - 1]; - for (int i = 0; i < trees.length - 1; ++i) { - result[i] = trees[(i >= index ? i + 1 : i)]; - } - return result; - }), - permutations(trees)); - } - - public static RoseTree shrink(Function, R> fn, RoseTree[] trees) { - return new RoseTree<>( - fn.apply(makeHeadList(trees)), - () -> Iterators.mappingIterator( - roses -> RoseTree.shrink(fn, roses), - RoseTree.removeEach(trees))); - } - - public RoseTree map(Function f) { - return new RoseTree<>( - f.apply(this.value), - () -> Iterators.mappingIterator(tree -> tree.map(f), this.children.iterator())); - } - - public RoseTree flatMap(Function> f) { - return RoseTree.join(this.map(f)); - } - - public RoseTree filter(Predicate predicate) { - if (predicate.test(this.getValue())) { - return new RoseTree<>( - this.getValue(), - () -> Iterators.mappingIterator(tree -> tree.filter(predicate), - Iterators.filteringIterator( - tree -> predicate.test(tree.getValue()), - this.getChildren()))); - } else { - throw new IllegalArgumentException("Current value doesn't match predicate: whoops!"); - } - } - - @SuppressWarnings("unused") - public void print(Writer output) throws IOException { - print(output, Object::toString); - } - - @SuppressWarnings("unused") - public void print(Writer output, Function toString) throws IOException { - output.write(toString.apply(this.getValue())); - output.write('['); - for (RoseTree child : children) { - child.print(output, toString); - } - output.write(']'); - output.flush(); - } -} -- cgit v1.2.3