diff options
author | bd <bdunahu@operationnull.com> | 2025-04-08 21:41:35 -0400 |
---|---|---|
committer | bd <bdunahu@operationnull.com> | 2025-04-08 21:41:35 -0400 |
commit | 8ceaf87c43d412b758bb7562364f7ae8bee913ae (patch) | |
tree | b5cfedcc055ae8ee836daf9d03e05dfa6b4086f3 /t/parse.lisp | |
parent | b85c10ba1c53f1b442fea6bde4c2a2f73cfe5d6b (diff) |
Add parsing functionality for R-type expressions
Diffstat (limited to 't/parse.lisp')
-rw-r--r-- | t/parse.lisp | 58 |
1 files changed, 54 insertions, 4 deletions
diff --git a/t/parse.lisp b/t/parse.lisp index bd1310f..7187292 100644 --- a/t/parse.lisp +++ b/t/parse.lisp @@ -1,5 +1,11 @@ (in-package #:rva-tests) +(defmacro expect-parse-error (body) + `(handler-case + (progn ,body + (fail)) + (parse::parser-error ()))) + (def-suite parse-tests :description "Test functions exported from the parser." :in all-tests) @@ -20,7 +26,51 @@ (parse:extract-label lst))))) (test extract-line-invalid-type - (handler-case - (progn (parse:tokens->ast '(("foo" LEX::DOLLAR))) - (fail)) - (lex:parser-error ()))) + (expect-parse-error (parse:tokens->ast '(("foo" lex::dollar))))) + +(test to-register-nil + (expect-parse-error (parse:to-register '()))) + +(test to-register-singleton + (expect-parse-error (parse:to-register '(lex::dollar)))) + +(test to-register-zero + (is (= 0 (parse:to-register '(lex::dollar 0))))) + +(test to-register-one + (is (= 1 (parse:to-register '(lex::dollar 1))))) + +(test to-register-twenty-three + (is (= 23 (parse:to-register '(lex::dollar 23))))) + +(test to-register-zero-named + (is (= 0 (parse:to-register '(lex::dollar "zr"))))) + +(test to-register-twenty-four + (expect-parse-error (parse:to-register '(lex::dollar 24)))) + +(test to-register-negative-one + (expect-parse-error (parse:to-register '(lex::dollar -1)))) + +(test extract-r-type-no-registers + (expect-parse-error (parse:extract-r-type '("add") 0))) + +(test extract-r-type-two-registers + (expect-parse-error (parse:extract-r-type '("add" lex::dollar 2 lex::dollar 3) 0))) + +(test extract-r-type-cmp-three-registers + (expect-parse-error (parse:extract-r-type '("cmp" lex::dollar 2 + lex::dollar 3 lex::dollar 4) 0))) + +(test extract-r-type-simple-add + (is (equal '(:op util::ADD :d 2 :s1 3 :s2 4) + (parse:extract-r-type '("add" lex::dollar 2 + lex::dollar 3 lex::dollar 4) 0)))) + +(test extract-r-type-simple-not + (is (equal '(:op util::NOT :d 2 :s1 3 :s2 0) + (parse:extract-r-type '("not" lex::dollar 2 lex::dollar 3) 0)))) + +(test extract-r-type-simple-cmp + (is (equal '(:op util::CMP :d 0 :s1 2 :s2 3) + (parse:extract-r-type '("cmp" lex::dollar 2 lex::dollar 3) 0)))) |