Yet another implementation of property based testing framework with support for async properties.
It's based on async generators, therefore it requires nodejs >=10.
npm install rapid-check
Works with any testing framework, here's an example using jest >=23:
const { gen } = require('rapid-check')
const toMatchProperty = require('rapid-check/src/jest.matcher')
expect.extend({ toMatchProperty })
test('Set.has function', async () => {
const prop = (v) => new Set([1, 2, 3]).has(v)
await expect(gen.choose(1, 3)).toMatchProperty(prop)
})
sample(constantly(4))
// [4, 4, 4, 4, ...]
sample(choose(1, 3))
// [2, 1, 3, 1, ...]
sample(bool)
// [true, true, false, true, ...]
sample(int)
// [0, 1, -2, 3, ...]
sample(uint)
// [0, 1, 0, 3, ...]
sample(tuple(uint, uint))
// [[0, 0], [1, 0], [1, 2], [0, 1], ...]
sample(array(uint, 1, 3))
// [[0], [1], [2, 0], [1, 1], [0], [0, 3, 3], ...]
sample(oneOf(bool, uint))
// [true, 1, 2, false, ...]
Where f: a -> b
const negate = (n) => -n
sample(fmap(negate, uint))
// [0, -1, -1, -3, ...]
Where f: a -> Gen b
const f = (n) => ap(tuple, repeat(bool, n))
sample(mbind(f, uint))
// [[], [true], [false, false], [false], ... [true, false, false, true, false], [false]]