From 4d8ffb6a29285f12d9ebd788727d633550510d7f Mon Sep 17 00:00:00 2001 From: bd Date: Thu, 3 Apr 2025 01:07:13 -0400 Subject: Add lexing for immediates, keywords, and associated tests --- t/lex.lisp | 46 +++++++++++++++++++++++++++++++++++++--------- 1 file changed, 37 insertions(+), 9 deletions(-) (limited to 't/lex.lisp') diff --git a/t/lex.lisp b/t/lex.lisp index e210ecb..40698f9 100644 --- a/t/lex.lisp +++ b/t/lex.lisp @@ -14,6 +14,11 @@ (read-this "" (is (not (lex:read-token))))) +(test read-token-reads-nl + (read-this " +" + (is (eq (lex:read-token) 'lex::nl)))) + (test read-token-reads-left-paren (read-this "(" (is (eq (lex:read-token) 'lex::left-paren)))) @@ -22,6 +27,10 @@ (read-this ")" (is (eq (lex:read-token) 'lex::right-paren)))) +(test read-token-reads-left-paren + (read-this "$" + (is (eq (lex:read-token) 'lex::dollar)))) + (test read-token-ignores-space (read-this " (" (is (eq (lex:read-token) 'lex::left-paren)))) @@ -30,16 +39,35 @@ (read-this " (" (is (eq (lex:read-token) 'lex::left-paren)))) -(test read-token-ignores-newline - (read-this " -(" - (is (eq (lex:read-token) 'lex::left-paren)))) - (test read-token-ignores-comment (read-this "; this is a comment (" - (is (eq (lex:read-token) 'lex::left-paren)))) + (is (eq (lex:read-token) 'lex::nl)))) -(test read-token-ignores-comment-eof - (read-this ";" - (is (not (lex:read-token))))) +(test read-token-immediate-zero + (read-this "0" + (is (= (lex:read-token) 0)))) + +(test read-token-immediate-all-digits + (read-this "123456789" + (is (= (lex:read-token) 123456789)))) + +(test read-token-immediate-invalid-immediate + (handler-case + (progn (read-this "0v0" (lex:read-token)) + (fail)) + (lex:invalid-immediate-or-keyword ()))) + +(test read-token-keyword-single + (read-this "a" + (is (string= (lex:read-token) "a")))) + +(test read-token-keyword-add + (read-this "addi" + (is (string= (lex:read-token) "addi")))) + +(test read-token-immediate-invalid-keyword + (handler-case + (progn (read-this "sub0" (lex:read-token)) + (fail)) + (lex:invalid-immediate-or-keyword ()))) -- cgit v1.2.3