(import (scheme base) (only (csc testing) define-test errorf subtest) (csc match)) (define-test (test-match t) (define-record-type (test-case name expr want) test-case? (name name) (expr expr) (want want)) (let ((tests (list (test-case "simple" (match 3 (0 0) (1 1) (2 2) (3 3) (else 4)) 3) (test-case "match-list" (match '(1 2 3) ('() 0) ((1 2) 1) ((1 2 3) 2) ((1 2 3 4) 3) (else 4)) 2) (test-case "binding" (match '(1 2 3) ((1 (! x) 3) x)) 2)))) (for-each (lambda (tc) (subtest t (name tc) (unless (equal? (expr tc) (want tc)) (errorf t "match = {}, want {}." (expr tc) (want tc))))) tests)))