diff options
author | Carlo Zancanaro <carlo@zancanaro.id.au> | 2015-05-31 13:53:08 +1000 |
---|---|---|
committer | Carlo Zancanaro <carlo@zancanaro.id.au> | 2015-05-31 13:53:08 +1000 |
commit | c25450f6288748782ad60cc7c4b8e0e0bdc52c1c (patch) | |
tree | d25bd7a6bac5535cdff87fac5cbe0146a59f7b75 /src/main/java/au/id/zancanaro/Generators.java | |
parent | d29e1d49116c66adab72b1c1bb49c1fa3d4f8140 (diff) |
Better code, based off ParentRunner among other things
Diffstat (limited to 'src/main/java/au/id/zancanaro/Generators.java')
-rw-r--r-- | src/main/java/au/id/zancanaro/Generators.java | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/src/main/java/au/id/zancanaro/Generators.java b/src/main/java/au/id/zancanaro/Generators.java index f065d1d..5b025fa 100644 --- a/src/main/java/au/id/zancanaro/Generators.java +++ b/src/main/java/au/id/zancanaro/Generators.java @@ -1,14 +1,21 @@ package au.id.zancanaro; import java.util.Iterator; +import java.util.function.Predicate; public class Generators { - @SafeVarargs - public static <T> Generator<T[]> arrayGenerator(Generator<? extends T>... generators) { - return Generator.tuple((Generator<T>[]) generators); + public static <T> Generator<T> suchThat(Generator<T> gen, Predicate<T> pred) { + return (random, size) -> { + RoseTree<T> result = gen.generate(random, size); + if (pred.test(result.getValue())) { + return result.filter(pred); + } else { + return suchThat(gen, pred).generate(random, size); + } + }; } - public static Generator<Integer> integerGenerator() { + public static Generator<Integer> integer() { return (random, size) -> { int value = random.nextInt(size); return new RoseTree<>(value, intShrinkingIterable(value)); |