q-language 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (41) hide show
  1. data/.gemtest +0 -0
  2. data/Rakefile +10 -0
  3. data/lib/q-language.rb +9 -0
  4. data/lib/q-language/device.rb +166 -0
  5. data/lib/q-language/environment.rb +358 -0
  6. data/lib/q-language/methods/array.rb +523 -0
  7. data/lib/q-language/methods/block.rb +26 -0
  8. data/lib/q-language/methods/class.rb +24 -0
  9. data/lib/q-language/methods/dynamic.rb +82 -0
  10. data/lib/q-language/methods/false.rb +47 -0
  11. data/lib/q-language/methods/hash.rb +351 -0
  12. data/lib/q-language/methods/implicit.rb +345 -0
  13. data/lib/q-language/methods/module.rb +39 -0
  14. data/lib/q-language/methods/nil.rb +47 -0
  15. data/lib/q-language/methods/number.rb +118 -0
  16. data/lib/q-language/methods/object.rb +155 -0
  17. data/lib/q-language/methods/string.rb +157 -0
  18. data/lib/q-language/methods/time.rb +110 -0
  19. data/lib/q-language/methods/token.rb +72 -0
  20. data/lib/q-language/methods/true.rb +14 -0
  21. data/lib/q-language/node.rb +45 -0
  22. data/lib/q-language/object.rb +125 -0
  23. data/lib/q-language/parser.rb +104 -0
  24. data/lib/q-language/writer.rb +90 -0
  25. data/test/methods/test_array.rb +191 -0
  26. data/test/methods/test_block.rb +66 -0
  27. data/test/methods/test_class.rb +34 -0
  28. data/test/methods/test_dynamic.rb +158 -0
  29. data/test/methods/test_false.rb +60 -0
  30. data/test/methods/test_hash.rb +10 -0
  31. data/test/methods/test_implicit.rb +332 -0
  32. data/test/methods/test_module.rb +55 -0
  33. data/test/methods/test_nil.rb +60 -0
  34. data/test/methods/test_number.rb +10 -0
  35. data/test/methods/test_object.rb +157 -0
  36. data/test/methods/test_string.rb +271 -0
  37. data/test/methods/test_time.rb +181 -0
  38. data/test/methods/test_token.rb +92 -0
  39. data/test/methods/test_true.rb +16 -0
  40. data/test/test.rb +23 -0
  41. metadata +103 -0
