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.
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,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
@@ -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
+