(module language-test-tools mzscheme (require (planet "test.ss" ("schematics" "schemeunit.plt" 2)) "core-calculi.ss") (provide define-tester (all-from (planet "test.ss" ("schematics" "schemeunit.plt" 2)))) (define-shortcut (pre-test-equiv? E term expected) (check α-equivalent? (E term) expected)) (define-syntax define-tester (syntax-rules () [(define-tester name E) (begin (define evaluator E) (define *name* 0) (define (next-name) (begin0 (number->string *name*) (set! *name* (add1 *name*)))) (define-syntax name (syntax-rules () [(name a b) (pre-test-equiv? (next-name) evaluator `a `b)])))])))