A minimal testing module for kdb+/q. Provides assertion primitives and a test runner, packaged as a kdb-x module.
Place the cutie directory on your module search path ($QHOME/mod by default).
Load the module and bind it to a name:
qt: use`cutie
Define test functions — any function named test_* in the root namespace is automatically discovered:
test_add:{ qt.eq[1+1; 2; "integer addition"] }; test_sqrt:{ qt.near[sqrt 2; 1.41421356; 1e-7; "sqrt 2"] };
Run all tests:
qt.run[]
Example output:
[PASS] test_add
[PASS] test_sqrt
2 tests, 2 passed, 0 failed
On failure:
[PASS] test_add
[FAIL] test_sqrt
2 tests, 1 passed, 1 failed
FAILURES:
─────────
test_sqrt:
NEAR: sqrt 2
expected: 1.41421356 +/-1e-07
actual: 1.414213562373095
You can also run a specific subset of tests by passing a list of symbols:
qt.run`test_add`test_sqrt
Asserts a ~ e (structural equality). Fails if they differ in value or type.
qt.eq[1+1; 2; "basic addition"] qt.eq[`foo; `foo; "symbol identity"] qt.eq[(1;`a;"x"); (1;`a;"x"); "mixed list"] / Note: int and float are NOT structurally equal qt.neq[1; 1f; "int vs float"]
Asserts a and e are not structurally equal.
qt.neq[`a; `b; "distinct symbols"]
Asserts condition c is 1b.
qt.true[3>2; "3 is greater than 2"] qt.true[`b in `a`b`c; "symbol membership"]
Asserts condition c is 0b.
qt.false[1>2; "1 is not greater than 2"]
Asserts abs[a-e] < t. Use this instead of eq when comparing floats.
qt.near[sqrt 2; 1.41421356; 1e-7; "sqrt 2"] qt.near[1%3; 0.3333333; 1e-6; "reciprocal"]
Like near, but for float vectors — asserts all t > abs a-e.
a: 1 2 3f; qt.allnear[a%max a; 0.333333 0.666667 1f; 1e-5; "normalised vector"]
Runs tests and prints results. Pass () or call as qt.run[] to auto-discover all test_* functions in the root namespace. Pass a symbol list to run specific tests.
Returns the count of failures (0 on full pass).
Returns a list of all test_* symbols found in the root namespace. Useful for inspecting what would be run before calling qt.run[].
See example.q for a runnable file that exercises every primitive.