Skip to content

Commit

Permalink
cherry-pick changes in tests from kanaka#592
Browse files Browse the repository at this point in the history
  • Loading branch information
asarhaddon committed Feb 1, 2022
1 parent dea2c90 commit 5255150
Show file tree
Hide file tree
Showing 3 changed files with 45 additions and 89 deletions.
20 changes: 20 additions & 0 deletions impls/tests/step3_env.mal
Original file line number Diff line number Diff line change
Expand Up @@ -85,3 +85,23 @@ y
;; Check that last assignment takes priority
(let* (x 2 x 3) x)
;=>3

;; Check DEBUG-EVAL
(let* (DEBUG-EVAL false) (- 3 1))
;=>2
(let* (DEBUG-EVAL nil) (- 3 1))
;=>2
;;; Some implementations avoid a recursive EVAL when the first element
;;; is a symbol or when map(EVAL, list) encounters a number.
(let* (a 3 b 2 DEBUG-EVAL true) (- a b))
;/EVAL: \(- a b\).*\n1
;; Check the readably pretty-printing option
(let* (DEBUG-EVAL 1) "a")
;/EVAL: "a".*\n"a"
;; Usually false values
(let* (a 3 DEBUG-EVAL ()) a)
;/EVAL: a.*\n3
(let* (a 3 DEBUG-EVAL 0) a)
;/EVAL: a.*\n3
(let* (a 3 DEBUG-EVAL "") a)
;/EVAL: a.*\n3
89 changes: 18 additions & 71 deletions impls/tests/step7_quote.mal
Original file line number Diff line number Diff line change
Expand Up @@ -76,8 +76,6 @@ b
;=>(1 () 2)
(quasiquote (()))
;=>(())
;; (quasiquote (f () g (h) i (j k) l))
;; =>(f () g (h) i (j k) l)

