;; Brood's unit test. (module test mzscheme (require (lib "match.ss")) (provide define-test tests) (define (perform-test name test) (or (with-handlers (((lambda (ex) #t) (lambda (ex) (printf "test-exception:\n~a\n" ex) #f))) (test)) (error "Test failed:" name))) ;; Immediately execute the test. Note that tests should not leave ;; traces: don't modify global variables. (define-syntax define-test (syntax-rules () ((_ (name) body ...) (let ((test (lambda () body ...))) (perform-test 'name test))))) (define (tests pred? test-pairs) (let next ((lst test-pairs)) (match lst (() #t) ((args . rest) (if (apply pred? args) (next rest) (begin (printf "FAILED: ~a\n" args) #f)))))) )