summaryrefslogtreecommitdiff
path: root/t/lex.lisp
diff options
context:
space:
mode:
authorbd <bdunahu@operationnull.com>2025-04-03 01:07:13 -0400
committerbd <bdunahu@operationnull.com>2025-04-03 01:07:13 -0400
commit4d8ffb6a29285f12d9ebd788727d633550510d7f (patch)
treece6e4a79d7c9e4fb093517ebdceb2fecd64a6a9d /t/lex.lisp
parentca8d176ac7745986c4e3a92ed7cea277e344262d (diff)
Add lexing for immediates, keywords, and associated tests
Diffstat (limited to 't/lex.lisp')
-rw-r--r--t/lex.lisp46
1 files changed, 37 insertions, 9 deletions
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 ())))