diff options
author | Louis Pilfold <louis@lpil.uk> | 2023-04-10 10:28:56 +0100 |
---|---|---|
committer | Louis Pilfold <louis@lpil.uk> | 2023-04-10 10:51:24 +0100 |
commit | 52d992c7e82a87b6a6d430ce565fad14ed7952c6 (patch) | |
tree | a0bb28080358bc46569f01e18e59a1a9b656beff /properties | |
parent | c7a77c9c0ce1731e4c849556777465d0b789a955 (diff) | |
download | gleam_stdlib-52d992c7e82a87b6a6d430ce565fad14ed7952c6.tar.gz gleam_stdlib-52d992c7e82a87b6a6d430ce565fad14ed7952c6.zip |
PMap property test
Diffstat (limited to 'properties')
-rw-r--r-- | properties/main_test.ts | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/properties/main_test.ts b/properties/main_test.ts new file mode 100644 index 0000000..669e1d9 --- /dev/null +++ b/properties/main_test.ts @@ -0,0 +1,76 @@ +import fc from "https://cdn.skypack.dev/fast-check"; +import PMap from "../build/dev/javascript/gleam_stdlib/persistent-hash-map.mjs"; + +const options = Object.freeze({ + numRuns: 1000_000, +}); + +Deno.test("all inserted numbers must exist within", () => { + const property = (numbers: Array<number>) => { + let map = PMap.new(); + + // Insert all numbers + for (const number of numbers) { + map = map.set(number, 1); + } + + // Check that all numbers are in the map + for (const number of numbers) { + if (!map.has(number)) { + console.log(`Number ${number} not found`); + return false; + } + } + }; + + const arbitrary = fc.array(fc.integer()); + fc.assert(fc.property(arbitrary, property), options); +}); + +Deno.test("all inserted values can be got", () => { + const property = (numbers: Array<[number, number]>) => { + const reference = new Map(); + let map = PMap.new(); + + // Insert all pairs + for (const [k, v] of numbers) { + reference.set(k, v); + map = map.set(k, v); + } + + // Check that all keys have the correct value + for (const [k, _] of numbers) { + const expected = reference.get(k); + const found = map.get(k, undefined); + if (found !== expected) { + console.log(`${k} was ${found} not ${expected}`); + return false; + } + } + }; + + const arbitrary = fc.array(fc.tuple(fc.integer(), fc.integer())); + fc.assert(fc.property(arbitrary, property), options); +}); + +Deno.test("size", () => { + const property = (numbers: Array<number>) => { + const reference = new Map(); + let map = PMap.new(); + + // Insert all values + for (const k of numbers) { + reference.set(k, 1); + map = map.set(k, 1); + } + + // Map size should match reference + if (map.size !== reference.size) { + console.log(`size was ${map.size} not ${reference.size}`); + return false; + } + }; + + const arbitrary = fc.array(fc.integer()); + fc.assert(fc.property(arbitrary, property), options); +}); |