/** * @tsplus static effect/core/testing/Gen.Ops memo */ export function memo(builder: (maxDepth: number) => Gen) { const previous: { [depth: number]: Gen } = {} let remainingDepth = 10 return (maxDepth?: number): Gen => { const n = maxDepth !== undefined ? maxDepth : remainingDepth if (!Object.prototype.hasOwnProperty.call(previous, n)) { const prev = remainingDepth remainingDepth = n - 1 previous[n] = builder(n) remainingDepth = prev } return previous[n]! } }