T
- The type of the arbitrary object.@FunctionalInterface public interface Arbitrary<T>
Modifier and Type | Method and Description |
---|---|
Gen<T> |
apply(int size)
Returns a generator for objects of type T.
|
default Arbitrary<T> |
filter(Predicate<? super T> predicate)
Returns an Arbitrary based on this Arbitrary which produces values that fulfill the given predicate.
|
default <U> Arbitrary<U> |
flatMap(Function<? super T,? extends Arbitrary<? extends U>> mapper)
Maps arbitrary objects T to arbitrary object U.
|
static Arbitrary<Integer> |
integer()
Generates arbitrary integer values.
|
static <T> Arbitrary<List<T>> |
list(Arbitrary<T> arbitraryT)
Generates arbitrary lists based on a given element generator arbitraryT.
|
default <U> Arbitrary<U> |
map(Function<? super T,? extends U> mapper)
Maps arbitrary objects T to arbitrary object U.
|
default Arbitrary<T> |
peek(Consumer<? super T> action) |
static <T> Arbitrary<Stream<T>> |
stream(Arbitrary<T> arbitraryT)
Generates arbitrary streams based on a given element generator arbitraryT.
|
static Arbitrary<String> |
string(Gen<Character> gen)
Generates arbitrary strings based on a given alphabet represented by gen.
|
default <U> U |
transform(Function<? super Arbitrary<T>,? extends U> f)
Transforms this
Arbitrary . |
Gen<T> apply(int size)
Gen.map(Function)
and Gen.flatMap(Function)
to
combine object generators.
Example:
// represents arbitrary binary trees of a certain depth n
final class ArbitraryTree implements Arbitrary<BinaryTree<Integer>> {
@Override
public Gen<BinaryTree<Integer>> apply(int n) {
return Gen.choose(-1000, 1000).flatMap(value -> {
if (n == 0) {
return Gen.of(BinaryTree.leaf(value));
} else {
return Gen.frequency(
Tuple.of(1, Gen.of(BinaryTree.leaf(value))),
Tuple.of(4, Gen.of(BinaryTree.branch(apply(n / 2).get(), value, apply(n / 2).get())))
);
}
});
}
}
// tree generator with a size hint of 10
final Gen<BinaryTree<Integer>> treeGen = new ArbitraryTree().apply(10);
// stream sum of tree node values to console for 100 arbitrary trees
Stream.of(() -> treeGen.apply(RNG.get())).map(Tree::sum).take(100).stdout();
size
- A (not necessarily positive) size parameter which may be interpreted individually and is constant for all arbitrary objects regarding one property check.default Arbitrary<T> filter(Predicate<? super T> predicate)
predicate
- A predicatedefault <U> Arbitrary<U> flatMap(Function<? super T,? extends Arbitrary<? extends U>> mapper)
U
- New type of arbitrary objectsmapper
- A function that maps arbitrary Ts to arbitrary Us given a mapper.default <U> Arbitrary<U> map(Function<? super T,? extends U> mapper)
U
- Type of the mapped objectmapper
- A function that maps an arbitrary T to an object of type U.default <U> U transform(Function<? super Arbitrary<T>,? extends U> f)
Arbitrary
.U
- Type of transformation resultf
- A transformationU
NullPointerException
- if f
is nullstatic Arbitrary<Integer> integer()
static Arbitrary<String> string(Gen<Character> gen)
Example:
Arbitrary.string(
Gen.frequency(
Tuple.of(1, Gen.choose('A', 'Z')),
Tuple.of(1, Gen.choose('a', 'z')),
Tuple.of(1, Gen.choose('0', '9'))));
gen
- A character generatorstatic <T> Arbitrary<List<T>> list(Arbitrary<T> arbitraryT)
Example:
Arbitrary.list(Arbitrary.integer());
T
- Component type of the ListarbitraryT
- Arbitrary elements of type Tstatic <T> Arbitrary<Stream<T>> stream(Arbitrary<T> arbitraryT)
Example:
Arbitrary.stream(Arbitrary.integer());
T
- Component type of the StreamarbitraryT
- Arbitrary elements of type TCopyright © 2016. All Rights Reserved.