simple<T> method
Creates a new, simple Generator that produces values and knows how to simplify them.
Implementation
Generator<T> simple<T>({
required T Function(Random random, int size) generate,
required Iterable<T> Function(T input) shrink,
}) {
// Map both given functions to the semantics of generators: Instead of
// having two top-level functions, we have one function that generates
// `ShrinkableValue`s that each know how the shrink themselves.
late Shrinkable<T> Function(T) generateShrinkable;
generateShrinkable = (T value) {
return Shrinkable(value, () sync* {
for (final value in shrink(value)) {
yield generateShrinkable(value);
}
});
};
return (random, size) {
return generateShrinkable(generate(random, size));
};
}