(in-package :monkey/test) (deftest (:lexer test-1) "=+(){},;" (:t/= :t/+ :t/lparen :t/rparen :t/lbrace :t/rbrace :t/comma :t/semicolon :t/eof)) (deftest (:lexer test-2) "let five = 5; let ten = 10; let add = fn(x, y) { x + y; }; let result = add(five, ten); !-/*; 5 < 10 > 5; if (5 < 10) { return true; } else { return false; } 10 == 10; 10 != 9; " (:t/let "five" :t/= 5 #\; :t/let "ten" :t/= 10 #\; :t/let "add" :t/= :t/function #\( "x" :t/comma "y" #\) #\{ "x" :t/+ "y" #\; #\} #\; :t/let "result" :t/= "add" #\( "five" :t/comma "ten" #\) #\; :t/! :t/- :t// :t/* #\; 5 :t/< 10 :t/> 5 #\; :t/if #\( 5 :t/< 10 #\) #\{ :t/return :t/true #\; #\} :t/else #\{ :t/return :t/false #\; #\} 10 :t/== 10 #\; 10 :t/!= 9 #\; :t/eof)) (eval-when () (deftest (:lexer test-fail) "abc gf 5 fn =+(){},;" (:t/= :t/+ :t/lparen :t/rparen :t/lbrace :t/rbrace :t/comma :t/semicolon :t/eof)) (deftest (:lexer test-fail-2) "let abc x + 5;" (:t/let "abc" :t/= "x" :t/+ 5 :t/eof)))