;; Testing unquote
(quasiquote (unquote 7))
Expand Down Expand Up @@ -278,72 +276,21 @@ a
`[splice-unquote 0]
;=>[splice-unquote 0]

;; Debugging quasiquote
(quasiquoteexpand nil)
;=>nil
(quasiquoteexpand 7)
;=>7
(quasiquoteexpand a)
;=>(quote a)
(quasiquoteexpand {"a" b})
;=>(quote {"a" b})
(quasiquoteexpand ())
;=>()
(quasiquoteexpand (1 2 3))
;=>(cons 1 (cons 2 (cons 3 ())))
(quasiquoteexpand (a))
;=>(cons (quote a) ())
(quasiquoteexpand (1 2 (3 4)))
;=>(cons 1 (cons 2 (cons (cons 3 (cons 4 ())) ())))
(quasiquoteexpand (nil))
;=>(cons nil ())
(quasiquoteexpand (1 ()))
;=>(cons 1 (cons () ()))
(quasiquoteexpand (() 1))
;=>(cons () (cons 1 ()))
(quasiquoteexpand (1 () 2))
;=>(cons 1 (cons () (cons 2 ())))
(quasiquoteexpand (()))
;=>(cons () ())
(quasiquoteexpand (f () g (h) i (j k) l))
;=>(cons (quote f) (cons () (cons (quote g) (cons (cons (quote h) ()) (cons (quote i) (cons (cons (quote j) (cons (quote k) ())) (cons (quote l) ())))))))
(quasiquoteexpand (unquote 7))
;=>7
(quasiquoteexpand a)
;=>(quote a)
(quasiquoteexpand (unquote a))
;=>a
(quasiquoteexpand (1 a 3))
;=>(cons 1 (cons (quote a) (cons 3 ())))
(quasiquoteexpand (1 (unquote a) 3))
;=>(cons 1 (cons a (cons 3 ())))
(quasiquoteexpand (1 b 3))
;=>(cons 1 (cons (quote b) (cons 3 ())))
(quasiquoteexpand (1 (unquote b) 3))
;=>(cons 1 (cons b (cons 3 ())))
(quasiquoteexpand ((unquote 1) (unquote 2)))
;=>(cons 1 (cons 2 ()))
(quasiquoteexpand (a (splice-unquote (b c)) d))
;=>(cons (quote a) (concat (b c) (cons (quote d) ())))
(quasiquoteexpand (1 c 3))
;=>(cons 1 (cons (quote c) (cons 3 ())))
(quasiquoteexpand (1 (splice-unquote c) 3))
;=>(cons 1 (concat c (cons 3 ())))
(quasiquoteexpand (1 (splice-unquote c)))
;=>(cons 1 (concat c ()))
(quasiquoteexpand ((splice-unquote c) 2))
;=>(concat c (cons 2 ()))
(quasiquoteexpand ((splice-unquote c) (splice-unquote c)))
;=>(concat c (concat c ()))
(quasiquoteexpand [])
;=>(vec ())
(quasiquoteexpand [[]])
;=>(vec (cons (vec ()) ()))
(quasiquoteexpand [()])
;=>(vec (cons () ()))
(quasiquoteexpand ([]))
;=>(cons (vec ()) ())
(quasiquoteexpand [1 a 3])
;=>(vec (cons 1 (cons (quote a) (cons 3 ()))))
(quasiquoteexpand [a [] b [c] d [e f] g])
;=>(vec (cons (quote a) (cons (vec ()) (cons (quote b) (cons (vec (cons (quote c) ())) (cons (quote d) (cons (vec (cons (quote e) (cons (quote f) ()))) (cons (quote g) ()))))))))
(let* (DEBUG-EVAL true) `nil)
;/EVAL: nil.*\nnil
(let* (DEBUG-EVAL true) `7)
;/EVAL: 7.*\n7
(let* (DEBUG-EVAL true) `a)
;/EVAL: \(quote a\).*\na
(let* (DEBUG-EVAL true) `{"a" b})
;/EVAL: \(quote \{"a" b\}\).*\n\{"a" b\}
(let* (DEBUG-EVAL true) `())
;/EVAL: \(\).*\n\(\)
(let* (DEBUG-EVAL true) `(a 2))
;/EVAL: \(cons \(quote a\) \(cons 2 \(\)\)\).*\n\(a 2\)
(let* (DEBUG-EVAL true) `(~a 3))
;/EVAL: \(cons a \(cons 3 \(\)\)\).*\n\(8 3\)
(let* (DEBUG-EVAL true) `(1 ~@c 3))
;/EVAL: \(cons 1 \(concat c \(cons 3 \(\)\)\)\).*\n\(1 1 "b" "d" 3\)
(let* (DEBUG-EVAL true) `[])
;/EVAL: \(vec \(\)\).*\n\[\]
25 changes: 7 additions & 18 deletions impls/tests/step8_macros.mal
Original file line number Diff line number Diff line change
Expand Up @@ -18,20 +18,8 @@
(unless2 true 7 8)
;=>8

;; Testing macroexpand
(macroexpand (one))
;=>1
(macroexpand (unless PRED A B))
;=>(if PRED B A)
(macroexpand (unless2 PRED A B))
;=>(if (not PRED) A B)
(macroexpand (unless2 2 3 4))
;=>(if (not 2) 3 4)

;; Testing evaluation of macro result
(defmacro! identity (fn* (x) x))
(let* (a 123) (macroexpand (identity a)))
;=>a
(let* (a 123) (identity a))
;=>123

Expand Down Expand Up @@ -84,18 +72,12 @@ x

;; Testing cond macro

(macroexpand (cond))
;=>nil
(cond)
;=>nil
(macroexpand (cond X Y))
;=>(if X Y (cond))
(cond true 7)
;=>7
(cond false 7)
;=>nil
(macroexpand (cond X Y Z T))
;=>(if X Y (cond Z T))
(cond true 7 true 8)
;=>7
(cond false 7 true 8)
Expand Down Expand Up @@ -163,3 +145,10 @@ x
;=>2
(let* (x 3) (a))
;=>2

(let* (DEBUG-EVAL true) (unless x foo (- 4 3)))
;/EVAL: \(if x \(- 4 3\) foo\).*\n1
(let* (DEBUG-EVAL true) (unless2 x foo (- 4 3)))
;/EVAL: \(if \(not x\) foo \(- 4 3\)\).*\n1
(let* (DEBUG-EVAL true) (cond x (- 4 3) foo bar))
;/EVAL: \(if x \(- 4 3\) \(cond foo bar\)\).*\n1

0 comments on commit 5255150

Please sign in to comment.