maths 0.0.10 → 0.0.11
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/README.md +2 -0
- data/lib/maths/calc.rb +101 -84
- data/lib/maths/calc.y +5 -0
- data/lib/maths/percentage.rb +5 -0
- data/lib/maths/version.rb +1 -1
- metadata +1 -1
data/README.md
CHANGED
data/lib/maths/calc.rb
CHANGED
@@ -10,7 +10,7 @@ require 'racc/parser.rb'
|
|
10
10
|
module Maths
|
11
11
|
class Calculator < Racc::Parser
|
12
12
|
|
13
|
-
module_eval(<<'...end calc.y/module_eval...', 'calc.y',
|
13
|
+
module_eval(<<'...end calc.y/module_eval...', 'calc.y', 41)
|
14
14
|
|
15
15
|
def parse(str)
|
16
16
|
@q = []
|
@@ -30,6 +30,9 @@ module_eval(<<'...end calc.y/module_eval...', 'calc.y', 39)
|
|
30
30
|
when /\Aas % of/
|
31
31
|
@q.push [:PERCENTAGE_OF, $&]
|
32
32
|
|
33
|
+
when /\Aas a % change from/
|
34
|
+
@q.push [:PERCENTAGE_TO, $&]
|
35
|
+
|
33
36
|
# special terms
|
34
37
|
when /\Api/
|
35
38
|
@q.push [:NUMBER, BigDecimal.new("3.14159265358979323846264338327")]
|
@@ -67,60 +70,64 @@ module_eval(<<'...end calc.y/module_eval...', 'calc.y', 39)
|
|
67
70
|
##### State transition tables begin ###
|
68
71
|
|
69
72
|
racc_action_table = [
|
70
|
-
9, 16, 13, 14, 15,
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
8,
|
77
|
-
6, nil,
|
78
|
-
9,
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
nil, nil,
|
83
|
-
16, 13, 14, 15, 11, 12,
|
84
|
-
|
73
|
+
9, 16, 13, 14, 15, 9, 6, 10, 22, 23,
|
74
|
+
4, 6, 5, 8, 7, 4, 9, 5, 8, 7,
|
75
|
+
25, 9, 6, nil, nil, nil, 4, 6, 5, 8,
|
76
|
+
20, 4, 9, 5, 8, 20, nil, 9, 6, nil,
|
77
|
+
nil, nil, 4, 6, 5, 8, 20, 4, 9, 5,
|
78
|
+
8, 20, nil, 9, 6, nil, nil, nil, 4, 6,
|
79
|
+
5, 8, 20, 4, 9, 5, 8, 20, nil, 9,
|
80
|
+
6, nil, nil, nil, 4, 6, 5, 8, 20, 4,
|
81
|
+
9, 5, 8, 20, nil, 9, 6, nil, nil, nil,
|
82
|
+
4, 6, 5, 8, 20, 4, 9, 5, 8, 20,
|
83
|
+
nil, nil, 6, nil, nil, nil, 4, nil, 5, 8,
|
84
|
+
20, 16, 13, 14, 15, 11, 12, 17, 18, nil,
|
85
|
+
nil, nil, 35, 16, 13, 14, 15, 11, 12, 17,
|
86
|
+
18, nil, nil, 34, 16, 13, 14, 15, 11, 12,
|
87
|
+
17, 18, 16, 13, 14, 15, 11, 12, 17, 18,
|
88
|
+
16, 13, 14, 15, 11, 12, 17, 18, 16, 13,
|
89
|
+
14, 15, 11, 12, 17, 16, 13, 14, 15 ]
|
85
90
|
|
86
91
|
racc_action_check = [
|
87
|
-
0,
|
88
|
-
|
89
|
-
|
90
|
-
4,
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
12, 11,
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
nil, nil,
|
100
|
-
|
101
|
-
|
92
|
+
0, 27, 27, 27, 27, 23, 0, 1, 6, 7,
|
93
|
+
0, 23, 0, 0, 0, 23, 18, 23, 23, 23,
|
94
|
+
10, 4, 18, nil, nil, nil, 18, 4, 18, 18,
|
95
|
+
18, 4, 5, 4, 4, 4, nil, 17, 5, nil,
|
96
|
+
nil, nil, 5, 17, 5, 5, 5, 17, 16, 17,
|
97
|
+
17, 17, nil, 9, 16, nil, nil, nil, 16, 9,
|
98
|
+
16, 16, 16, 9, 15, 9, 9, 9, nil, 11,
|
99
|
+
15, nil, nil, nil, 15, 11, 15, 15, 15, 11,
|
100
|
+
12, 11, 11, 11, nil, 13, 12, nil, nil, nil,
|
101
|
+
12, 13, 12, 12, 12, 13, 14, 13, 13, 13,
|
102
|
+
nil, nil, 14, nil, nil, nil, 14, nil, 14, 14,
|
103
|
+
14, 21, 21, 21, 21, 21, 21, 21, 21, nil,
|
104
|
+
nil, nil, 21, 19, 19, 19, 19, 19, 19, 19,
|
105
|
+
19, nil, nil, 19, 36, 36, 36, 36, 36, 36,
|
106
|
+
36, 36, 2, 2, 2, 2, 2, 2, 2, 2,
|
107
|
+
33, 33, 33, 33, 33, 33, 33, 33, 32, 32,
|
108
|
+
32, 32, 32, 32, 32, 26, 26, 26, 26 ]
|
102
109
|
|
103
110
|
racc_action_pointer = [
|
104
|
-
-3, 7,
|
105
|
-
|
106
|
-
|
107
|
-
nil,
|
111
|
+
-3, 7, 138, nil, 18, 29, -8, -3, nil, 50,
|
112
|
+
20, 66, 77, 82, 93, 61, 45, 34, 13, 119,
|
113
|
+
nil, 107, nil, 2, nil, nil, 161, -3, nil, nil,
|
114
|
+
nil, nil, 154, 146, nil, nil, 130, nil ]
|
108
115
|
|
109
116
|
racc_action_default = [
|
110
|
-
-3, -
|
111
|
-
-
|
112
|
-
-
|
113
|
-
-9, -16, -10, -11, -
|
117
|
+
-3, -20, -1, -2, -20, -20, -20, -13, -14, -20,
|
118
|
+
-20, -20, -20, -20, -20, -20, -20, -20, -20, -20,
|
119
|
+
-13, -20, -12, -20, -15, 38, -4, -5, -6, -7,
|
120
|
+
-8, -9, -16, -17, -10, -11, -18, -19 ]
|
114
121
|
|
115
122
|
racc_goto_table = [
|
116
|
-
3, 2, 1, nil, nil,
|
117
|
-
|
118
|
-
nil, nil,
|
123
|
+
3, 2, 1, nil, nil, 19, 21, nil, nil, nil,
|
124
|
+
24, nil, 26, 27, 28, 29, 30, 31, 32, 33,
|
125
|
+
nil, nil, nil, 37, 36 ]
|
119
126
|
|
120
127
|
racc_goto_check = [
|
121
128
|
3, 2, 1, nil, nil, 2, 2, nil, nil, nil,
|
122
|
-
2, nil, 2, 2, 2, 2, 2, 2, 2,
|
123
|
-
nil, nil, 3, 2 ]
|
129
|
+
2, nil, 2, 2, 2, 2, 2, 2, 2, 2,
|
130
|
+
nil, nil, nil, 3, 2 ]
|
124
131
|
|
125
132
|
racc_goto_pointer = [
|
126
133
|
nil, 2, 1, 0 ]
|
@@ -130,28 +137,29 @@ racc_goto_default = [
|
|
130
137
|
|
131
138
|
racc_reduce_table = [
|
132
139
|
0, 0, :racc_error,
|
133
|
-
1, 18, :_reduce_none,
|
134
|
-
1, 18, :_reduce_none,
|
135
|
-
0, 18, :_reduce_3,
|
136
|
-
3, 19, :_reduce_4,
|
137
|
-
3, 19, :_reduce_5,
|
138
|
-
3, 19, :_reduce_6,
|
139
|
-
3, 19, :_reduce_7,
|
140
|
-
3, 19, :_reduce_8,
|
141
|
-
3, 19, :_reduce_9,
|
142
|
-
3, 19, :_reduce_10,
|
143
|
-
3, 19, :_reduce_11,
|
144
|
-
2, 19, :_reduce_12,
|
145
|
-
1, 19, :_reduce_13,
|
146
140
|
1, 19, :_reduce_none,
|
147
|
-
|
148
|
-
|
141
|
+
1, 19, :_reduce_none,
|
142
|
+
0, 19, :_reduce_3,
|
143
|
+
3, 20, :_reduce_4,
|
144
|
+
3, 20, :_reduce_5,
|
145
|
+
3, 20, :_reduce_6,
|
146
|
+
3, 20, :_reduce_7,
|
147
|
+
3, 20, :_reduce_8,
|
148
|
+
3, 20, :_reduce_9,
|
149
|
+
3, 20, :_reduce_10,
|
150
|
+
3, 20, :_reduce_11,
|
151
|
+
2, 20, :_reduce_12,
|
152
|
+
1, 20, :_reduce_13,
|
153
|
+
1, 20, :_reduce_none,
|
154
|
+
2, 20, :_reduce_15,
|
155
|
+
3, 20, :_reduce_16,
|
149
156
|
3, 20, :_reduce_17,
|
150
|
-
3,
|
157
|
+
3, 21, :_reduce_18,
|
158
|
+
3, 21, :_reduce_19 ]
|
151
159
|
|
152
|
-
racc_reduce_n =
|
160
|
+
racc_reduce_n = 20
|
153
161
|
|
154
|
-
racc_shift_n =
|
162
|
+
racc_shift_n = 38
|
155
163
|
|
156
164
|
racc_token_table = {
|
157
165
|
false => 0,
|
@@ -165,14 +173,15 @@ racc_token_table = {
|
|
165
173
|
"+" => 8,
|
166
174
|
"-" => 9,
|
167
175
|
:PERCENTAGE_OF => 10,
|
168
|
-
|
169
|
-
"
|
170
|
-
"
|
171
|
-
"
|
172
|
-
|
173
|
-
:
|
176
|
+
:PERCENTAGE_TO => 11,
|
177
|
+
"=" => 12,
|
178
|
+
"(" => 13,
|
179
|
+
")" => 14,
|
180
|
+
"|" => 15,
|
181
|
+
:NUMBER => 16,
|
182
|
+
:VARIABLE => 17 }
|
174
183
|
|
175
|
-
racc_nt_base =
|
184
|
+
racc_nt_base = 18
|
176
185
|
|
177
186
|
racc_use_result_var = true
|
178
187
|
|
@@ -204,6 +213,7 @@ Racc_token_to_s_table = [
|
|
204
213
|
"\"+\"",
|
205
214
|
"\"-\"",
|
206
215
|
"PERCENTAGE_OF",
|
216
|
+
"PERCENTAGE_TO",
|
207
217
|
"\"=\"",
|
208
218
|
"\"(\"",
|
209
219
|
"\")\"",
|
@@ -225,77 +235,77 @@ Racc_debug_parser = false
|
|
225
235
|
|
226
236
|
# reduce 2 omitted
|
227
237
|
|
228
|
-
module_eval(<<'.,.,', 'calc.y',
|
238
|
+
module_eval(<<'.,.,', 'calc.y', 14)
|
229
239
|
def _reduce_3(val, _values, result)
|
230
240
|
result = 0
|
231
241
|
result
|
232
242
|
end
|
233
243
|
.,.,
|
234
244
|
|
235
|
-
module_eval(<<'.,.,', 'calc.y',
|
245
|
+
module_eval(<<'.,.,', 'calc.y', 16)
|
236
246
|
def _reduce_4(val, _values, result)
|
237
247
|
result += val[2]
|
238
248
|
result
|
239
249
|
end
|
240
250
|
.,.,
|
241
251
|
|
242
|
-
module_eval(<<'.,.,', 'calc.y',
|
252
|
+
module_eval(<<'.,.,', 'calc.y', 17)
|
243
253
|
def _reduce_5(val, _values, result)
|
244
254
|
result -= val[2]
|
245
255
|
result
|
246
256
|
end
|
247
257
|
.,.,
|
248
258
|
|
249
|
-
module_eval(<<'.,.,', 'calc.y',
|
259
|
+
module_eval(<<'.,.,', 'calc.y', 18)
|
250
260
|
def _reduce_6(val, _values, result)
|
251
261
|
result *= val[2]
|
252
262
|
result
|
253
263
|
end
|
254
264
|
.,.,
|
255
265
|
|
256
|
-
module_eval(<<'.,.,', 'calc.y',
|
266
|
+
module_eval(<<'.,.,', 'calc.y', 19)
|
257
267
|
def _reduce_7(val, _values, result)
|
258
268
|
result /= val[2]
|
259
269
|
result
|
260
270
|
end
|
261
271
|
.,.,
|
262
272
|
|
263
|
-
module_eval(<<'.,.,', 'calc.y',
|
273
|
+
module_eval(<<'.,.,', 'calc.y', 20)
|
264
274
|
def _reduce_8(val, _values, result)
|
265
275
|
result %= val[2]
|
266
276
|
result
|
267
277
|
end
|
268
278
|
.,.,
|
269
279
|
|
270
|
-
module_eval(<<'.,.,', 'calc.y',
|
280
|
+
module_eval(<<'.,.,', 'calc.y', 21)
|
271
281
|
def _reduce_9(val, _values, result)
|
272
282
|
result = result.power(val[2])
|
273
283
|
result
|
274
284
|
end
|
275
285
|
.,.,
|
276
286
|
|
277
|
-
module_eval(<<'.,.,', 'calc.y',
|
287
|
+
module_eval(<<'.,.,', 'calc.y', 22)
|
278
288
|
def _reduce_10(val, _values, result)
|
279
289
|
result = val[1]
|
280
290
|
result
|
281
291
|
end
|
282
292
|
.,.,
|
283
293
|
|
284
|
-
module_eval(<<'.,.,', 'calc.y',
|
294
|
+
module_eval(<<'.,.,', 'calc.y', 23)
|
285
295
|
def _reduce_11(val, _values, result)
|
286
296
|
result = val[1].abs
|
287
297
|
result
|
288
298
|
end
|
289
299
|
.,.,
|
290
300
|
|
291
|
-
module_eval(<<'.,.,', 'calc.y',
|
301
|
+
module_eval(<<'.,.,', 'calc.y', 24)
|
292
302
|
def _reduce_12(val, _values, result)
|
293
303
|
result = -val[1]
|
294
304
|
result
|
295
305
|
end
|
296
306
|
.,.,
|
297
307
|
|
298
|
-
module_eval(<<'.,.,', 'calc.y',
|
308
|
+
module_eval(<<'.,.,', 'calc.y', 25)
|
299
309
|
def _reduce_13(val, _values, result)
|
300
310
|
result = Brain.lookup(val[0])
|
301
311
|
result
|
@@ -304,14 +314,14 @@ module_eval(<<'.,.,', 'calc.y', 24)
|
|
304
314
|
|
305
315
|
# reduce 14 omitted
|
306
316
|
|
307
|
-
module_eval(<<'.,.,', 'calc.y',
|
317
|
+
module_eval(<<'.,.,', 'calc.y', 27)
|
308
318
|
def _reduce_15(val, _values, result)
|
309
319
|
result = Maths::Functions.exec(val[0], val[1])
|
310
320
|
result
|
311
321
|
end
|
312
322
|
.,.,
|
313
323
|
|
314
|
-
module_eval(<<'.,.,', 'calc.y',
|
324
|
+
module_eval(<<'.,.,', 'calc.y', 28)
|
315
325
|
def _reduce_16(val, _values, result)
|
316
326
|
result = Percentage.build(val[0], val[2])
|
317
327
|
result
|
@@ -320,18 +330,25 @@ module_eval(<<'.,.,', 'calc.y', 27)
|
|
320
330
|
|
321
331
|
module_eval(<<'.,.,', 'calc.y', 29)
|
322
332
|
def _reduce_17(val, _values, result)
|
323
|
-
result =
|
333
|
+
result = Percentage.change(val[2], val[0])
|
324
334
|
result
|
325
335
|
end
|
326
336
|
.,.,
|
327
337
|
|
328
|
-
module_eval(<<'.,.,', 'calc.y',
|
338
|
+
module_eval(<<'.,.,', 'calc.y', 31)
|
329
339
|
def _reduce_18(val, _values, result)
|
330
340
|
result = Brain.assign(val[0], val[2])
|
331
341
|
result
|
332
342
|
end
|
333
343
|
.,.,
|
334
344
|
|
345
|
+
module_eval(<<'.,.,', 'calc.y', 32)
|
346
|
+
def _reduce_19(val, _values, result)
|
347
|
+
result = Brain.assign(val[0], val[2])
|
348
|
+
result
|
349
|
+
end
|
350
|
+
.,.,
|
351
|
+
|
335
352
|
def _reduce_none(val, _values, result)
|
336
353
|
val[0]
|
337
354
|
end
|
data/lib/maths/calc.y
CHANGED
@@ -6,6 +6,7 @@ class Calculator
|
|
6
6
|
left "^" "*" '/' '%'
|
7
7
|
left "+" "-"
|
8
8
|
right PERCENTAGE_OF
|
9
|
+
right PERCENTAGE_TO
|
9
10
|
right "="
|
10
11
|
preclow
|
11
12
|
rule
|
@@ -26,6 +27,7 @@ rule
|
|
26
27
|
| NUMBER
|
27
28
|
| FUNC exp { result = Maths::Functions.exec(val[0], val[1]) }
|
28
29
|
| exp PERCENTAGE_OF exp { result = Percentage.build(val[0], val[2]) }
|
30
|
+
| exp PERCENTAGE_TO exp { result = Percentage.change(val[2], val[0]) }
|
29
31
|
|
30
32
|
assign: VARIABLE "=" exp { result = Brain.assign(val[0], val[2]) }
|
31
33
|
| VARIABLE "=" assign { result = Brain.assign(val[0], val[2]) }
|
@@ -55,6 +57,9 @@ module Maths
|
|
55
57
|
when /\Aas % of/
|
56
58
|
@q.push [:PERCENTAGE_OF, $&]
|
57
59
|
|
60
|
+
when /\Aas a % change from/
|
61
|
+
@q.push [:PERCENTAGE_TO, $&]
|
62
|
+
|
58
63
|
# special terms
|
59
64
|
when /\Api/
|
60
65
|
@q.push [:NUMBER, BigDecimal.new("3.14159265358979323846264338327")]
|
data/lib/maths/percentage.rb
CHANGED
@@ -9,5 +9,10 @@ module Maths
|
|
9
9
|
denominator = BigDecimal.new(denominator.to_s)
|
10
10
|
Percentage.new(((numerator / denominator) * 100).to_s)
|
11
11
|
end
|
12
|
+
|
13
|
+
# Public: Calculates the % change of from to to
|
14
|
+
def self.change(from, to)
|
15
|
+
Percentage.new((((to / from) - 1) * 100).to_s)
|
16
|
+
end
|
12
17
|
end
|
13
18
|
end
|
data/lib/maths/version.rb
CHANGED