@@ -0,0 +1,66 @@
1
+ # encoding: UTF-8
2
+ #
3
+ # Copyright © 2010-2011 Jesse Sielaff
4
+ #
5
+
6
+ require_relative '../test.rb'
7
+
8
+ class TestBlock < TestQ
9
+ def test_block_p_returns_self
10
+ returns :b, "{ :b block block? }"
11
+ end
12
+
13
+ def test_call_returns_block_return_value
14
+ eq 614, "{ block { Number(614) } call }"
15
+ end
16
+
17
+ def test_call_calls_block
18
+ set? :value, 614, "{ block { :value Number(614) } call }"
19
+ end
20
+
21
+ def test_eval_returns_block_return_value
22
+ eq 614, "{ block { Number(614) } eval new }"
23
+ end
24
+
25
+ def test_eval_calls_block
26
+ set? :value, 614, "{ block { :value Number(614) } eval new }"
27
+ end
28
+
29
+ def test_eval_calls_block_with_dynamic_as_self
30
+ script = "{ block { :value self } eval :o new }"
31
+ env = Q_Device.new(script).execute
32
+
33
+ assert_equal(env.get(:o), env.get(:value))
34
+ end
35
+
36
+ def test_eval_arg_returns_block_return_value
37
+ eq 614, "{ block :arg { Number(614) } eval_arg new Token(arg) }"
38
+ end
39
+
40
+ def test_eval_arg_calls_block
41
+ set? :value, 614, "{ block :arg { :value Number(614) } eval_arg new Token(arg) }"
42
+ end
43
+
44
+ def test_eval_arg_calls_block_with_dynamic_as_self
45
+ script = "{ block :arg { :value self } eval_arg :o new Token(arg) }"
46
+ env = Q_Device.new(script).execute
47
+
48
+ assert_equal(env.get(:o), env.get(:value))
49
+ end
50
+
51
+ def test_eval_arg_calls_block_with_argument
52
+ set? :value, 614, "{ block :arg { :value :arg } eval_arg :o new Number(614) }"
53
+ end
54
+
55
+ def test_call_arg_returns_block_return_value
56
+ eq 614, "{ block :arg { Number(614) } call_arg Token(arg) }"
57
+ end
58
+
59
+ def test_call_arg_calls_block
60
+ set? :value, 614, "{ block :arg { :value Number(614) } call_arg Token(arg) }"
61
+ end
62
+
63
+ def test_call_arg_calls_block_with_argument
64
+ set? :value, 614, "{ block :arg { :value :arg } call_arg Number(614) }"
65
+ end
66
+ end
@@ -0,0 +1,34 @@
1
+ # encoding: UTF-8
2
+ #
3
+ # Copyright © 2010-2011 Jesse Sielaff
4
+ #
5
+
6
+ require_relative '../test.rb'
7
+
8
+ class TestClass < TestQ
9
+ def test_class_p_returns_self
10
+ returns :c, "{ :c class class? }"
11
+ end
12
+
13
+ def test_init_returns_instance
14
+ script = "{ :c class init Number(614) }"
15
+ env = Q_Device.new(script).execute
16
+
17
+ assert_instance_of(env.get(:c), env.return_value)
18
+ end
19
+
20
+ def test_init_sets_init_value
21
+ eq 614, "{ class init Number(614) init_value }"
22
+ end
23
+
24
+ def test_module_p_returns_false
25
+ eq false, "{ class module? }"
26
+ end
27
+
28
+ def test_new_returns_instance
29
+ script = "{ :c class new }"
30
+ env = Q_Device.new(script).execute
31
+
32
+ assert_instance_of(env.get(:c), env.return_value)
33
+ end
34
+ end
@@ -0,0 +1,158 @@
1
+ # encoding: UTF-8
2
+ #
3
+ # Copyright © 2010-2011 Jesse Sielaff
4
+ #
5
+
6
+ require_relative '../test.rb'
7
+
8
+ class TestDynamic < TestQ
9
+ def test_def_returns_self
10
+ returns :o, "{ :o new def Token(foo) { Number(614) } }"
11
+ end
12
+
13
+ def test_def_defines_method
14
+ script = "{ new def Token(foo) { Number(614) } }"
15
+ env = Q_Device.new(script).execute
16
+
17
+ assert_equal(614, env.return_value.foo)
18
+ end
19
+
20
+ def test_def_defines_method_where_self_is_the_caller
21
+ script = "{ new def Token(foo) { self } }"
22
+ object = Q_Device.new(script).execute.return_value
23
+
24
+ assert_equal(object, object.foo)
25
+ end
26
+
27
+ def test_dynamic_p_returns_self
28
+ returns :o, "{ :o new dynamic? }"
29
+ end
30
+
31
+ def test_eval_returns_block_return_value
32
+ eq 614, "{ new eval { Number(614) } }"
33
+ end
34
+
35
+ def test_eval_calls_block
36
+ set? :value, 614, "{ new eval { :value Number(614) } }"
37
+ end
38
+
39
+ def test_eval_calls_block_with_object_as_self
40
+ script = "{ :o new eval { :value self } }"
41
+ env = Q_Device.new(script).execute
42
+
43
+ assert_equal(env.get(:o), env.get(:value))
44
+ end
45
+
46
+ def test_eval_arg_returns_block_return_value
47
+ eq 614, "{ new eval_arg Token(arg) { Number(614) } }"
48
+ end
49
+
50
+ def test_eval_arg_calls_block
51
+ set? :value, 614, "{ new eval_arg Token(arg) { :value Number(614) } }"
52
+ end
53
+
54
+ def test_eval_arg_calls_block_with_object_as_self
55
+ script = "{ :o new eval_arg Token(arg) { :value self } }"
56
+ env = Q_Device.new(script).execute
57
+
58
+ assert_equal(env.get(:o), env.get(:value))
59
+ end
60
+
61
+ def test_eval_arg_calls_block_with_argument
62
+ set? :value, 614, "{ :o new eval_arg Number(614) :x { :value :x } }"
63
+ end
64
+
65
+ def test_extend_returns_self
66
+ returns :o, "{ :o new extend module }"
67
+ end
68
+
69
+ def test_extend_includes_module
70
+ script = "{ new extend { module def Token(foo) { Number(614) } } }"
71
+ env = Q_Device.new(script).execute
72
+
73
+ assert_equal(614, env.return_value.foo)
74
+ end
75
+
76
+ def test_extend_does_not_include_class
77
+ script = "{ new include { class def Token(foo) { Number(614) } } }"
78
+ env = Q_Device.new(script).execute
79
+
80
+ assert_raises(NoMethodError) { env.return_value.foo }
81
+ end
82
+
83
+ def test_iget_returns_instance_variable_value
84
+ eq 614, "{ :o new iset Number(614) Token(ivar) :o iget Token(ivar) }"
85
+ end
86
+
87
+ def test_iget_returns_nil_for_unknown_variable_name
88
+ eq nil, "{ new iget Token(ivar) }"
89
+ end
90
+
91
+ def test_iget_returns_nil_for_illegal_variable_name
92
+ eq nil, "{ new iget Token(\t) }"
93
+ end
94
+
95
+ def test_init_value_returns_init_value
96
+ eq 614, "{ init Number(614) init_value }"
97
+ end
98
+
99
+ def test_init_value_returns_nil_for_non_initialized_objects
100
+ eq nil, "{ new init_value }"
101
+ end
102
+
103
+ def test_instance_p_returns_true_when_object_is_instance_of_class
104
+ eq true, "{ :c class new instance? :c }"
105
+ end
106
+
107
+ def test_instance_p_returns_false_when_object_is_not_instance_of_class
108
+ eq false, "{ new instance? { class } }"
109
+ end
110
+
111
+ def test_is_p_returns_true_when_object_is_instance_of_class
112
+ eq true, "{ :c class new is? :c }"
113
+ end
114
+
115
+ def test_is_p_returns_false_when_object_is_not_instance_of_class
116
+ eq false, "{ new is? { class } }"
117
+ end
118
+
119
+ def test_is_p_returns_true_when_object_includes_module
120
+ eq true, "{ { class include { :m module } } new is? :m }"
121
+ end
122
+
123
+ def test_is_p_returns_false_when_object_does_not_include_module
124
+ eq false, "{ new is? module }"
125
+ end
126
+
127
+ def test_iset_returns_instance_variable_value
128
+ eq 614, "{ new iset Number(614) Token(ivar) }"
129
+ end
130
+
131
+ def test_iset_sets_instance_variable_value
132
+ eq 614, "{ :o new iset Number(614) Token(ivar) :o iget Token(ivar) }"
133
+ end
134
+
135
+ def test_iset_returns_nil_for_illegal_variable_name
136
+ eq nil, "{ new iset Number(614) Token(\t) }"
137
+ end
138
+
139
+ def test_metaclass_returns_object_class
140
+ returns :c, "{ :c class new metaclass }"
141
+ end
142
+
143
+ def test_send_calls_method
144
+ set? :value, 614, "{ new def Token(foo) { :value Number(614) } send Token(foo) }"
145
+ end
146
+
147
+ def test_send_returns_method_return_value
148
+ eq 614, "{ new def Token(foo) { Number(614) } send Token(foo) }"
149
+ end
150
+
151
+ def test_send_arg_calls_method
152
+ set? :value, 614, "{ new def Token(foo) :arg { :value :arg } send_arg Token(foo) Number(614) }"
153
+ end
154
+
155
+ def test_send_arg_returns_method_return_value
156
+ eq 614, "{ new def Token(foo) :arg { :arg add Number(613) } send_arg Token(foo) Number(1) }"
157
+ end
158
+ end
@@ -0,0 +1,60 @@
1
+ # encoding: UTF-8
2
+ #
3
+ # Copyright © 2010-2011 Jesse Sielaff
4
+ #
5
+
6
+ require_relative '../test.rb'
7
+
8
+ class TestFalse < TestQ
9
+ def test_and_returns_false
10
+ eq false, "{ false and Token(a) }"
11
+ end
12
+
13
+ def test_choose_returns_object_2
14
+ eq :b, "{ choose false Token(a) Token(b) }"
15
+ end
16
+
17
+ def test_false_p_returns_true
18
+ eq true, "{ false false? }"
19
+ end
20
+
21
+ def test_if_returns_nil
22
+ eq nil, "{ if false { Token(a) } }"
23
+ end
24
+
25
+ def test_not_returns_true
26
+ eq true, "{ not false }"
27
+ end
28
+
29
+ def test_or_returns_object
30
+ eq :a, "{ false or Token(a) }"
31
+ end
32
+
33
+ def test_stringify_returns_false_string
34
+ eq "false", "{ false stringify }"
35
+ end
36
+
37
+ def test_tally_returns_negative_one
38
+ eq -1, "{ false tally }"
39
+ end
40
+
41
+ def test_unless_returns_block_return_value
42
+ eq :a, "{ unless false { Token(a) } }"
43
+ end
44
+
45
+ def test_unless_calls_block
46
+ set? :value, 614, "{ unless false { :value Number(614) } }"
47
+ end
48
+
49
+ def test_xor_false_returns_false
50
+ eq false, "{ false xor false }"
51
+ end
52
+
53
+ def test_xor_nil_returns_false
54
+ eq false, "{ false xor nil }"
55
+ end
56
+
57
+ def test_xor_true_returns_true
58
+ eq true, "{ false xor true }"
59
+ end
60
+ end
@@ -0,0 +1,10 @@
1
+ # encoding: UTF-8
2
+ #
3
+ # Copyright © 2010-2011 Jesse Sielaff
4
+ #
5
+
6
+ require_relative '../test.rb'
7
+
8
+ class TestHash < TestQ
9
+
10
+ end
@@ -0,0 +1,332 @@
1
+ # encoding: UTF-8
2
+ #
3
+ # Copyright © 2010-2011 Jesse Sielaff
4
+ #
5
+
6
+ require_relative '../test.rb'
7
+
8
+ class TestImplicit < TestQ
9
+ def test_all_p
10
+ end
11
+
12
+ def test_any_p
13
+ end
14
+
15
+ def test_array_returns_empty_array
16
+ eq [], "{ array }"
17
+ end
18
+
19
+ def test_arrays_returns_array_of_all_arrays_in_queue
20
+ eq [[],[],[]], "{ array array array arrays }"
21
+ end
22
+
23
+ def test_block_returns_next_block_as_an_object
24
+ script = "{ block { } }"
25
+ env = Q_Device.new(script).execute
26
+
27
+ assert_instance_of(Proc, env.return_value)
28
+ end
29
+
30
+ def test_blocks_returns_array_of_all_blocks_in_queue
31
+ script = "{ block { } block { } block { } blocks }"
32
+ env = Q_Device.new(script).execute
33
+
34
+ assert_equal(3, env.return_value.length)
35
+ assert_equal(true, env.return_value.all? {|x| x.is_a?(Proc) })
36
+ end
37
+
38
+ def test_break
39
+ end
40
+
41
+ def test_class_returns_a_new_class
42
+ script = "{ class }"
43
+ env = Q_Device.new(script).execute
44
+
45
+ assert_instance_of(Class, env.return_value)
46
+ end
47
+
48
+ def test_classes_returns_array_of_all_classes_in_queue
49
+ script = "{ class class class classes }"
50
+ env = Q_Device.new(script).execute
51
+
52
+ assert_equal(3, env.return_value.length)
53
+ assert_equal(true, env.return_value.all? {|x| x.is_a?(Class) })
54
+ end
55
+
56
+ def test_compact_returns_array_of_all_non_nil_items_in_queue
57
+ eq [:a,:b], "{ Token(a) nil Token(b) nil compact elect }"
58
+ end
59
+
60
+ def test_compact_leaves_nils_in_queue
61
+ eq [:a, nil, :b, nil, [:a,:b]], "{ Token(a) nil Token(b) nil compact objects }"
62
+ end
63
+
64
+ def test_compact_bang_returns_array_of_all_non_nil_items_in_queue
65
+ eq [:a,:b], "{ Token(a) nil Token(b) nil compact! elect }"
66
+ end
67
+
68
+ def test_compact_bang_removes_nils_from_queue
69
+ eq [:a, :b, [:a,:b]], "{ Token(a) nil Token(b) nil compact! objects }"
70
+ end
71
+
72
+ def test_count_returns_number_of_matching_objects_left_in_queue
73
+ eq 2, "{ nil Token(a) nil Token(b) nil count elect }"
74
+ end
75
+
76
+ # figure out why this doesn't work with nil,
77
+ # e.g. "{ nil nil nil count_by :x { :x nil? } }"
78
+ def test_count_by_returns_number_of_objects_in_queue_for_which_block_returns_true
79
+ eq 2, "{ nil Token(a) Token(b) count_by :x { :x token? } elect }"
80
+ end
81
+
82
+ def test_def_returns_env_object
83
+ script = "{ def Token(foo) { Number(614) } }"
84
+ env = Q_Device.new(script).execute
85
+
86
+ assert_equal(env.object, env.return_value)
87
+ end
88
+
89
+ def test_def_defines_method
90
+ script = "{ def Token(foo) { Number(614) } }"
91
+ env = Q_Device.new(script).execute
92
+
93
+ assert_equal(614, env.object.foo)
94
+ end
95
+
96
+ def test_def_defines_method_where_self_is_the_caller
97
+ script = "{ def Token(foo) { self } }"
98
+ object = Q_Device.new(script).execute.object
99
+
100
+ assert_equal(object, object.foo)
101
+ end
102
+
103
+ def test_e_returns_e
104
+ eq Number.e, "{ e }"
105
+ end
106
+
107
+ def test_each
108
+ end
109
+
110
+ def test_elect_returns_last_item_in_queue
111
+ eq :c, "{ Token(a) Token(b) Token(c) elect }"
112
+ end
113
+
114
+ def test_elect_removes_other_items_from_the_queue
115
+ eq 1, "{ Token(a) Token(b) Token(c) elect objects length }"
116
+ end
117
+
118
+ def test_false_returns_false
119
+ eq false, "{ false }"
120
+ end
121
+
122
+ def test_falses_returns_array_of_all_falses_in_queue
123
+ eq [false, false, false], "{ false false false falses }"
124
+ end
125
+
126
+ def test_hash_returns_new_empty_hash
127
+ eq({}, "{ hash }")
128
+ end
129
+
130
+ def test_hashes_returns_array_of_all_hashes_in_queue
131
+ eq [{},{},{}], "{ hash hash hash hashes }"
132
+ end
133
+
134
+ def test_i_returns_i
135
+ eq Complex(0,-1), "{ i }"
136
+ end
137
+
138
+ def test_jump_if_calls_block
139
+ set? :value, 1, "{ jump_if { :value one } }"
140
+ end
141
+
142
+ def test_jump_if_terminates_execution_of_enclosing_block_when_block_returns_true
143
+ set? :value, nil, "{ { jump_if { true } :value one } }"
144
+ end
145
+
146
+ def test_jump_if_does_not_terminate_execution_of_enclosing_block_when_block_returns_false
147
+ set? :value, 1, "{ { jump_if { false } :value one } }"
148
+ end
149
+
150
+ def test_jump
151
+ end
152
+
153
+ def test_loop
154
+ end
155
+
156
+ def test_map
157
+ end
158
+
159
+ def test_many_p
160
+ end
161
+
162
+ def test_module_returns_new_module
163
+ script = "{ module }"
164
+ env = Q_Device.new(script).execute
165
+
166
+ assert_instance_of(Module, env.return_value)
167
+ end
168
+
169
+ def test_modules_returns_array_of_all_modules_in_queue
170
+ script = "{ module module module modules }"
171
+ env = Q_Device.new(script).execute
172
+
173
+ assert_equal(3, env.return_value.length)
174
+ assert_equal(true, env.return_value.all? {|x| x.is_a?(Module) })
175
+ end
176
+
177
+ def test_nan_returns_nan
178
+ eq Number.nan, "{ nan }"
179
+ end
180
+
181
+ def test_neg_inf_returns_negative_infinity
182
+ eq Number.neg_inf, "{ neg_inf }"
183
+ end
184
+
185
+ def test_neg_one_returns_negative_one
186
+ eq -1, "{ neg_one }"
187
+ end
188
+
189
+ def test_new_returns_new_dynamic_object
190
+ script = "{ new }"
191
+ env = Q_Device.new(script).execute
192
+
193
+ assert_instance_of(QDynamic, env.return_value.to_q)
194
+ end
195
+
196
+ def test_newline_returns_newline_string
197
+ eq ?\n, "{ newline }"
198
+ end
199
+
200
+ def test_nil_returns_nil
201
+ eq nil, "{ nil }"
202
+ end
203
+
204
+ def test_nils_returns_array_of_all_nils_in_queue
205
+ eq [nil, nil, nil], "{ nil nil nil nils }"
206
+ end
207
+
208
+ def test_none_p
209
+ end
210
+
211
+ def test_now_returns_current_time
212
+ script = "{ now }"
213
+ env = Q_Device.new(script).execute
214
+
215
+ assert_equal(Time.now.round, env.return_value.round)
216
+ end
217
+
218
+ def test_numbers_returns_array_of_all_numbers_in_queue
219
+ eq [1, 2, 3], "{ Number(1) Number(2) Number(3) numbers }"
220
+ end
221
+
222
+ def test_objects_returns_array_of_all_objects_in_queue
223
+ eq [1, :a, true], "{ Number(1) Token(a) true objects }"
224
+ end
225
+
226
+ def test_one_returns_one
227
+ eq 1, "{ one }"
228
+ end
229
+
230
+ def test_one_p
231
+ end
232
+
233
+ def test_pi_returns_pi
234
+ eq Number.pi, "{ pi }"
235
+ end
236
+
237
+ def test_pos_inf_returns_positive_infinity
238
+ eq Number.pos_inf, "{ pos_inf }"
239
+ end
240
+
241
+ def test_self
242
+ end
243
+
244
+ def test_skip_a_returns_object_b
245
+ eq :b, "{ Token(a) Token(b) skip_a }"
246
+ end
247
+
248
+ def test_skip_b_returns_object_a
249
+ eq :a, "{ Token(a) Token(b) skip_b }"
250
+ end
251
+
252
+ def test_space_returns_space_string
253
+ eq ' ', "{ space }"
254
+ end
255
+
256
+ def test_string_returns_empty_string
257
+ eq '', "{ string }"
258
+ end
259
+
260
+ def test_strings_returns_array_of_all_strings_in_queue
261
+ eq [?a,?b,?c], "{ String(a) String(b) String(c) strings }"
262
+ end
263
+
264
+ def test_tab_returns_tab_string
265
+ eq ?\t, "{ tab }"
266
+ end
267
+
268
+ def test_three_returns_three
269
+ eq 3, "{ three }"
270
+ end
271
+
272
+ def test_times_returns_array_of_all_times_in_queue
273
+ script = "{ now now now times }"
274
+ env = Q_Device.new(script).execute
275
+
276
+ assert_equal(3, env.return_value.length)
277
+ assert_equal(true, env.return_value.all? {|x| x.is_a?(Time) })
278
+ end
279
+
280
+ def test_tokens_returns_array_of_all_tokens_in_queue
281
+ eq [:a,:b,:c], "{ Token(a) Token(b) Token(c) tokens }"
282
+ end
283
+
284
+ def test_true_returns_true
285
+ eq true, "{ true }"
286
+ end
287
+
288
+ def test_trues_returns_array_of_all_trues_in_queue
289
+ eq [true, true, true], "{ true true true trues }"
290
+ end
291
+
292
+ def test_two_returns_two
293
+ eq 2, "{ two }"
294
+ end
295
+
296
+ def test_uniq_returns_array_of_unique_items_in_queue
297
+ eq [:a, 1, nil], "{ Token(a) Token(a) Number(1) nil nil uniq elect }"
298
+ end
299
+
300
+ def test_uniq_leaves_duplicate_items_in_queue
301
+ eq [:a,:a,1,nil,nil,[:a,1,nil]], "{ Token(a) Token(a) Number(1) nil nil uniq objects }"
302
+ end
303
+
304
+ def test_uniq_bang_returns_array_of_unique_items_in_queue
305
+ eq [:a, 1, nil], "{ Token(a) Token(a) Number(1) nil nil uniq! elect }"
306
+ end
307
+
308
+ def test_uniq_bang_removes_duplicate_items_from_queue
309
+ eq [:a,1,nil,[:a,1,nil]], "{ Token(a) Token(a) Number(1) nil nil uniq! objects }"
310
+ end
311
+
312
+ def test_unset_returns_value_of_last_used_variable
313
+ eq 614, "{ :x unset }", x: 614
314
+ end
315
+
316
+ def test_unset_clears_value_of_last_used_variable
317
+ script = "{ :x unset }"
318
+ env = Q_Device.new(script).execute(x: 614)
319
+
320
+ assert_equal(nil, env.get(:x))
321
+ end
322
+
323
+ def test_until
324
+ end
325
+
326
+ def test_while
327
+ end
328
+
329
+ def test_zero_returns_zero
330
+ eq 0, "{ zero }"
331
+ end
332
+ end