29 lines
1011 B
JavaScript
29 lines
1011 B
JavaScript
import { skipN } from 'pure-rand';
|
|
import { Random } from '../../random/generator/Random.js';
|
|
import { Value } from '../arbitrary/definition/Value.js';
|
|
import { safeMap } from '../../utils/globals.js';
|
|
function tossNext(generator, rng, index) {
|
|
rng.unsafeJump();
|
|
return generator.generate(new Random(rng), index);
|
|
}
|
|
export function* toss(generator, seed, random, examples) {
|
|
for (let idx = 0; idx !== examples.length; ++idx) {
|
|
yield new Value(examples[idx], undefined);
|
|
}
|
|
for (let idx = 0, rng = random(seed);; ++idx) {
|
|
yield tossNext(generator, rng, idx);
|
|
}
|
|
}
|
|
function lazyGenerate(generator, rng, idx) {
|
|
return () => generator.generate(new Random(rng), idx);
|
|
}
|
|
export function* lazyToss(generator, seed, random, examples) {
|
|
yield* safeMap(examples, (e) => () => new Value(e, undefined));
|
|
let idx = 0;
|
|
let rng = random(seed);
|
|
for (;;) {
|
|
rng = rng.jump ? rng.jump() : skipN(rng, 42);
|
|
yield lazyGenerate(generator, rng, idx++);
|
|
}
|
|
}
|