measured 2.0.0 → 2.8.2

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 (57) hide show
  1. checksums.yaml +5 -5
  2. data/.github/workflows/ci.yml +31 -0
  3. data/CHANGELOG.md +60 -0
  4. data/README.md +68 -10
  5. data/Rakefile +22 -1
  6. data/cache/.keep +0 -0
  7. data/cache/length.json +2553 -0
  8. data/cache/volume.json +4695 -0
  9. data/cache/weight.json +3195 -0
  10. data/dev.yml +2 -6
  11. data/gemfiles/{activesupport-4.2.gemfile → activesupport-5.2.gemfile} +1 -1
  12. data/gemfiles/activesupport-6.0.gemfile +5 -0
  13. data/gemfiles/activesupport-6.1.gemfile +5 -0
  14. data/lib/measured/arithmetic.rb +10 -0
  15. data/lib/measured/base.rb +13 -6
  16. data/lib/measured/cache/json.rb +55 -0
  17. data/lib/measured/cache/json_writer.rb +9 -0
  18. data/lib/measured/cache/null.rb +16 -0
  19. data/lib/measured/conversion_table_builder.rb +110 -0
  20. data/lib/measured/cycle_detected.rb +11 -0
  21. data/lib/measured/measurable.rb +28 -21
  22. data/lib/measured/missing_conversion_path.rb +12 -0
  23. data/lib/measured/parser.rb +2 -1
  24. data/lib/measured/unit.rb +17 -27
  25. data/lib/measured/unit_already_added.rb +11 -0
  26. data/lib/measured/unit_error.rb +4 -0
  27. data/lib/measured/unit_system.rb +26 -21
  28. data/lib/measured/unit_system_builder.rb +46 -2
  29. data/lib/measured/units/length.rb +6 -3
  30. data/lib/measured/units/volume.rb +20 -0
  31. data/lib/measured/units/weight.rb +10 -2
  32. data/lib/measured/version.rb +2 -1
  33. data/lib/measured.rb +2 -0
  34. data/measured.gemspec +13 -5
  35. data/test/arithmetic_test.rb +36 -0
  36. data/test/cache/json_test.rb +43 -0
  37. data/test/cache/json_writer_test.rb +23 -0
  38. data/test/cache/null_test.rb +20 -0
  39. data/test/cache_consistency_test.rb +19 -0
  40. data/test/conversion_table_builder_test.rb +147 -0
  41. data/test/measurable_test.rb +28 -13
  42. data/test/parser_test.rb +1 -0
  43. data/test/support/always_true_cache.rb +14 -0
  44. data/test/support/fake_system.rb +1 -0
  45. data/test/support/subclasses.rb +7 -0
  46. data/test/test_helper.rb +5 -3
  47. data/test/unit_error_test.rb +1 -0
  48. data/test/unit_system_builder_test.rb +120 -2
  49. data/test/unit_system_test.rb +15 -0
  50. data/test/unit_test.rb +14 -5
  51. data/test/units/length_test.rb +123 -10
  52. data/test/units/volume_test.rb +497 -0
  53. data/test/units/weight_test.rb +290 -5
  54. metadata +49 -18
  55. data/.travis.yml +0 -17
  56. data/lib/measured/conversion_table.rb +0 -65
  57. data/test/conversion_table_test.rb +0 -98
