Moving my library from Chicken to Chez (when I moved it from Chez to Chicken originally, it was much smaller and I only used a few asserts to test), I discovered that:
testegg is pretty nice but non-standard.
- SRFI-64 (from Thunderchez ) is OK as far as it goes, but has an inadequate test runner (the default just lists PASS/FAIL with no explanation for each test, and has one total). Ridiculous when you have dozens or hundreds of tests.
- There's no good alternative. There's a SchemeUnit which is for PLT Scheme née Racket, and a couple others which aren't SRFI-64 and aren't for Chez.
So I ended up writing my own:
- scheme-test-unit: BSD license, do what thou wilt.
Here's how it works:
#!/usr/bin/env scheme-script ;; example-test.ss (import (chezscheme) (srfi s64 testing) ;; thunderchez (scheme-test-unit) ) (define (all-tests) (test-group "All Tests" (test-group "Math" (test-equal "add" 4 (+ 2 3)) ) (test-group "Strings" (test-equal "append" "foobar" (string-append "foo" "bar")) ) ) ;; test group "All Tests" ) ;; all-tests (define (main argv) (scheme-test-configure argv) (all-tests) ) (main (command-line-arguments)) ---- % chmod 755 example-test.ss % ./example-test.ss --help Usage: scheme-test-configure [-v|--verbose|-q|--quiet|-o FILENAME|--output FILENAME] % ./example-test.ss *** All Tests START *** Math START - add [(+ 2 3)] expected <<<5>>> but got <<<4>>> *** Math END, PASS: 0 / FAIL: 1 *** Strings START + append [(string-append foo bar)] *** Strings END, PASS: 1 / FAIL: 0 *** All Tests END, PASS: 0 / FAIL: 0 FINAL PASS: 1 / FAIL: 1
My own test cases come out:
% ./marklib-test.ss -q *** Control END, PASS: 4 / FAIL: 0 *** Logic END, PASS: 12 / FAIL: 0 *** Math END, PASS: 18 / FAIL: 0 *** Strings END, PASS: 29 / FAIL: 0 *** Any END, PASS: 31 / FAIL: 0 *** Hashtable END, PASS: 9 / FAIL: 0 *** List END, PASS: 6 / FAIL: 0 *** Maybe END, PASS: 6 / FAIL: 0 *** Stack END, PASS: 10 / FAIL: 0 *** Vector END, PASS: 8 / FAIL: 0 *** Data Structures END, PASS: 0 / FAIL: 0 *** Dice END, PASS: 7 / FAIL: 0 *** All Tests END, PASS: 0 / FAIL: 0 FINAL PASS: 140 / FAIL: 0