summaryrefslogtreecommitdiff
path: root/t
diff options
context:
space:
mode:
Diffstat (limited to 't')
-rw-r--r--t/lex.lisp104
-rw-r--r--t/parse.lisp24
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"))))