diff options
Diffstat (limited to 'src/lexer-test.lisp')
-rw-r--r-- | src/lexer-test.lisp | 119 |
1 files changed, 119 insertions, 0 deletions
diff --git a/src/lexer-test.lisp b/src/lexer-test.lisp new file mode 100644 index 0000000..cf3ba03 --- /dev/null +++ b/src/lexer-test.lisp @@ -0,0 +1,119 @@ +(in-package :monkey) + +(defun make-tokens (&rest tokens) + (loop :for token :in tokens + :if (consp token) + :collect (make-token (car token) (cadr token)) + :if (numberp token) + :collect (as-token token))) + +(defun test-lexer (str expect) + (let ((lexer (make-lexer str))) + (not (find nil (mapcar #'token= (lexer-tokens lexer) expect))))) + + +(defun test-1 () + (test-lexer "=+(){},;" + (make-tokens token-= + token-+ + token-lparen + token-rparen + token-lbrace + token-rbrace + token-comma + token-semicolon + token-eof))) + + +(defun test-2 () + (test-lexer "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; +" + (make-tokens token-let + (list token-ident "five") + token-= + (list token-int "5") + token-semicolon + token-let + (list token-ident "ten") + token-= + (list token-int "10") + token-semicolon + token-let + (list token-ident "add") + token-= + token-function + token-lparen + (list token-ident "x") + token-comma + (list token-ident "y") + token-rparen + token-lbrace + (list token-ident "x") + token-+ + (list token-ident "y") + token-rbrace + token-semicolon + token-let + (list token-ident "result") + token-= + (list token-ident "add") + token-lparen + (list token-ident "five") + token-comma + (list token-ident "ten") + token-rparen + token-semicolon + token-! + token-- + token-/ + token-* + token-semicolon + (list token-int "5") + token-< + (list token-int "10") + token-> + (list token-int "5") + token-semicolon + (list token-if "if") + token-lparen + (list token-int "5") + token-< + (list token-int "10") + token-rparen + token-lbrace + token-return + token-true + token-semicolon + token-rbrace + token-else + token-lbrace + token-return + token-false + token-semicolon + token-rbrace + (list token-int "10") + token-== + (list token-int "10") + token-semicolon + (list token-int "10") + token-!= + (list token-int "9") + token-semicolon + token-eof ""))) |