blob: 7a2060807738f882ebc39cacad488bef8487cc6c (
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
|
(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::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 ())))
|