diff options
author | bd <bdunahu@operationnull.com> | 2025-04-10 03:53:43 -0400 |
---|---|---|
committer | bd <bdunahu@operationnull.com> | 2025-04-10 03:53:43 -0400 |
commit | df508744ec2975cec0ba05e8a4358c1c41265c4c (patch) | |
tree | ce8ee03b9d25b739a2e687c69b14d9221420e4fa /t | |
parent | 41baa17a9855bc970becf3dab02f7014753b45db (diff) |
Add untested (but works on the single input file) code emission
Diffstat (limited to 't')
-rw-r--r-- | t/parse.lisp | 139 | ||||
-rw-r--r-- | t/util.lisp | 16 |
2 files changed, 89 insertions, 66 deletions
diff --git a/t/parse.lisp b/t/parse.lisp index 9562e1d..3c29dbc 100644 --- a/t/parse.lisp +++ b/t/parse.lisp @@ -10,104 +10,123 @@ (in-suite parse-tests) (test esrap-register-bases - (is (equal '(parse::p - (parse::x - (parse::r "ADD" (parse::rr 10) (parse::rr 10) (parse::rr 10)))) - (esrap:parse 'parse::str->ast (format nil ".TEXT~%~tADD $0O012 $0B1010 $0XA~%"))))) + (is (equal '(emit::p + (emit::d) + (emit::x + (emit::r "ADD" (emit::rr 10) (emit::rr 10) (emit::rr 10)))) + (esrap:parse 'parse:str->ast (format nil ".DATA~%.TEXT~%~tADD $0O012 $0B1010 $0XA~%"))))) (test esrap-instr-all-type-r (is (equal - '(parse::p - (parse::x - (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 + '(emit::p + (emit::d) + (emit::x + (emit::r "ADDV" (emit::rr 1) (emit::rr 2) (emit::rr 3)) + (emit::r "NOT" (emit::rr 4) (emit::rr 0) (emit::rr 5)) + (emit::r "CMP" (emit::rr 6) (emit::rr 7) (emit::rr 0)))) + (esrap:parse 'parse:str->ast (format nil ".DATA~%.TEXT~%~tADDV $3 $1 $2 ~tNOT $5 $4~%~tCMP $6 $7~%"))))) (test esrap-instr-all-type-i (is (equal - '(parse::p - (parse::x - (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) + '(emit::p + (emit::d) + (emit::x + (emit::i "LOADV" (emit::rr 8) (emit::rr 9) (emit::imm 1)) + (emit::i "STORE" (emit::rr 3) (emit::rr 5) (emit::imm 3)) + (emit::i "ADDI" (emit::rr 5) (emit::rr 4) (emit::imm 2)))) + (esrap:parse 'parse:str->ast (format nil ".DATA~%.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::x - (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) + '(emit::p + (emit::d) + (emit::x + (emit::j "JMP" (emit::rr 3) (emit::imm 3)) + (emit::j "JRL" (emit::rr 0) (emit::l "FOO" 8)) + (emit::j "PUSH" (emit::rr 5) (emit::imm 0)))) + (esrap:parse 'parse:str->ast (format nil ".DATA~%.TEXT~%~tJMP 3($3) ~tJRL FOO~%~tPUSH $5~%"))))) +(test esrap-instr-type-i-negative + (is (equal + '(emit::p + (emit::d) + (emit::x + (emit::i "LOADV" (emit::rr 8) (emit::rr 3) (emit::imm -3)))) + (esrap:parse 'parse:str->ast (format nil ".DATA~%.TEXT~%~tLOADV $8 -3($3)~%"))))) + (test esrap-instr-type-i-vars (is (equal - '(parse::p - (parse::x - (parse::i "LOADV" (parse::rr 8) (parse::rr 0) (parse::var "vector")) - (parse::i "STORE" (parse::rr 0) (parse::rr 5) (parse::var "int")))) - (esrap:parse 'parse::str->ast (format nil ".TEXT~%~tLOADV $8 vector + '(emit::p + (emit::d) + (emit::x + (emit::i "LOADV" (emit::rr 8) (emit::rr 0) (emit::var "vector")) + (emit::i "STORE" (emit::rr 0) (emit::rr 5) (emit::var "int")))) + (esrap:parse 'parse:str->ast (format nil ".DATA~%.TEXT~%~tLOADV $8 vector ~tSTORE $5 int~%"))))) (test esrap-instr-type-all-lazy-spaces (is (equal - '(parse::p - (parse::x - (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 + '(emit::p + (emit::d) + (emit::x + (emit::j "JMP" (emit::rr 3) (emit::imm 3)) + (emit::j "JRL" (emit::rr 0) (emit::l "FOO" 14)) + (emit::j "PUSH" (emit::rr 5) (emit::imm 0)))) + (esrap:parse 'parse:str->ast (format nil ".DATA~%~%.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~%"))))) + '(emit::p + (emit::d + 1) + (emit::x)) + (esrap:parse 'parse:str->ast (format nil ".DATA~%~tA 1~%.TEXT~%"))))) (test esrap-data-loaded (is (equal - '(parse::p - (parse::d - 1 2 3 4 5 6 7 8)) - (esrap:parse 'parse:str->ast (format nil ".DATA~%~tB 1 2 3 4 5 6 7 8~%"))))) + '(emit::p + (emit::d + 1 2 3 4 5 6 7 8) + (emit::x)) + (esrap:parse 'parse:str->ast (format nil ".DATA~%~tB 1 2 3 4 5 6 7 8 +.TEXT~%"))))) (test esrap-data-triple (is (equal - '(parse::p - (parse::d - 5 6 7 8 4 3 5)) + '(emit::p + (emit::d + 5 6 7 8 4 3 5) + (emit::x)) (esrap:parse 'parse:str->ast (format nil ".DATA~%~tC 5 6 7 8~%~tD 4 -~tE 3 5~%"))))) +~tE 3 5~%.TEXT~%"))))) (test esrap-data-lazy-spaces (is (equal - '(parse::p - (parse::d - 5 6 7 8 4 3 5)) + '(emit::p + (emit::d + 5 6 7 8 4 3 5) + (emit::x)) (esrap:parse 'parse:str->ast (format nil "~%~t.DATA~t~%F 5 6 7 8~t~%G 4 -H 3 5~%"))))) +H 3 5~%.TEXT~%"))))) (test esrap-data-full (is (equal - '(parse::p - (parse::d + '(emit::p + (emit::d 1 2 3 4 3 0) - (parse::x - (parse::i "LOAD" (parse::rr 5) (parse::rr 0) (parse::var "S")) - (parse::i "LOAD" (parse::rr 10) (parse::rr 0) (parse::var "ARR")) - (parse::i "LOAD" (parse::rr 6) (parse::rr 0) (parse::var "I")) - (parse::j "JRL" (parse::rr 0) (parse::l "CMP")) - (parse::r "ADD" (parse::rr 10) (parse::rr 6) (parse::rr 9)) - (parse::i "ADDI" (parse::rr 6) (parse::rr 6) (parse::imm 1)) - (parse::r "CMP" (parse::rr 6) (parse::rr 5) (parse::rr 0)) - (parse::j "BGT" (parse::rr 0) (parse::l "L")))) + (emit::x + (emit::i "LOAD" (emit::rr 5) (emit::rr 0) (emit::var "S")) + (emit::i "LOAD" (emit::rr 10) (emit::rr 0) (emit::var "ARR")) + (emit::i "LOAD" (emit::rr 6) (emit::rr 0) (emit::var "I")) + (emit::j "JRL" (emit::rr 0) (emit::l "CMP" 19)) + (emit::r "ADD" (emit::rr 10) (emit::rr 6) (emit::rr 9)) + (emit::i "ADDI" (emit::rr 6) (emit::rr 6) (emit::imm 1)) + (emit::r "CMP" (emit::rr 6) (emit::rr 5) (emit::rr 0)) + (emit::j "BGT" (emit::rr 0) (emit::l "L" 23)))) (esrap:parse 'parse:str->ast (format nil " .DATA ARR 1 2 3 4 diff --git a/t/util.lisp b/t/util.lisp index c2dafab..e15e142 100644 --- a/t/util.lisp +++ b/t/util.lisp @@ -16,13 +16,17 @@ (is (util:asm-extension? "quux.asm"))) (test format-as-binary-unsigned-no-pad - (is (string= (util:format-as-binary 0 0) - "0"))) + (is (string= "0" + (util:format-as-binary 0 0)))) (test format-as-binary-unsigned-no-pad-fourty-two - (is (string= (util:format-as-binary 42 0) - "101010"))) + (is (string= "101010" + (util:format-as-binary 42 6)))) (test format-as-binary-unsigned-pad-fourty-two - (is (string= (util:format-as-binary 42 10) - "0000101010"))) + (is (string= "0000101010" + (util:format-as-binary 42 10)))) + +(test format-as-binary-overflow + (is (string= "10" + (util:format-as-binary 10 2)))) |