diff options
Diffstat (limited to 't')
-rw-r--r-- | t/lex.lisp | 104 | ||||
-rw-r--r-- | t/parse.lisp | 24 |
2 files changed, 14 insertions, 114 deletions
diff --git a/t/lex.lisp b/t/lex.lisp deleted file mode 100644 index 98d7c28..0000000 --- a/t/lex.lisp +++ /dev/null @@ -1,104 +0,0 @@ -(in-package #:rva-tests) - -(defmacro read-this (str &body body) - `(let ((*standard-input* (make-string-input-stream ,str))) - ,@body)) - -(def-suite lex-tests - :description "Test functions exported from the lexer." - :in all-tests) - -(in-suite lex-tests) - -(test read-token-reads-eof - (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::period)))) - -(test read-token-reads-left-paren - (read-this "(" - (is (eq (lex:read-token) 'lex::left-paren)))) - -(test read-token-reads-right-paren - (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-reads-plus - (read-this "+" - (is (eq (lex:read-token) 'lex::plus)))) - -(test read-token-reads-minus - (read-this "-" - (is (eq (lex:read-token) 'lex::minus)))) - -(test read-token-ignores-space - (read-this " (" - (is (eq (lex:read-token) 'lex::left-paren)))) - -(test read-token-ignores-tab - (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::nl)))) - -(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-binary - (read-this "0b00101010" - (is (= (lex:read-token) 42)))) - -(test read-token-immediate-octal - (read-this "0o052" - (is (= (lex:read-token) 42)))) - -(test read-token-immediate-hexadecimal - (read-this "0x200" - (is (= (lex:read-token) 512)))) - -(test read-token-immediate-invalid-immediate - (handler-case - (progn (read-this "0v0" (lex:read-token)) - (fail)) - (lex:lexer-error ()))) - -;; do we want a custom error for this too? -(test read-token-immediate-radix - (handler-case - (progn (read-this "0x" (lex:read-token)) - (fail)) - (sb-int:simple-parse-error ()))) - -(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:lexer-error ()))) diff --git a/t/parse.lisp b/t/parse.lisp index 77db380..a9de6db 100644 --- a/t/parse.lisp +++ b/t/parse.lisp @@ -37,22 +37,26 @@ (is (equal '(parse::r "CMP" (parse::rr 1) (parse::rr 5) (parse::rr 0)) (esrap:parse 'parse:instr "CMP $1 $5")))) -;; (test esrap-i-type-1 -;; (is (equal (list 'parse::i "LOAD" (list 'parse::rr 8) (list 'parse::rr 9) (list 'parse::r 1)) -;; (esrap:parse 'parse:instr "LOAD $8 1($9)")))) +(test esrap-i-type-1 + (is (equal '(parse::i "LOAD" (parse::rr 8) (parse::rr 9) (parse::imm 1)) + (esrap:parse 'parse:instr "LOAD $8 1($9)")))) -;; (test esrap-i-type-2 -;; (is (equal (list 'parse::i "STORE" (list 'parse::rr 3) (list 'parse::rr 5) (list 'parse::rr 3)) -;; (esrap:parse 'parse:instr "STORE $5 3($3)")))) +(test esrap-i-type-2 + (is (equal '(parse::i "STORE" (parse::rr 3) (parse::rr 5) (parse::imm 3)) + (esrap:parse 'parse:instr "STORE $5 3($3)")))) -;; (test esrap-i-type-3 -;; (is (equal (list 'parse::i "ORI" (list 'parse::rr 5) (list 'parse::rr 4) (list 'parse::r 2)) -;; (esrap:parse 'parse:instr "ORI $5 $4 2")))) +(test esrap-i-type-3 + (is (equal '(parse::i "ORI" (parse::rr 5) (parse::rr 4) (parse::imm 2)) + (esrap:parse 'parse:instr "ORI $5 $4 2")))) + +(test esrap-j-type-1 + (is (equal '(parse::j "JMP" (parse::rr 3) (parse::imm 3)) + (esrap:parse 'parse:instr "JMP 3($3)")))) (test esrap-j-type-2 (is (equal '(parse::j "JRL" (parse::rr 0) (parse::l "FOO")) (esrap:parse 'parse:instr "JRL FOO")))) (test esrap-j-type-3 - (is (equal '(parse::j "PUSH" (parse::rr 1) 0) + (is (equal '(parse::j "PUSH" (parse::rr 1) (parse::imm 0)) (esrap:parse 'parse:instr "PUSH $1")))) |