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 CHANGED
@@ -176,6 +176,8 @@ Percentages!
176
176
  ```
177
177
  maths> 2 as a % of 4
178
178
  = 50%
179
+ maths> 5 as a % change from 10
180
+ = -50%
179
181
  ```
180
182
 
181
183
  Maths also includes some constants:
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', 39)
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, 21, 6, 10, 9, 4,
71
- 22, 5, 8, 7, 6, 24, 9, 4, nil, 5,
72
- 8, 7, 6, nil, 9, 4, nil, 5, 8, 19,
73
- 6, nil, 9, 4, nil, 5, 8, 19, 6, nil,
74
- 9, 4, nil, 5, 8, 19, 6, nil, 9, 4,
75
- nil, 5, 8, 19, 6, nil, 9, 4, nil, 5,
76
- 8, 19, 6, nil, 9, 4, nil, 5, 8, 19,
77
- 6, nil, 9, 4, nil, 5, 8, 19, 6, nil,
78
- 9, 4, nil, 5, 8, 19, 6, nil, 9, 4,
79
- nil, 5, 8, 19, 6, nil, nil, 4, nil, 5,
80
- 8, 19, 16, 13, 14, 15, 11, 12, 17, nil,
81
- nil, nil, 33, 16, 13, 14, 15, 11, 12, 17,
82
- nil, nil, 32, 16, 13, 14, 15, 11, 12, 17,
83
- 16, 13, 14, 15, 11, 12, 17, 16, 13, 14,
84
- 15, 11, 12, 17, 16, 13, 14, 15 ]
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, 26, 26, 26, 26, 6, 0, 1, 22, 0,
88
- 7, 0, 0, 0, 22, 10, 17, 22, nil, 22,
89
- 22, 22, 17, nil, 4, 17, nil, 17, 17, 17,
90
- 4, nil, 5, 4, nil, 4, 4, 4, 5, nil,
91
- 16, 5, nil, 5, 5, 5, 16, nil, 15, 16,
92
- nil, 16, 16, 16, 15, nil, 9, 15, nil, 15,
93
- 15, 15, 9, nil, 14, 9, nil, 9, 9, 9,
94
- 14, nil, 11, 14, nil, 14, 14, 14, 11, nil,
95
- 12, 11, nil, 11, 11, 11, 12, nil, 13, 12,
96
- nil, 12, 12, 12, 13, nil, nil, 13, nil, 13,
97
- 13, 13, 20, 20, 20, 20, 20, 20, 20, nil,
98
- nil, nil, 20, 18, 18, 18, 18, 18, 18, 18,
99
- nil, nil, 18, 31, 31, 31, 31, 31, 31, 31,
100
- 2, 2, 2, 2, 2, 2, 2, 34, 34, 34,
101
- 34, 34, 34, 34, 25, 25, 25, 25 ]
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, 126, nil, 21, 29, -10, -1, nil, 53,
105
- 15, 69, 77, 85, 61, 45, 37, 13, 109, nil,
106
- 98, nil, 5, nil, nil, 140, -3, nil, nil, nil,
107
- nil, 119, nil, nil, 133, 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, -19, -1, -2, -19, -19, -19, -13, -14, -19,
111
- -19, -19, -19, -19, -19, -19, -19, -19, -19, -13,
112
- -19, -12, -19, -15, 36, -4, -5, -6, -7, -8,
113
- -9, -16, -10, -11, -17, -18 ]
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, 18, 20, nil, nil, nil,
117
- 23, nil, 25, 26, 27, 28, 29, 30, 31, nil,
118
- nil, nil, 35, 34 ]
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, nil,
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
- 2, 19, :_reduce_15,
148
- 3, 19, :_reduce_16,
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, 20, :_reduce_18 ]
157
+ 3, 21, :_reduce_18,
158
+ 3, 21, :_reduce_19 ]
151
159
 
152
- racc_reduce_n = 19
160
+ racc_reduce_n = 20
153
161
 
154
- racc_shift_n = 36
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
- "=" => 11,
169
- "(" => 12,
170
- ")" => 13,
171
- "|" => 14,
172
- :NUMBER => 15,
173
- :VARIABLE => 16 }
176
+ :PERCENTAGE_TO => 11,
177
+ "=" => 12,
178
+ "(" => 13,
179
+ ")" => 14,
180
+ "|" => 15,
181
+ :NUMBER => 16,
182
+ :VARIABLE => 17 }
174
183
 
175
- racc_nt_base = 17
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', 13)
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', 15)
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', 16)
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', 17)
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', 18)
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', 19)
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', 20)
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', 21)
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', 22)
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', 23)
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', 24)
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', 26)
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', 27)
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 = Brain.assign(val[0], val[2])
333
+ result = Percentage.change(val[2], val[0])
324
334
  result
325
335
  end
326
336
  .,.,
327
337
 
328
- module_eval(<<'.,.,', 'calc.y', 30)
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")]
@@ -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
@@ -1,3 +1,3 @@
1
1
  module Maths
2
- VERSION = "0.0.10"
2
+ VERSION = "0.0.11"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: maths
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.10
4
+ version: 0.0.11
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors: