(import (scheme base) (only (csc testing) assert-equal test) (csc match)) (test match-cond (assert-equal 3 (match 3 ((! 0) 0) ((! 1) 1) ((! 2) 2) ((! 3) 3) (_ 4)))) (test match-list (assert-equal 2 (match '(1 2 3) ('() 0) (((! 1) (! 2)) 1) (((! 1) (! 2) (! 3)) 2) (((! 1) (! 2) (! 3) (! 4)) 3) (_ 4)))) (test match-binding (assert-equal 2 (match '(1 2 3) (((! 1) x (! 3)) x)))) (test match-destructuring (assert-equal 1 (match '(1 2 3) ('() 0) ((head . _) head)))) (test match-ignore (assert-equal 2 (match '(1 2 3) ((_ _ _ _) 0) (((! 2) _ _) 1) (((! 1) _ _) 2) (_ 3)))) (test match-improper-list (assert-equal 2 (match '(1 2 3) (((! 2) . _) 1) (((! 1) . x) (car x)) (_ 3)))) (test match-symbol (assert-equal 2 (match 'b ((! 'a) 1) ((! 'b) 2) (_ 3)))) (test match-when (assert-equal 3 (match 'b ((! 'a) 1) ((! 'b) when #f 2) ((! 'b) when #t 3) (_ 4)))) (test match-when-depending-on-pattern-variable (assert-equal 2 (match 10 (n when (= 1 n) 1) (n when (= 10 n) 2) (_ 3)))) (define-match-record-type (make-test-record-type a b c) test-record-type? %test-record-type (a test-record-type-a) (b test-record-type-b) (c test-record-type-c)) (test match-record-type (assert-equal 2 (match (make-test-record-type 1 2 3) ((% %test-record-type a b c) b)))) (test match-record-type-any (assert-equal #t (match '(1 2 3) ((% %test-record-type . _) #f) ((! '(1 2 3)) #t))))