test/check
A
checker for algebraic properties.
(=:= f g x)
Macro defined at lib/test/check.lisp:141:2
Express that the functions F
and G
are equivalent at the point X
.
Example:
> (check [(number a)]
. (=:= id (compose id id) a))
out = true
(check bindings &props)
Macro defined at lib/test/check.lisp:56:2
Check a set of properties against a set of random variables 100 times.
This can be used as a rudimentary algebraic property checker, where
BINDINGS
is the list of universally-quantified variables and PROPS
is
the list of properties you’re checking.
Example:
> (check [(number a)]
. (= a a))
out = true
> (check [(number a)]
. (= a (+ 1 a)))
(= a (+ 1 a)) falsified after 1 iteration(s)
falsifying set of values:
the number, a, had the value 3867638440
out = nil
The property is checked against a different set of random values every iteration. This library has the ability to generate random numbers, strings, symbols, booleans, keys and lists.
(forall var prop)
Macro defined at lib/test/check.lisp:154:2
Check that PROP
holds across all possible points. This is a
restricted version of check
that does not allow specifying
several variables.
VAR
may be either a single, in which case it is interpreted as
being a variable name, or a list with a type and the variable
name.
Example:
> (forall a (eq? a (id a)))
out = true
(tripping f g x)
Macro defined at lib/test/check.lisp:122:2
Express that the composition of the functions F
and G
(in order!)
are equivalent to the identity, on the argument X
.
As an example, consider a pair of encoding and decoding functions:
Decoding an encoded datum should be equivalent to the originally
encoded datum. Algebraically, we express this as
(forall a (=:= (compose f g) id a))
.
Example:
> (check [(number a)]
. (tripping tonumber tostring a))
out = true