fast-spec
Discover laws in your code like with QuickSpec
In a nutshell
Have you ever wonder what could be the laws that rule your code? The complex relations there might be between two distinct functions?
fast-spec is able to help you discovering them.
Example
Let's find the laws that link concat, reverse and [] together.
import * as fc from "fast-check";
import { funcDef, instDef, varDef, findSpecs } from "fast-spec";
findSpecs([
funcDef("concat", 2, (a, b) => [...a, ...b]),
funcDef("reverse", 1, (a) => [...a].reverse()),
instDef("[]", []),
varDef("x", fc.array(fc.char()))
], {
numSamples: 100,
complexity: 2,
numFuzz: 100
})
fast-spec will be able to find relationships like:
- concat([], []) = []
- concat([], x0) == x0
- concat(x0, []) == x0
- concat(concat(x0, x1), x2) == concat(x0, concat(x1, x2))
- concat(reverse(x0), reverse(x1)) == reverse(concat(x1, x0))
- reverse([]) = []
- reverse(reverse(x0)) == x0
- ...
Live example available at https://runkit.com/dubzzz/hello-world-fast-spec-v2