@@ -0,0 +1,497 @@
1
+ # frozen_string_literal: true
2
+ require "test_helper"
3
+
4
+ class Measured::VolumeTest < ActiveSupport::TestCase
5
+ setup do
6
+ @volume = Measured::Volume.new(1, 'm3')
7
+ end
8
+
9
+ test ".unit_names_with_aliases should be the expected list of valid units" do
10
+ expected_units = %w(
11
+ m3
12
+ cubic_meter
13
+ cubic_metre
14
+ cubic_meters
15
+ cubic_metres
16
+ l
17
+ liter
18
+ litre
19
+ liters
20
+ litres
21
+ ft3
22
+ cm3
23
+ cubic_centimeter
24
+ cubic_centimeters
25
+ cubic_centimetre
26
+ cubic_centimetres
27
+ mm3
28
+ cubic_millimeter
29
+ cubic_millimeters
30
+ cubic_millimetre
31
+ cubic_millimetres
32
+ cubic_foot
33
+ cubic_feet
34
+ in3
35
+ cubic_inch
36
+ cubic_inches
37
+ gal
38
+ imp_gal
39
+ imperial_gallon
40
+ imp_gals
41
+ imperial_gallons
42
+ us_gal
43
+ us_gallon
44
+ us_gals
45
+ us_gallons
46
+ qt
47
+ imp_qt
48
+ imperial_quart
49
+ imp_qts
50
+ imperial_quarts
51
+ us_qt
52
+ us_quart
53
+ us_quarts
54
+ pt
55
+ imp_pt
56
+ imperial_pint
57
+ imp_pts
58
+ imperial_pints
59
+ us_pt
60
+ us_pint
61
+ us_pints
62
+ oz
63
+ fl_oz
64
+ imp_fl_oz
65
+ imperial_fluid_ounce
66
+ imperial_fluid_ounces
67
+ us_oz
68
+ us_fl_oz
69
+ us_fluid_ounce
70
+ us_fluid_ounces
71
+ )
72
+ expected_units += Measured::UnitSystemBuilder::SI_PREFIXES.flat_map do |short, long, _|
73
+ ["#{short}l", "#{long}liter", "#{long}litre", "#{long}liters", "#{long}litres"]
74
+ end
75
+
76
+ assert_equal expected_units.sort, Measured::Volume.unit_names_with_aliases
77
+ end
78
+
79
+ test ".unit_names should be the list of base unit names" do
80
+ expected_units = %w(l m3 ft3 in3 gal us_gal qt us_qt pt us_pt oz us_oz mm3 cm3)
81
+ expected_units += Measured::UnitSystemBuilder::SI_PREFIXES.map { |short, _, _| "#{short}l" }
82
+ assert_equal expected_units.sort, Measured::Volume.unit_names
83
+ end
84
+
85
+ test ".name" do
86
+ assert_equal "volume", Measured::Volume.name
87
+ end
88
+
89
+ test "Measured::Volume() delegates automatically to .new" do
90
+ assert_equal Measured::Volume.new(1, :ml), Measured::Volume(1, :ml)
91
+ assert_equal Measured::Volume.new(2, :fl_oz), Measured::Volume(2, :fl_oz)
92
+ end
93
+
94
+ test ".convert_to from ml to ml" do
95
+ assert_conversion Measured::Volume, "2000 ml", "2000 ml"
96
+ end
97
+
98
+ test ".convert_to from ft3 to ft3" do
99
+ assert_conversion Measured::Volume, "2000 ft3", "2000 ft3"
100
+ end
101
+
102
+ test ".convert_to from in3 to in3" do
103
+ assert_conversion Measured::Volume, "2000 in3", "2000 in3"
104
+ end
105
+
106
+ test ".convert_to from gal to gal" do
107
+ assert_conversion Measured::Volume, "2000 gal", "2000 gal"
108
+ end
109
+
110
+ test ".convert_to from us_gal to us_gal" do
111
+ assert_conversion Measured::Volume, "2000 us_gal", "2000 us_gal"
112
+ end
113
+
114
+ test ".convert_to from qt to qt" do
115
+ assert_conversion Measured::Volume, "2000 qt", "2000 qt"
116
+ end
117
+
118
+ test ".convert_to from us_qt to us_qt" do
119
+ assert_conversion Measured::Volume, "2000 us_qt", "2000 us_qt"
120
+ end
121
+
122
+ test ".convert_to from pt to pt" do
123
+ assert_conversion Measured::Volume, "2000 pt", "2000 pt"
124
+ end
125
+
126
+ test ".convert_to from us_pt to us_pt" do
127
+ assert_conversion Measured::Volume, "2000 us_pt", "2000 us_pt"
128
+ end
129
+
130
+ test ".convert_to from oz to oz" do
131
+ assert_conversion Measured::Volume, "2000 oz", "2000 oz"
132
+ end
133
+
134
+ test ".convert_to from us_oz to us_oz" do
135
+ assert_conversion Measured::Volume, "2000 us_oz", "2000 us_oz"
136
+ end
137
+
138
+ test ".convert_to from mm3 to mm3" do
139
+ assert_conversion Measured::Volume, "20000 mm3", "20000 mm3"
140
+ end
141
+
142
+ test ".convert_to from cm3 to cm3" do
143
+ assert_conversion Measured::Volume, "20000 cm3", "20000 cm3"
144
+ end
145
+
146
+ test ".convert_to from mm3 to m3" do
147
+ assert_conversion Measured::Volume, "20000 mm3", "0.00002 m3"
148
+ end
149
+
150
+ test ".convert_to from mm3 to ft3" do
151
+ assert_conversion Measured::Volume, "20000 mm3", "0.00070629333 ft3"
152
+ end
153
+
154
+ test ".convert_to from mm3 to in3" do
155
+ assert_conversion Measured::Volume, "20000 mm3", "1.2204749 in3"
156
+ end
157
+
158
+ test ".convert_to from mm3 to gal" do
159
+ assert_conversion Measured::Volume, "20000 mm3", "0.004399384965981756 gal"
160
+ end
161
+
162
+ test ".convert_to from mm3 to us_gal" do
163
+ assert_conversion Measured::Volume, "20000 mm3", "0.005283441047162969 us_gal"
164
+ end
165
+
166
+ test ".convert_to from mm3 to qt" do
167
+ assert_conversion Measured::Volume, "20000 mm3", "0.01759754 qt"
168
+ end
169
+
170
+ test ".convert_to from mm3 to us_qt" do
171
+ assert_conversion Measured::Volume, "20000 mm3", "0.021133764 us_qt"
172
+ end
173
+
174
+ test ".convert_to from mm3 to pt" do
175
+ assert_conversion Measured::Volume, "20000 mm3", "0.03519508 pt"
176
+ end
177
+
178
+ test ".convert_to from mm3 to us_pt" do
179
+ assert_conversion Measured::Volume, "20000 mm3", "0.042267528 us_pt"
180
+ end
181
+
182
+ test ".convert_to from mm3 to oz" do
183
+ assert_conversion Measured::Volume, "20000 mm3", "0.70390159 oz"
184
+ end
185
+
186
+ test ".convert_to from mm3 to us_oz" do
187
+ assert_conversion Measured::Volume, "20000 mm3", "0.67628045 us_oz"
188
+ end
189
+
190
+ test ".convert_to from cm3 to m3" do
191
+ assert_conversion Measured::Volume, "20000 cm3", "0.02 m3"
192
+ end
193
+
194
+ test ".convert_to from cm3 to ft3" do
195
+ assert_conversion Measured::Volume, "20000 cm3", "0.70629333 ft3"
196
+ end
197
+
198
+ test ".convert_to from cm3 to in3" do
199
+ assert_conversion Measured::Volume, "20000 cm3", "1220.4748818946457 in3"
200
+ end
201
+
202
+ test ".convert_to from cm3 to gal" do
203
+ assert_conversion Measured::Volume, "20000 cm3", "4.399384965981756 gal"
204
+ end
205
+
206
+ test ".convert_to from cm3 to us_gal" do
207
+ assert_conversion Measured::Volume, "20000 cm3", "5.283441047162969 us_gal"
208
+ end
209
+
210
+ test ".convert_to from cm3 to qt" do
211
+ assert_conversion Measured::Volume, "20000 cm3", "17.59754 qt"
212
+ end
213
+
214
+ test ".convert_to from cm3 to us_qt" do
215
+ assert_conversion Measured::Volume, "20000 cm3", "21.133764 us_qt"
216
+ end
217
+
218
+ test ".convert_to from cm3 to pt" do
219
+ assert_conversion Measured::Volume, "20000 cm3", "35.19508 pt"
220
+ end
221
+
222
+ test ".convert_to from cm3 to us_pt" do
223
+ assert_conversion Measured::Volume, "20000 cm3", "42.267528 us_pt"
224
+ end
225
+
226
+ test ".convert_to from cm3 to oz" do
227
+ assert_conversion Measured::Volume, "20000 cm3", "703.9015945570809 oz"
228
+ end
229
+
230
+ test ".convert_to from cm3 to us_oz" do
231
+ assert_conversion Measured::Volume, "20000 cm3", "676.28045403686 us_oz"
232
+ end
233
+
234
+ test ".convert_to from ml to m3" do
235
+ assert_conversion Measured::Volume, "2000 ml", "0.002 m3"
236
+ end
237
+
238
+ test ".convert_to from ml to ft3" do
239
+ assert_conversion Measured::Volume, "2000 ml", "0.07062933344 ft3"
240
+ end
241
+
242
+ test ".convert_to from ml to in3" do
243
+ assert_conversion Measured::Volume, "2000 ml", "122.0474881895 in3"
244
+ end
245
+
246
+ test ".convert_to from ml to gal" do
247
+ assert_conversion Measured::Volume, "2000 ml", "0.4399384966 gal"
248
+ end
249
+
250
+ test ".convert_to from ml to us_gal" do
251
+ assert_conversion Measured::Volume, "2000 ml", "0.5283441 us_gal"
252
+ end
253
+
254
+ test ".convert_to from ml to qt" do
255
+ assert_conversion Measured::Volume, "2000 ml", "1.759754 qt"
256
+ end
257
+
258
+ test ".convert_to from ml to us_qt" do
259
+ assert_conversion Measured::Volume, "2000 ml", "2.1133774149 us_qt"
260
+ end
261
+
262
+ test ".convert_to from ml to pt" do
263
+ assert_conversion Measured::Volume, "2000 ml", "3.519508 pt"
264
+ end
265
+
266
+ test ".convert_to from ml to us_pt" do
267
+ assert_conversion Measured::Volume, "2000 ml", "4.2267528377 us_pt"
268
+ end
269
+
270
+ test ".convert_to from ml to oz" do
271
+ assert_conversion Measured::Volume, "2000 ml", "70.39016 oz"
272
+ end
273
+
274
+ test ".convert_to from ml to us_oz" do
275
+ assert_conversion Measured::Volume, "2000 ml", "67.6280454037 us_oz"
276
+ end
277
+
278
+ test ".convert_to from m3 to ft3" do
279
+ assert_conversion Measured::Volume, "2 m3", "70.629333443 ft3"
280
+ end
281
+
282
+ test ".convert_to from m3 to in3" do
283
+ assert_conversion Measured::Volume, "2 m3", "122047.488189465 in3"
284
+ end
285
+
286
+ test ".convert_to from m3 to gal" do
287
+ assert_conversion Measured::Volume, "2 m3", "439.9384965982 gal"
288
+ end
289
+
290
+ test ".convert_to from m3 to us_gal" do
291
+ assert_conversion Measured::Volume, "2 m3", "528.3441047163 us_gal"
292
+ end
293
+
294
+ test ".convert_to from m3 to qt" do
295
+ assert_conversion Measured::Volume, "2 m3", "1759.7539863927 qt"
296
+ end
297
+
298
+ test ".convert_to from m3 to us_qt" do
299
+ assert_conversion Measured::Volume, "2 m3", "2113.3764188652 us_qt"
300
+ end
301
+
302
+ test ".convert_to from m3 to pt" do
303
+ assert_conversion Measured::Volume, "2 m3", "3519.5079727854 pt"
304
+ end
305
+
306
+ test ".convert_to from m3 to us_pt" do
307
+ assert_conversion Measured::Volume, "2 m3", "4226.7528377304 us_pt"
308
+ end
309
+
310
+ test ".convert_to from m3 to oz" do
311
+ assert_conversion Measured::Volume, "2 m3", "70390.1594557081 oz"
312
+ end
313
+
314
+ test ".convert_to from m3 to us_oz" do
315
+ assert_conversion Measured::Volume, "2 m3", "67628.045403686 us_oz"
316
+ end
317
+
318
+ test ".convert_to from ft3 to in3" do
319
+ assert_conversion Measured::Volume, "2 ft3", "3456 in3"
320
+ end
321
+
322
+ test ".convert_to from ft3 to gal" do
323
+ assert_conversion Measured::Volume, "2 ft3", "12.4576709181 gal"
324
+ end
325
+
326
+ test ".convert_to from ft3 to us_gal" do
327
+ assert_conversion Measured::Volume, "2 ft3", "14.961038961 us_gal"
328
+ end
329
+
330
+ test ".convert_to from ft3 to qt" do
331
+ assert_conversion Measured::Volume, "2 ft3", "49.8306836723 qt"
332
+ end
333
+
334
+ test ".convert_to from ft3 to us_qt" do
335
+ assert_conversion Measured::Volume, "2 ft3", "59.8441558442 us_qt"
336
+ end
337
+
338
+ test ".convert_to from ft3 to pt" do
339
+ assert_conversion Measured::Volume, "2 ft3", "99.6613673447 pt"
340
+ end
341
+
342
+ test ".convert_to from ft3 to us_pt" do
343
+ assert_conversion Measured::Volume, "2 ft3", "119.6883116883 us_pt"
344
+ end
345
+
346
+ test ".convert_to from ft3 to oz" do
347
+ assert_conversion Measured::Volume, "2 ft3", "1993.2273468937 oz"
348
+ end
349
+
350
+ test ".convert_to from ft3 to us_oz" do
351
+ assert_conversion Measured::Volume, "2 ft3", "1915.012987013 us_oz"
352
+ end
353
+
354
+ test ".convert_to from in3 to gal" do
355
+ assert_conversion Measured::Volume, "2 in3", "0.0072093003 gal"
356
+ end
357
+
358
+ test ".convert_to from in3 to us_gal" do
359
+ assert_conversion Measured::Volume, "2 in3", "0.008658008658 us_gal"
360
+ end
361
+
362
+ test ".convert_to from in3 to qt" do
363
+ assert_conversion Measured::Volume, "2 in3", "0.0288372012 qt"
364
+ end
365
+
366
+ test ".convert_to from in3 to us_qt" do
367
+ assert_conversion Measured::Volume, "2 in3", "0.03463203463 us_qt"
368
+ end
369
+
370
+ test ".convert_to from in3 to pt" do
371
+ assert_conversion Measured::Volume, "2 in3", "0.0576744024 pt"
372
+ end
373
+
374
+ test ".convert_to from in3 to us_pt" do
375
+ assert_conversion Measured::Volume, "2 in3", "0.06926406926 us_pt"
376
+ end
377
+
378
+ test ".convert_to from in3 to oz" do
379
+ assert_conversion Measured::Volume, "2 in3", "1.153488048 oz"
380
+ end
381
+
382
+ test ".convert_to from in3 to us_oz" do
383
+ assert_conversion Measured::Volume, "2 in3", "1.1082251082 us_oz"
384
+ end
385
+
386
+ test ".convert_to from gal to us_gal" do
387
+ assert_conversion Measured::Volume, "2 gal", "2.401899851 us_gal"
388
+ end
389
+
390
+ test ".convert_to from gal to qt" do
391
+ assert_conversion Measured::Volume, "2 gal", "8 qt"
392
+ end
393
+
394
+ test ".convert_to from gal to us_qt" do
395
+ assert_conversion Measured::Volume, "2 gal", "9.607599404 us_qt"
396
+ end
397
+
398
+ test ".convert_to from gal to pt" do
399
+ assert_conversion Measured::Volume, "2 gal", "16 pt"
400
+ end
401
+
402
+ test ".convert_to from gal to us_pt" do
403
+ assert_conversion Measured::Volume, "2 gal", "19.2151988081 us_pt"
404
+ end
405
+
406
+ test ".convert_to from gal to oz" do
407
+ assert_conversion Measured::Volume, "2 gal", "320 oz"
408
+ end
409
+
410
+ test ".convert_to from gal to us_oz" do
411
+ assert_conversion Measured::Volume, "2 gal", "307.4431809292 us_oz"
412
+ end
413
+
414
+ test ".convert_to from us_gal to qt" do
415
+ assert_conversion Measured::Volume, "2 us_gal", "6.661393477 qt"
416
+ end
417
+
418
+ test ".convert_to from us_gal to us_qt" do
419
+ assert_conversion Measured::Volume, "2 us_gal", "8 us_qt"
420
+ end
421
+
422
+ test ".convert_to from us_gal to pt" do
423
+ assert_conversion Measured::Volume, "2 us_gal", "13.3227869541 pt"
424
+ end
425
+
426
+ test ".convert_to from us_gal to us_pt" do
427
+ assert_conversion Measured::Volume, "2 us_gal", "16 us_pt"
428
+ end
429
+
430
+ test ".convert_to from us_gal to oz" do
431
+ assert_conversion Measured::Volume, "2 us_gal", "266.4557390813 oz"
432
+ end
433
+
434
+ test ".convert_to from us_gal to us_oz" do
435
+ assert_conversion Measured::Volume, "2 us_gal", "256 us_oz"
436
+ end
437
+
438
+ test ".convert_to from qt to us_qt" do
439
+ assert_conversion Measured::Volume, "2 qt", "2.401899851 us_qt"
440
+ end
441
+
442
+ test ".convert_to from qt to pt" do
443
+ assert_conversion Measured::Volume, "2 qt", "4 pt"
444
+ end
445
+
446
+ test ".convert_to from qt to us_pt" do
447
+ assert_conversion Measured::Volume, "2 qt", "4.803799702 us_pt"
448
+ end
449
+
450
+ test ".convert_to from qt to oz" do
451
+ assert_conversion Measured::Volume, "2 qt", "80 oz"
452
+ end
453
+
454
+ test ".convert_to from qt to us_oz" do
455
+ assert_conversion Measured::Volume, "2 qt", "76.8607952323 us_oz"
456
+ end
457
+
458
+ test ".convert_to from us_qt to pt" do
459
+ assert_conversion Measured::Volume, "2 us_qt", "3.3306967385 pt"
460
+ end
461
+
462
+ test ".convert_to from us_qt to us_pt" do
463
+ assert_conversion Measured::Volume, "2 us_qt", "4 us_pt"
464
+ end
465
+
466
+ test ".convert_to from us_qt to oz" do
467
+ assert_conversion Measured::Volume, "2 us_qt", "66.6139347703 oz"
468
+ end
469
+
470
+ test ".convert_to from us_qt to us_oz" do
471
+ assert_conversion Measured::Volume, "2 us_qt", "64 us_oz"
472
+ end
473
+
474
+ test ".convert_to from pt to us_pt" do
475
+ assert_conversion Measured::Volume, "2 pt", "2.401899851 us_pt"
476
+ end
477
+
478
+ test ".convert_to from pt to oz" do
479
+ assert_conversion Measured::Volume, "2 pt", "40 oz"
480
+ end
481
+
482
+ test ".convert_to from pt to us_oz" do
483
+ assert_conversion Measured::Volume, "2 pt", "38.4303976162 us_oz"
484
+ end
485
+
486
+ test ".convert_to from us_pt to oz" do
487
+ assert_conversion Measured::Volume, "2 us_pt", "33.3069673852 oz"
488
+ end
489
+
490
+ test ".convert_to from us_pt to us_oz" do
491
+ assert_conversion Measured::Volume, "2 us_pt", "32 us_oz"
492
+ end
493
+
494
+ test ".convert_to from oz to us_oz" do
495
+ assert_conversion Measured::Volume, "2 oz", "1.9215207864 us_oz"
496
+ end
497
+ end