summaryrefslogtreecommitdiff
path: root/t
diff options
context:
space:
mode:
authorbd <bdunahu@operationnull.com>2025-04-10 01:23:38 -0400
committerbd <bdunahu@operationnull.com>2025-04-10 01:23:38 -0400
commit3eeebe73826906b1c598d5e5d207bfee936ed315 (patch)
tree9b750918dcc606a4a228503201f870249303cc7c /t
parente50d44464db7eb8e1c20755c862466ac8f7419b0 (diff)
Messy data section
Diffstat (limited to 't')
-rw-r--r--t/parse.lisp103
1 files changed, 52 insertions, 51 deletions
diff --git a/t/parse.lisp b/t/parse.lisp
index b32263a..5b23343 100644
--- a/t/parse.lisp
+++ b/t/parse.lisp
@@ -9,54 +9,55 @@
(in-suite parse-tests)
-(test esrap-register-decimal-ten
- (is (equal (list 'parse::rr 10)
- (esrap:parse 'parse::register "$10"))))
-
-(test esrap-register-binary-ten
- (is (equal (list 'parse::rr 10)
- (esrap:parse 'parse::register "$0B1010"))))
-
-(test esrap-register-octal-ten
- (is (equal (list 'parse::rr 10)
- (esrap:parse 'parse::register "$0O12"))))
-
-(test esrap-register-hex-ten
- (is (equal (list 'parse::rr 10)
- (esrap:parse 'parse::register "$0XA"))))
-
-(test esrap-r-type-1
- (is (equal '(parse::r "ADD" (parse::rr 5) (parse::rr 8) (parse::rr 1))
- (esrap:parse 'parse:instr "ADD $1 $5 $8"))))
-
-(test esrap-r-type-2
- (is (equal '(parse::r "NOT" (parse::rr 5) (parse::rr 0) (parse::rr 1))
- (esrap:parse 'parse:instr "NOT $1 $5"))))
-
-(test esrap-r-type-3
- (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 '(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 '(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 '(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) (parse::imm 0))
- (esrap:parse 'parse:instr "PUSH $1"))))
+(test esrap-register-bases
+ (is (equal '(parse::p
+ (parse::t
+ (parse::r "ADD" (parse::rr 10) (parse::rr 10) (parse::rr 10))))
+ (esrap:parse 'parse::str->ast (format nil ".TEXT~%~tADD $0O012 $0B1010 $0XA~%")))))
+
+(test esrap-instr-all-type-r
+ (is (equal
+ '(parse::p
+ (parse::t
+ (parse::r "ADDV" (parse::rr 1) (parse::rr 2) (parse::rr 3))
+ (parse::r "NOT" (parse::rr 4) (parse::rr 0) (parse::rr 5))
+ (parse::r "CMP" (parse::rr 6) (parse::rr 7) (parse::rr 0))))
+ (esrap:parse 'parse::str->ast (format nil ".TEXT~%~tADDV $3 $1 $2
+~tNOT $5 $4~%~tCMP $6 $7~%")))))
+
+(test esrap-instr-all-type-i
+ (is (equal
+ '(parse::p
+ (parse::t
+ (parse::i "LOADV" (parse::rr 8) (parse::rr 9) (parse::imm 1))
+ (parse::i "STORE" (parse::rr 3) (parse::rr 5) (parse::imm 3))
+ (parse::i "ADDI" (parse::rr 5) (parse::rr 4) (parse::imm 2))))
+ (esrap:parse 'parse::str->ast (format nil ".TEXT~%~tLOADV $8 1($9)
+~tSTORE $5 3($3)~%~tADDI $5 $4 2~%")))))
+
+(test esrap-instr-type-all-type-j
+ (is (equal
+ '(parse::p
+ (parse::t
+ (parse::j "JMP" (parse::rr 3) (parse::imm 3))
+ (parse::j "JRL" (parse::rr 0) (parse::l "FOO"))
+ (parse::j "PUSH" (parse::rr 5) (parse::imm 0))))
+ (esrap:parse 'parse::str->ast (format nil ".TEXT~%~tJMP 3($3)
+~tJRL FOO~%~tPUSH $5~%")))))
+
+(test esrap-instr-type-all-lazy-spaces
+ (is (equal
+ '(parse::p
+ (parse::t
+ (parse::j "JMP" (parse::rr 3) (parse::imm 3))
+ (parse::j "JRL" (parse::rr 0) (parse::l "FOO"))
+ (parse::j "PUSH" (parse::rr 5) (parse::imm 0))))
+ (esrap:parse 'parse::str->ast (format nil "~t~%.TEXT~t~%JMP 3($3)~t
+JRL FOO~t~%PUSH $5~%")))))
+
+(test esrap-data-singleton
+ (is (equal
+ '(parse::p
+ (parse::d
+ 1)))
+ (esrap:parse 'parse:str->ast (format nil ".DATA~%~tA 1~%"))))