;; Testing read of nil/true/false
|
|
nil
|
|
;=>nil
|
|
true
|
|
;=>true
|
|
false
|
|
;=>false
|
|
|
|
|
|
;; Testing read of numbers
|
|
1
|
|
;=>1
|
|
7
|
|
;=>7
|
|
7
|
|
;=>7
|
|
|
|
|
|
;; Testing read of symbols
|
|
+
|
|
;=>+
|
|
abc
|
|
;=>abc
|
|
abc
|
|
;=>abc
|
|
abc5
|
|
;=>abc5
|
|
abc-def
|
|
;=>abc-def
|
|
|
|
|
|
;; Testing read of strings
|
|
"abc"
|
|
;=>"abc"
|
|
"abc"
|
|
;=>"abc"
|
|
"abc (with parens)"
|
|
;=>"abc (with parens)"
|
|
"abc\"def"
|
|
;=>"abc\"def"
|
|
;;;"abc\ndef"
|
|
;;;;=>"abc\ndef"
|
|
""
|
|
;=>""
|
|
|
|
|
|
;; Testing read of lists
|
|
(+ 1 2)
|
|
;=>(+ 1 2)
|
|
((3 4))
|
|
;=>((3 4))
|
|
(+ 1 (+ 2 3))
|
|
;=>(+ 1 (+ 2 3))
|
|
( + 1 (+ 2 3 ) )
|
|
;=>(+ 1 (+ 2 3))
|
|
(* 1 2)
|
|
;=>(* 1 2)
|
|
(** 1 2)
|
|
;=>(** 1 2)
|
|
|
|
;; Test commas as whitespace
|
|
(1 2, 3,,,,),,
|
|
;=>(1 2 3)
|
|
|
|
;; Testing read of quoting
|
|
'1
|
|
;=>(quote 1)
|
|
'(1 2 3)
|
|
;=>(quote (1 2 3))
|
|
`1
|
|
;=>(quasiquote 1)
|
|
`(1 2 3)
|
|
;=>(quasiquote (1 2 3))
|
|
~1
|
|
;=>(unquote 1)
|
|
~(1 2 3)
|
|
;=>(unquote (1 2 3))
|
|
~@(1 2 3)
|
|
;=>(splice-unquote (1 2 3))
|
|
|
|
;;
|
|
;; Testing reader errors
|
|
;;; TODO: fix these so they fail correctly
|
|
(1 2
|
|
; expected ')', got EOF
|
|
[1 2
|
|
; expected ']', got EOF
|
|
"abc
|
|
; expected '"', got EOF
|
|
|
|
;;
|
|
;; -------- Optional Functionality --------
|
|
|
|
;; Testing keywords
|
|
:kw
|
|
;=>:kw
|
|
(:kw1 :kw2 :kw3)
|
|
;=>(:kw1 :kw2 :kw3)
|
|
|
|
;; Testing read of vectors
|
|
[+ 1 2]
|
|
;=>[+ 1 2]
|
|
[[3 4]]
|
|
;=>[[3 4]]
|
|
[+ 1 [+ 2 3]]
|
|
;=>[+ 1 [+ 2 3]]
|
|
[ + 1 [+ 2 3 ] ]
|
|
;=>[+ 1 [+ 2 3]]
|
|
|
|
;; Testing read of hash maps
|
|
{"abc" 1}
|
|
;=>{"abc" 1}
|
|
{"a" {"b" 2}}
|
|
;=>{"a" {"b" 2}}
|
|
{"a" {"b" {"c" 3}}}
|
|
;=>{"a" {"b" {"c" 3}}}
|
|
{ "a" {"b" { "cde" 3 } }}
|
|
;=>{"a" {"b" {"cde" 3}}}
|
|
{ :a {:b { :cde 3 } }}
|
|
;=>{:a {:b {:cde 3}}}
|
|
|
|
;; Testing read of comments
|
|
;; whole line comment (not an exception)
|
|
1 ; comment after expression
|
|
;=>1
|
|
1; comment after expression
|
|
;=>1
|
|
|
|
;; Testing read of ^/metadata
|
|
^{"a" 1} [1 2 3]
|
|
;=>(with-meta [1 2 3] {"a" 1})
|
|
|
|
|
|
;; Testing read of @/deref
|
|
@a
|
|
;=>(deref a)
|