/
test_r2cenvironment.rb
executable file
·191 lines (144 loc) · 3.43 KB
/
test_r2cenvironment.rb
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
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
#!/usr/local/bin/ruby -w
$TESTING = true
require 'minitest/autorun' if $0 == __FILE__
require 'minitest/unit'
require 'r2cenvironment'
require 'type'
class TestR2CEnvironment < MiniTest::Unit::TestCase
def setup
@env = R2CEnvironment.new
end
def test_add
assert_equal Type.long, @env.add(:var, Type.long)
assert_equal Type.long, @env.lookup(:var)
end
def test_add_depth
@env.scope do
assert_equal Type.long, @env.add(:var, Type.long, 1)
end
assert_equal Type.long, @env.lookup(:var)
end
def test_add_raises_on_illegal
assert_raises RuntimeError do
@env.add nil, Type.long
end
assert_raises RuntimeError do
@env.add 1, :foo
end
end
def test_add_segmented
@env.scope do
@env.add :var, Type.long
assert_equal Type.long, @env.lookup(:var)
end
assert_raises NameError do
@env.lookup(:var)
end
end
def test_current
@env.add :var, Type.long
@env.set_val :var, 42
expected = { :var => [Type.long, 42] }
assert_equal expected, @env.current
end
def test_all
@env.scope do
@env.add :x, Type.long
@env.scope do
@env.add :y, Type.str
@env.add :x, Type.float
expected = { :x => [Type.float], :y => [Type.str] }
assert_equal expected, @env.all
end
expected = { :x => [Type.long] }
assert_equal expected, @env.all
end
end
def test_depth
assert_equal 1, @env.depth
@env.scope do
assert_equal 2, @env.depth
end
assert_equal 1, @env.depth
end
def test_env
assert_equal [{}], @env.env
end
def test_get_val
@env.add :var, Type.long
@env.set_val :var, 42
assert_equal 42, @env.get_val(:var)
end
def test_set_val
@env.add :var, Type.long
assert_equal 42, @env.set_val(:var, 42)
assert_equal 42, @env.get_val(:var)
end
def test_set_val_static_array
@env.add :var, Type.long
assert_equal "[2]", @env.set_val(:var, "[2]")
assert_equal "[2]", @env.get_val(:var)
end
def test_get_val_unset
@env.add :var, Type.long
assert_nil @env.get_val(:var)
end
def test_get_val_unknown
assert_raises(NameError) do
@env.get_val(:unknown)
end
end
def test_extend
assert_equal [{}], @env.env
@env.extend
assert_equal [{}, {}], @env.env
end
def test_lookup
@env.add :var, Type.long
assert_equal Type.long, @env.lookup(:var)
end
def test_lookup_raises
assert_raises NameError do
@env.lookup(:var)
end
end
def test_lookup_scope
@env.add :var, Type.long
assert_equal Type.long, @env.lookup(:var)
@env.scope do
assert_equal Type.long, @env.lookup(:var)
end
end
def test_scope
@env.add :var, Type.long
assert_equal Type.long, @env.lookup(:var)
@env.scope do
@env.add :var, Type.float
assert_equal Type.float, @env.lookup(:var)
end
assert_equal Type.long, @env.lookup(:var)
end
def test_scope_raise
@env.add :a, Type.float
begin
@env.scope do
@env.add :a, Type.long
@env.add :b, Type.long
raise "woo"
end
rescue
# should replicate baddies
end
expected = { :a => [Type.float] }
assert_equal expected, @env.all
end
def test_unextend
@env.extend
@env.add :var, Type.long
assert_equal Type.long, @env.lookup(:var)
@env.unextend
assert_raises NameError do
@env.lookup :var
end
end
end