(define-syntax define-test-application (syntax-rules () ((_ name (args ...)) (define-test-application "loop" name (args ...) () ())) ((_ "loop" name ((default) args ...) (rest ...) ids) (define-test-application "loop" name (args ...) ((#f default) rest ...) ids)) ((_ "loop" name (arg args ...) (rest ...) (ids ...)) (define-test-application "loop" name (args ...) ((arg tmp) rest ...) (tmp ids ...))) ((_ "loop" name () stuff ids) (define-test-application "reverse1" name stuff ids ())) ((_ "reverse1" name (pair rest ...) ids (acc ...)) (define-test-application "reverse1" name (rest ...) ids (pair acc ...))) ((_ "reverse1" name () ids pairs) (define-test-application "reverse2" name ids () pairs)) ((_ "reverse2" name (id1 id2 ...) (acc ...) pairs) (define-test-application "reverse2" name (id2 ...) (id1 acc ...) pairs)) ((_ "reverse2" name () (ids ...) (pairs ...)) (define-syntax name (syntax-rules () ((_ ids ...) (name #f ids ...)) ((_ test-name ids ...) (test-named-application test-name pairs ...)))))))