aboutsummaryrefslogtreecommitdiffstats
path: root/match-test.csc
blob: 2728e44d056c30cb710c173cb3aa3f23c9097f0e (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
(import (scheme base)
        (only (csc testing) define-test errorf subtest)
        (csc match))


(define-test (test-match t)
  (define-record-type <test-case>
    (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)
                     (_ 4))
                   3)
                 (test-case
                   "match-list"
                   (match '(1 2 3)
                     ('() 0)
                     ((1 2) 1)
                     ((1 2 3) 2)
                     ((1 2 3 4) 3)
                     (_ 4))
                   2)
                 (test-case
                   "binding"
                   (match '(1 2 3)
                     ((1 (! x) 3) x))
                   2)
                 (test-case
                   "ignore"
                   (match '(1 2 3)
                     ((_ _ _ _) 0)
                     ((2 _ _) 1)
                     ((1 _ _) 2)
                     (_ 3))
                   2))))
    (for-each
      (lambda (tc)
        (subtest t (name tc)
          (unless (equal? (expr tc) (want tc))
            (errorf t "match = {}, want {}." (expr tc) (want tc)))))
      tests)))