From b8d51740ef8236639b7ac1eada6cf1a64750529a Mon Sep 17 00:00:00 2001 From: Arnaud Bailly Date: Sun, 26 Jan 2025 12:25:24 +0100 Subject: Move shared code to library --- pbt/ts/src/property.ts | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) (limited to 'pbt/ts/src/property.ts') diff --git a/pbt/ts/src/property.ts b/pbt/ts/src/property.ts index a8c59ba..d4eea28 100644 --- a/pbt/ts/src/property.ts +++ b/pbt/ts/src/property.ts @@ -64,3 +64,40 @@ export function property( return { result: 'OK', tests: i, counterexample: null }; }; } + +// basic generators + +export function listOf(gen: Gen): Gen { + return (rng: Prando) => { + let g = gen(rng); + return (size: number) => { + let result = []; + for (let i = 0; i < size; i++) { + result.push(g(size)); + } + return result; + }; + }; +} + +export function shrinklist(arr: A[]): A[][] { + let result = []; + + let tail = arr.slice(1); + let keep1 = arr.slice(); + keep1.splice(1, 1); + result.push(tail,keep1); + + if (arr.length >3) { + let half = Math.floor(arr.length / 2); + let copy = arr.slice(); + let secondHalf = copy.slice(half); + result.push(secondHalf); + } + + return result; +} + +export let someInt : Gen = (rng: Prando) => + (size: number) => + rng.nextInt(-size, size); -- cgit v1.2.3