summaryrefslogtreecommitdiff
path: root/src/lexer-test.lisp
diff options
context:
space:
mode:
Diffstat (limited to 'src/lexer-test.lisp')
-rw-r--r--src/lexer-test.lisp119
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 "")))