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,181 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
#
|
3
|
+
# Copyright © 2010-2011 Jesse Sielaff
|
4
|
+
#
|
5
|
+
|
6
|
+
require_relative '../test.rb'
|
7
|
+
|
8
|
+
class TestTime < TestQ
|
9
|
+
def test_add_returns_the_new_time
|
10
|
+
t = Time.now
|
11
|
+
eq t + 5, "{ :t add Number(5) }", t: t
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_after_p_returns_true_when_later_than_the_time
|
15
|
+
eq true, "{ :t1 after? :t2 }", t1: t = Time.now, t2: t - 10
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_after_p_returns_false_when_earlier_than_the_time
|
19
|
+
eq false, "{ :t1 after? :t2 }", t1: t = Time.now, t2: t + 10
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_after_p_returns_false_when_equal_to_the_time
|
23
|
+
eq false, "{ :t1 after? :t2 }", t1: t = Time.now, t2: t
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_before_p_returns_true_when_earlier_than_the_time
|
27
|
+
eq true, "{ :t1 before? :t2 }", t1: t = Time.now, t2: t + 10
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_before_p_returns_false_when_later_than_the_time
|
31
|
+
eq false, "{ :t1 before? :t2 }", t1: t = Time.now, t2: t - 10
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_before_p_returns_false_when_equal_to_the_time
|
35
|
+
eq false, "{ :t1 before? :t2 }", t1: t = Time.now, t2: t
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_between_p_returns_true_when_equal_to_earliest_time
|
39
|
+
eq true, "{ :t1 between? :t1 :t3 }", t1: t = Time.now, t2: t + 50, t3: t + 100
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_between_p_returns_true_when_equal_to_latest_time
|
43
|
+
eq true, "{ :t3 between? :t1 :t3 }", t1: t = Time.now, t2: t + 50, t3: t + 100
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_between_p_returns_false_when_earlier_than_earliest_time
|
47
|
+
eq false, "{ :t1 between? :t2 :t3 }", t1: t = Time.now, t2: t + 50, t3: t + 100
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_between_p_returns_false_when_later_than_latest_time
|
51
|
+
eq false, "{ :t3 between? :t1 :t2 }", t1: t = Time.now, t2: t + 50, t3: t + 100
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_between_p_returns_true_when_between_earliest_and_latest_times
|
55
|
+
eq true, "{ :t2 between? :t1 :t3 }", t1: t = Time.now, t2: t + 50, t3: t + 100
|
56
|
+
end
|
57
|
+
|
58
|
+
def test_difference_returns_difference_of_times_in_seconds
|
59
|
+
eq 100, "{ :t2 difference :t1 }", t1: t = Time.now, t2: t + 100
|
60
|
+
end
|
61
|
+
|
62
|
+
def test_friday_p_returns_true_when_weekday_is_friday
|
63
|
+
eq true, "{ :t friday? }", t: Time.new(2000,1,7)
|
64
|
+
end
|
65
|
+
|
66
|
+
def test_friday_p_returns_false_when_weekday_is_not_friday
|
67
|
+
eq false, "{ :t friday? }", t: Time.new(2000,1,8)
|
68
|
+
end
|
69
|
+
|
70
|
+
def test_hour_returns_hour
|
71
|
+
eq 13, "{ :t hour }", t: Time.new(2000,1,1,13)
|
72
|
+
end
|
73
|
+
|
74
|
+
def test_minute_returns_minute
|
75
|
+
eq 59, "{ :t minute }", t: Time.new(2000,1,1,1,59)
|
76
|
+
end
|
77
|
+
|
78
|
+
def test_monday_p_returns_true_when_weekday_is_monday
|
79
|
+
eq true, "{ :t monday? }", t: Time.new(2000,1,3)
|
80
|
+
end
|
81
|
+
|
82
|
+
def test_monday_p_returns_false_when_weekday_is_not_monday
|
83
|
+
eq false, "{ :t monday? }", t: Time.new(2000,1,4)
|
84
|
+
end
|
85
|
+
|
86
|
+
def test_month_returns_month
|
87
|
+
eq 11, "{ :t month }", t: Time.new(2000,11,1)
|
88
|
+
end
|
89
|
+
|
90
|
+
def test_next_returns_time_plus_one_second
|
91
|
+
t = Time.now
|
92
|
+
eq t + 1, "{ :t next }", t: t
|
93
|
+
end
|
94
|
+
|
95
|
+
def test_round_returns_time_rounded_to_nearest_second
|
96
|
+
script = "{ :t round }"
|
97
|
+
env = Q_Device.new(script).execute(t: t = Time.now)
|
98
|
+
|
99
|
+
assert_equal(0, env.return_value.usec)
|
100
|
+
end
|
101
|
+
|
102
|
+
def test_saturday_p_returns_true_when_weekday_is_saturday
|
103
|
+
eq true, "{ :t saturday? }", t: Time.new(2000,1,1)
|
104
|
+
end
|
105
|
+
|
106
|
+
def test_saturday_p_returns_false_when_weekday_is_not_saturday
|
107
|
+
eq false, "{ :t saturday? }", t: Time.new(2000,1,2)
|
108
|
+
end
|
109
|
+
|
110
|
+
def test_second_returns_second
|
111
|
+
eq 59, "{ :t second }", t: Time.new(2000,1,1,1,1,59)
|
112
|
+
end
|
113
|
+
|
114
|
+
def test_split_returns_array_of_time_values
|
115
|
+
a = [2000,1,2,3,4,5]
|
116
|
+
eq a, "{ :t split }", t: Time.new(*a)
|
117
|
+
end
|
118
|
+
|
119
|
+
def test_subtract_returns_the_new_time
|
120
|
+
t = Time.now
|
121
|
+
eq t - 5, "{ :t subtract Number(5) }", t: t
|
122
|
+
end
|
123
|
+
|
124
|
+
def test_sunday_p_returns_true_when_weekday_is_sunday
|
125
|
+
eq true, "{ :t sunday? }", t: Time.new(2000,1,2)
|
126
|
+
end
|
127
|
+
|
128
|
+
def test_sunday_p_returns_false_when_weekday_is_not_sunday
|
129
|
+
eq false, "{ :t sunday? }", t: Time.new(2000,1,3)
|
130
|
+
end
|
131
|
+
|
132
|
+
def test_thursday_p_returns_true_when_weekday_is_thursday
|
133
|
+
eq true, "{ :t thursday? }", t: Time.new(2000,1,6)
|
134
|
+
end
|
135
|
+
|
136
|
+
def test_thursday_p_returns_false_when_weekday_is_not_thursday
|
137
|
+
eq false, "{ :t thursday? }", t: Time.new(2000,1,7)
|
138
|
+
end
|
139
|
+
|
140
|
+
def test_time_p_returns_self
|
141
|
+
t = Time.now
|
142
|
+
eq t, "{ :t time? }", t: t
|
143
|
+
end
|
144
|
+
|
145
|
+
def test_to_number_returns_number
|
146
|
+
t = Time.now
|
147
|
+
eq t.to_f, "{ :t to_number }", t: t
|
148
|
+
end
|
149
|
+
|
150
|
+
def test_tuesday_p_returns_true_when_weekday_is_tuesday
|
151
|
+
eq true, "{ :t tuesday? }", t: Time.new(2000,1,4)
|
152
|
+
end
|
153
|
+
|
154
|
+
def test_tuesday_p_returns_false_when_weekday_is_not_tuesday
|
155
|
+
eq false, "{ :t tuesday? }", t: Time.new(2000,1,5)
|
156
|
+
end
|
157
|
+
|
158
|
+
def test_wednesday_p_returns_true_when_weekday_is_wednesday
|
159
|
+
eq true, "{ :t wednesday? }", t: Time.new(2000,1,5)
|
160
|
+
end
|
161
|
+
|
162
|
+
def test_wednesday_p_returns_false_when_weekday_is_not_wednesday
|
163
|
+
eq false, "{ :t wednesday? }", t: Time.new(2000,1,6)
|
164
|
+
end
|
165
|
+
|
166
|
+
def test_weekday_returns_weekday
|
167
|
+
eq 2, "{ :t weekday }", t: Time.new(2000,1,11)
|
168
|
+
end
|
169
|
+
|
170
|
+
def test_year_day_returns_year_day
|
171
|
+
eq 365, "{ :t year_day }", t: Time.new(1999,12,31)
|
172
|
+
end
|
173
|
+
|
174
|
+
def test_year_returns_year
|
175
|
+
eq 2000, "{ :t year }", t: Time.new(2000)
|
176
|
+
end
|
177
|
+
|
178
|
+
def test_yesterday_returns_yesterday
|
179
|
+
eq Time.new(1999,12,31), "{ :t yesterday }", t: Time.new(2000,1,1)
|
180
|
+
end
|
181
|
+
end
|
@@ -0,0 +1,92 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
#
|
3
|
+
# Copyright © 2010-2011 Jesse Sielaff
|
4
|
+
#
|
5
|
+
|
6
|
+
require_relative '../test.rb'
|
7
|
+
|
8
|
+
class TestToken < TestQ
|
9
|
+
def test_at_n_returns_nth_character
|
10
|
+
eq ?b, "{ Token(abc) at Number(1) }"
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_at_outside_of_range_returns_nil
|
14
|
+
eq nil, "{ Token(abc) at Number(100) }"
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_capitalize_returns_capitalized_token
|
18
|
+
eq :Abc, "{ Token(abc) capitalize }"
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_downcase_returns_lowercase_token
|
22
|
+
eq :abc, "{ Token(AbC) downcase }"
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_empty_p_returns_true_for_empty_token
|
26
|
+
eq true, "{ Token() empty? }"
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_empty_p_returns_false_for_nonempty_token
|
30
|
+
eq false, "{ Token(abc) empty? }"
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_get_returns_value_of_variable
|
34
|
+
eq 614, "{ get Token(x) }", { x: 614 }
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_iget_returns_value_of_instance_variable_in_scope
|
38
|
+
eq 614, "{ Token(x) iset Number(614) Token(x) iget }"
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_iget_does_not_return_value_of_instance_variable_out_of_scope
|
42
|
+
eq nil, "{ Token(x) iset Number(614) class def Token(foo) { iget Token(x) } new send Token(foo) elect }"
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_iget_returns_nil_for_illegal_variable_name
|
46
|
+
eq nil, "{ Token(\t) iget }"
|
47
|
+
end
|
48
|
+
|
49
|
+
def test_iset_returns_value
|
50
|
+
eq 614, "{ Token(x) iset Number(614) }"
|
51
|
+
end
|
52
|
+
|
53
|
+
def test_iset_sets_value_of_instance_variable
|
54
|
+
eq 614, "{ class def Token(set_x) { Token(x) iset Number(614) self } new send Token(set_x) iget Token(x) }"
|
55
|
+
end
|
56
|
+
|
57
|
+
def test_iset_returns_nil_for_illegal_variable_name
|
58
|
+
eq nil, "{ Token(\t) iset Number(614) }"
|
59
|
+
end
|
60
|
+
|
61
|
+
def test_length_returns_token_length
|
62
|
+
eq 3, "{ Token(abc) length }"
|
63
|
+
end
|
64
|
+
|
65
|
+
def test_next_returns_next_token
|
66
|
+
eq :abd, "{ Token(abc) next }"
|
67
|
+
end
|
68
|
+
|
69
|
+
def test_set_returns_value_of_variable
|
70
|
+
eq 614, "{ Token(x) set Number(614) }"
|
71
|
+
end
|
72
|
+
|
73
|
+
def test_set_sets_value_of_variable
|
74
|
+
set? :x, 614, "{ Token(x) set Number(614) }"
|
75
|
+
end
|
76
|
+
|
77
|
+
def test_stringify_returns_string
|
78
|
+
eq 'abc', "{ Token(abc) stringify }"
|
79
|
+
end
|
80
|
+
|
81
|
+
def test_swapcase_swaps_case_of_token_characters
|
82
|
+
eq :AbC, "{ Token(aBc) swapcase }"
|
83
|
+
end
|
84
|
+
|
85
|
+
def test_token_p_returns_self
|
86
|
+
eq :abc, "{ Token(abc) token? }"
|
87
|
+
end
|
88
|
+
|
89
|
+
def test_upcase_returns_uppercase_token
|
90
|
+
eq :ABC, "{ Token(aBc) upcase }"
|
91
|
+
end
|
92
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
#
|
3
|
+
# Copyright © 2010-2011 Jesse Sielaff
|
4
|
+
#
|
5
|
+
|
6
|
+
require_relative '../test.rb'
|
7
|
+
|
8
|
+
class TestTrue < TestQ
|
9
|
+
def test_stringify_returns_true_string
|
10
|
+
eq "true", "{ true stringify }"
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_true_p_returns_true
|
14
|
+
eq true, "{ true true? }"
|
15
|
+
end
|
16
|
+
end
|
data/test/test.rb
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
#
|
3
|
+
# Copyright © 2010-2011 Jesse Sielaff
|
4
|
+
#
|
5
|
+
|
6
|
+
require 'minitest/autorun'
|
7
|
+
require 'q-language'
|
8
|
+
require 'number'
|
9
|
+
|
10
|
+
class TestQ < MiniTest::Unit::TestCase
|
11
|
+
def eq (value, script, variables = {})
|
12
|
+
assert_equal(Q_Device.new(script).execute(variables).return_value, value)
|
13
|
+
end
|
14
|
+
|
15
|
+
def returns (variable, script)
|
16
|
+
env = Q_Device.new(script).execute
|
17
|
+
assert_same(env.get(variable), env.return_value)
|
18
|
+
end
|
19
|
+
|
20
|
+
def set? (variable, value, script)
|
21
|
+
assert_equal(Q_Device.new(script).execute.get(variable), value)
|
22
|
+
end
|
23
|
+
end
|
metadata
ADDED
@@ -0,0 +1,103 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: q-language
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease:
|
5
|
+
version: 1.0.0
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Jesse Sielaff
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
|
13
|
+
date: 2011-10-28 00:00:00 Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: number
|
17
|
+
prerelease: false
|
18
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
19
|
+
none: false
|
20
|
+
requirements:
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: "0"
|
24
|
+
type: :runtime
|
25
|
+
version_requirements: *id001
|
26
|
+
description: .
|
27
|
+
email: jesse.sielaff@gmail.com
|
28
|
+
executables: []
|
29
|
+
|
30
|
+
extensions: []
|
31
|
+
|
32
|
+
extra_rdoc_files: []
|
33
|
+
|
34
|
+
files:
|
35
|
+
- lib/q-language/device.rb
|
36
|
+
- lib/q-language/environment.rb
|
37
|
+
- lib/q-language/methods/array.rb
|
38
|
+
- lib/q-language/methods/block.rb
|
39
|
+
- lib/q-language/methods/class.rb
|
40
|
+
- lib/q-language/methods/dynamic.rb
|
41
|
+
- lib/q-language/methods/false.rb
|
42
|
+
- lib/q-language/methods/hash.rb
|
43
|
+
- lib/q-language/methods/implicit.rb
|
44
|
+
- lib/q-language/methods/module.rb
|
45
|
+
- lib/q-language/methods/nil.rb
|
46
|
+
- lib/q-language/methods/number.rb
|
47
|
+
- lib/q-language/methods/object.rb
|
48
|
+
- lib/q-language/methods/string.rb
|
49
|
+
- lib/q-language/methods/time.rb
|
50
|
+
- lib/q-language/methods/token.rb
|
51
|
+
- lib/q-language/methods/true.rb
|
52
|
+
- lib/q-language/node.rb
|
53
|
+
- lib/q-language/object.rb
|
54
|
+
- lib/q-language/parser.rb
|
55
|
+
- lib/q-language/writer.rb
|
56
|
+
- lib/q-language.rb
|
57
|
+
- test/methods/test_array.rb
|
58
|
+
- test/methods/test_block.rb
|
59
|
+
- test/methods/test_class.rb
|
60
|
+
- test/methods/test_dynamic.rb
|
61
|
+
- test/methods/test_false.rb
|
62
|
+
- test/methods/test_hash.rb
|
63
|
+
- test/methods/test_implicit.rb
|
64
|
+
- test/methods/test_module.rb
|
65
|
+
- test/methods/test_nil.rb
|
66
|
+
- test/methods/test_number.rb
|
67
|
+
- test/methods/test_object.rb
|
68
|
+
- test/methods/test_string.rb
|
69
|
+
- test/methods/test_time.rb
|
70
|
+
- test/methods/test_token.rb
|
71
|
+
- test/methods/test_true.rb
|
72
|
+
- test/test.rb
|
73
|
+
- Rakefile
|
74
|
+
- .gemtest
|
75
|
+
homepage:
|
76
|
+
licenses: []
|
77
|
+
|
78
|
+
post_install_message:
|
79
|
+
rdoc_options: []
|
80
|
+
|
81
|
+
require_paths:
|
82
|
+
- lib
|
83
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
84
|
+
none: false
|
85
|
+
requirements:
|
86
|
+
- - ">="
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: 1.9.2
|
89
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
90
|
+
none: false
|
91
|
+
requirements:
|
92
|
+
- - ">="
|
93
|
+
- !ruby/object:Gem::Version
|
94
|
+
version: "0"
|
95
|
+
requirements: []
|
96
|
+
|
97
|
+
rubyforge_project:
|
98
|
+
rubygems_version: 1.8.8
|
99
|
+
signing_key:
|
100
|
+
specification_version: 3
|
101
|
+
summary: A Ruby-derived language for machine learning.
|
102
|
+
test_files: []
|
103
|
+
|