yorick: Fix evaluation of empty vectors in steps 2 and 3
[jackhill/mal.git] / impls / tests / step3_env.mal
1 ;; Testing REPL_ENV
2 (+ 1 2)
3 ;=>3
4 (/ (- (+ 5 (* 2 3)) 3) 4)
5 ;=>2
6
7
8 ;; Testing def!
9 (def! x 3)
10 ;=>3
11 x
12 ;=>3
13 (def! x 4)
14 ;=>4
15 x
16 ;=>4
17 (def! y (+ 1 7))
18 ;=>8
19 y
20 ;=>8
21
22 ;; Verifying symbols are case-sensitive
23 (def! mynum 111)
24 ;=>111
25 (def! MYNUM 222)
26 ;=>222
27 mynum
28 ;=>111
29 MYNUM
30 ;=>222
31
32 ;; Check env lookup non-fatal error
33 (abc 1 2 3)
34 ;/.*\'?abc\'? not found.*
35 ;; Check that error aborts def!
36 (def! w 123)
37 (def! w (abc))
38 w
39 ;=>123
40
41 ;; Testing let*
42 (let* (z 9) z)
43 ;=>9
44 (let* (x 9) x)
45 ;=>9
46 x
47 ;=>4
48 (let* (z (+ 2 3)) (+ 1 z))
49 ;=>6
50 (let* (p (+ 2 3) q (+ 2 p)) (+ p q))
51 ;=>12
52 (def! y (let* (z 7) z))
53 y
54 ;=>7
55
56 ;; Testing outer environment
57 (def! a 4)
58 ;=>4
59 (let* (q 9) q)
60 ;=>9
61 (let* (q 9) a)
62 ;=>4
63 (let* (z 2) (let* (q 9) a))
64 ;=>4
65
66 ;>>> deferrable=True
67 ;;
68 ;; -------- Deferrable Functionality --------
69
70 ;; Testing let* with vector bindings
71 (let* [z 9] z)
72 ;=>9
73 (let* [p (+ 2 3) q (+ 2 p)] (+ p q))
74 ;=>12
75
76 ;; Testing vector evaluation
77 (let* (a 5 b 6) [3 4 a [b 7] 8])
78 ;=>[3 4 5 [6 7] 8]