q-language 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
+
|