acond-test.rkt (2590B)
1 #lang racket 2 3 (require anaphoric/acond 4 rackunit) 5 6 (define lst '(x y z a b c)) 7 (define seen 0) 8 9 ;; With else branch 10 (check-equal? (acond 11 [(member 'a lst) (set! seen (add1 seen)) 12 (check-equal? it '(a b c)) 13 'seen-01] 14 [(member 'b lst) (fail "acond selected wrong branch")] 15 [else (fail "acond selected wrong branch")]) 16 'seen-01) 17 (check-equal? seen 1) ;; multiple body statements 18 19 (check-equal? (acond 20 [(member 'absent lst) (fail "acond selected wrong branch")] 21 [(member 'b lst) (begin (check-equal? it '(b c)) 22 'seen-02)] 23 [else (fail "acond selected wrong branch")]) 24 'seen-02) 25 26 (check-equal? (acond 27 [(member 'absent lst) (fail "acond selected wrong branch")] 28 [(member 'absent2 lst) (fail "acond selected wrong branch")] 29 [else 'seen-03]) 30 'seen-03) 31 32 ;; Just else branch 33 (check-equal? (acond 34 [else 'seen-04]) 35 'seen-04) 36 37 ;; Multiple body statements 38 39 (check-equal? (acond 40 [(member 'absent lst) (fail "acond selected wrong branch")] 41 [(member 'absent2 lst) (fail "acond selected wrong branch")] 42 [else (set! seen (add1 seen)) 43 'seen-05]) 44 'seen-05) 45 (check-equal? seen 2) 46 47 ;; Without else branch 48 (check-equal? (acond 49 [(member 'a lst) (set! seen (add1 seen)) 50 (check-equal? it '(a b c)) 51 'seen-06] 52 [(member 'b lst) (fail "acond selected wrong branch")]) 53 'seen-06) 54 (check-equal? seen 3) 55 56 (check-equal? (acond 57 [(member 'absent lst) (fail "acond selected wrong branch")] 58 [(member 'b lst) (begin (check-equal? it '(b c)) 59 'seen-07)]) 60 'seen-07) 61 62 (check-equal? (acond 63 [(member 'absent lst) (fail "acond selected wrong branch")] 64 [(member 'absent2 lst) (fail "acond selected wrong branch")]) 65 (void)) 66 67 ;; No branch 68 (check-equal? (acond) 69 (void)) 70 71 ;; Single branch 72 (check-equal? (acond 73 [(member 'a lst) (begin (check-equal? it '(a b c)) 74 'seen-09)]) 75 'seen-09) 76 77 (check-equal? (acond 78 [(member 'absent lst) (fail "acond selected wrong branch")]) 79 (void))