q-language 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gemtest +0 -0
- data/Rakefile +10 -0
- data/lib/q-language.rb +9 -0
- data/lib/q-language/device.rb +166 -0
- data/lib/q-language/environment.rb +358 -0
- data/lib/q-language/methods/array.rb +523 -0
- data/lib/q-language/methods/block.rb +26 -0
- data/lib/q-language/methods/class.rb +24 -0
- data/lib/q-language/methods/dynamic.rb +82 -0
- data/lib/q-language/methods/false.rb +47 -0
- data/lib/q-language/methods/hash.rb +351 -0
- data/lib/q-language/methods/implicit.rb +345 -0
- data/lib/q-language/methods/module.rb +39 -0
- data/lib/q-language/methods/nil.rb +47 -0
- data/lib/q-language/methods/number.rb +118 -0
- data/lib/q-language/methods/object.rb +155 -0
- data/lib/q-language/methods/string.rb +157 -0
- data/lib/q-language/methods/time.rb +110 -0
- data/lib/q-language/methods/token.rb +72 -0
- data/lib/q-language/methods/true.rb +14 -0
- data/lib/q-language/node.rb +45 -0
- data/lib/q-language/object.rb +125 -0
- data/lib/q-language/parser.rb +104 -0
- data/lib/q-language/writer.rb +90 -0
- data/test/methods/test_array.rb +191 -0
- data/test/methods/test_block.rb +66 -0
- data/test/methods/test_class.rb +34 -0
- data/test/methods/test_dynamic.rb +158 -0
- data/test/methods/test_false.rb +60 -0
- data/test/methods/test_hash.rb +10 -0
- data/test/methods/test_implicit.rb +332 -0
- data/test/methods/test_module.rb +55 -0
- data/test/methods/test_nil.rb +60 -0
- data/test/methods/test_number.rb +10 -0
- data/test/methods/test_object.rb +157 -0
- data/test/methods/test_string.rb +271 -0
- data/test/methods/test_time.rb +181 -0
- data/test/methods/test_token.rb +92 -0
- data/test/methods/test_true.rb +16 -0
- data/test/test.rb +23 -0
- 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,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
|