blob: 5b23343d345681fafdd07094727414f9026f46d8 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
(in-package #:rva-tests)
(def-suite parse-tests
:description "Test functions exported from the parser."
:in all-tests)
;;; these tests are not exhaustive, and are meant to test basic functionality
;;; under correct circumstances.
(in-suite parse-tests)
(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~%"))))
|