and-let-test.rkt (1329B)
1 #lang racket 2 3 (require anaphoric/and-let 4 rackunit) 5 6 (define lst '(x b 2 y z a b c 1 2 3)) 7 8 (check-equal? (and-let) 9 #t) 10 11 (check-equal? (and-let 42) 12 42) 13 14 (check-equal? (and-let #f) 15 #f) 16 17 (check-equal? (and-let [v1 (member 'y lst)] 18 v1) 19 '(y z a b c 1 2 3)) 20 21 (check-equal? (and-let [v1 (member 'y lst)] 22 [v2 (member 'b v1)] 23 [v3 (member '2 v2)] 24 (list v1 v2 v3)) 25 '((y z a b c 1 2 3) 26 (b c 1 2 3) 27 (2 3))) 28 29 (check-equal? (let ([v1 'outer] 30 [v2 'outer] 31 [v3 'outer]) 32 (and-let [v1 (member 'y lst)] 33 [v2 (member 'b v1)] 34 [v3 (member '2 v2)] 35 (list v1 v2 v3))) 36 '((y z a b c 1 2 3) 37 (b c 1 2 3) 38 (2 3))) 39 40 (check-equal? (let ([v1 'outer]) 41 (and-let [v1 (member 'absent lst)] 42 (fail "aand selected wrong branch"))) 43 #f) 44 45 (check-equal? (let ([v1 'outer] 46 [v2 'outer]) 47 (and-let [v1 (member 'y lst)] 48 [v2 (member 'x v1)] 49 (fail "aand selected wrong branch"))) 50 #f)