measured 1.6.0 → 2.0.0.pre1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +4 -1
- data/README.md +27 -60
- data/lib/measured/arithmetic.rb +14 -15
- data/lib/measured/base.rb +18 -3
- data/lib/measured/case_insensitive_unit.rb +13 -0
- data/lib/measured/case_insensitive_unit_system.rb +11 -0
- data/lib/measured/conversion_table.rb +17 -20
- data/lib/measured/measurable.rb +37 -61
- data/lib/measured/unit.rb +5 -27
- data/lib/measured/unit_system.rb +67 -0
- data/lib/measured/unit_system_builder.rb +38 -0
- data/lib/measured/units/length.rb +7 -25
- data/lib/measured/units/weight.rb +5 -17
- data/lib/measured/version.rb +1 -1
- data/measured.gemspec +1 -1
- data/test/arithmetic_test.rb +22 -59
- data/test/case_insensitive_unit_system_test.rb +98 -0
- data/test/case_insensitive_unit_test.rb +79 -0
- data/test/conversion_table_test.rb +86 -7
- data/test/measurable_test.rb +47 -57
- data/test/support/fake_system.rb +15 -41
- data/test/test_helper.rb +5 -0
- data/test/unit_system_builder_test.rb +58 -0
- data/test/unit_system_test.rb +99 -0
- data/test/unit_test.rb +20 -82
- data/test/units/length_test.rb +13 -6
- data/test/units/weight_test.rb +7 -4
- metadata +18 -12
- data/lib/measured/case_sensitive_measurable.rb +0 -7
- data/lib/measured/conversion.rb +0 -95
- data/test/case_sensitive_measurable_test.rb +0 -227
- data/test/conversion_test.rb +0 -243
@@ -1,227 +0,0 @@
|
|
1
|
-
require "test_helper"
|
2
|
-
|
3
|
-
class Measured::CaseSensitiveMeasurableTest < ActiveSupport::TestCase
|
4
|
-
|
5
|
-
setup do
|
6
|
-
@magic = CaseSensitiveMagic.new(10, :magic_missile)
|
7
|
-
end
|
8
|
-
|
9
|
-
test "#initialize requires two params, the amount and the unit" do
|
10
|
-
assert_nothing_raised do
|
11
|
-
CaseSensitiveMagic.new(1, "fireball")
|
12
|
-
end
|
13
|
-
|
14
|
-
assert_raises ArgumentError do
|
15
|
-
CaseSensitiveMagic.new(1)
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
test "#initialize converts unit to string from symbol" do
|
20
|
-
magic = CaseSensitiveMagic.new(1, :arcane)
|
21
|
-
assert_equal "arcane", magic.unit
|
22
|
-
end
|
23
|
-
|
24
|
-
test "#initialize raises if it is an unknown unit" do
|
25
|
-
assert_raises Measured::UnitError do
|
26
|
-
CaseSensitiveMagic.new(1, "slash")
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
test "#initialize converts numbers and strings into BigDecimal" do
|
31
|
-
assert_equal BigDecimal(1), CaseSensitiveMagic.new(1, :arcane).value
|
32
|
-
assert_equal BigDecimal("2.3"), CaseSensitiveMagic.new("2.3", :arcane).value
|
33
|
-
assert_equal BigDecimal("5"), CaseSensitiveMagic.new("5", :arcane).value
|
34
|
-
end
|
35
|
-
|
36
|
-
test "#initialize converts floats to strings and then to BigDecimal so it does not raise" do
|
37
|
-
assert_equal BigDecimal("1.2345"), CaseSensitiveMagic.new(1.2345, :fire).value
|
38
|
-
end
|
39
|
-
|
40
|
-
test "#initialize converts numbers and strings BigDecimal and does not round large numbers" do
|
41
|
-
assert_equal BigDecimal(9.1234572342342, 14), CaseSensitiveMagic.new(9.1234572342342, :fire).value
|
42
|
-
assert_equal BigDecimal("9.1234572342342"), CaseSensitiveMagic.new(9.1234572342342, :fire).value
|
43
|
-
end
|
44
|
-
|
45
|
-
test "#initialize converts to the base unit name" do
|
46
|
-
assert_equal "fireball", CaseSensitiveMagic.new(1, :fire).unit
|
47
|
-
end
|
48
|
-
|
49
|
-
test "#initialize raises an expected error when initializing with nil value" do
|
50
|
-
exception = assert_raises(Measured::UnitError) do
|
51
|
-
CaseSensitiveMagic.new(nil, :fire)
|
52
|
-
end
|
53
|
-
assert_equal "Unit value cannot be nil", exception.message
|
54
|
-
end
|
55
|
-
|
56
|
-
test "#initialize raises an expected error when initializing with nil unit" do
|
57
|
-
exception = assert_raises(Measured::UnitError) do
|
58
|
-
CaseSensitiveMagic.new(1, nil)
|
59
|
-
end
|
60
|
-
assert_equal "Unit cannot be blank", exception.message
|
61
|
-
end
|
62
|
-
|
63
|
-
test "#initialize raises an expected error when initializing with empty string value" do
|
64
|
-
exception = assert_raises(Measured::UnitError) do
|
65
|
-
CaseSensitiveMagic.new("", :fire)
|
66
|
-
end
|
67
|
-
assert_equal "Unit value cannot be blank", exception.message
|
68
|
-
end
|
69
|
-
|
70
|
-
test "#initialize raises an expected error when initializing with empty string unit" do
|
71
|
-
exception = assert_raises(Measured::UnitError) do
|
72
|
-
CaseSensitiveMagic.new(1, "")
|
73
|
-
end
|
74
|
-
assert_equal "Unit cannot be blank", exception.message
|
75
|
-
end
|
76
|
-
|
77
|
-
test "#unit allows you to read the unit string" do
|
78
|
-
assert_equal "magic_missile", @magic.unit
|
79
|
-
end
|
80
|
-
|
81
|
-
test "#value allows you to read the numeric value" do
|
82
|
-
assert_equal BigDecimal(10), @magic.value
|
83
|
-
end
|
84
|
-
|
85
|
-
test ".conversion is set and cached" do
|
86
|
-
conversion = CaseSensitiveMagic.conversion
|
87
|
-
|
88
|
-
assert_instance_of Measured::Conversion, conversion
|
89
|
-
assert_equal conversion, CaseSensitiveMagic.conversion
|
90
|
-
end
|
91
|
-
|
92
|
-
test ".conversion is set to case sensitive" do
|
93
|
-
conversion = CaseSensitiveMagic.conversion
|
94
|
-
|
95
|
-
assert_instance_of Measured::Conversion, conversion
|
96
|
-
assert_equal conversion, CaseSensitiveMagic.conversion
|
97
|
-
assert_equal true, conversion.case_sensitive
|
98
|
-
end
|
99
|
-
|
100
|
-
test ".units returns just the base units" do
|
101
|
-
assert_equal ["arcane", "fireball", "ice", "magic_missile", "ultima"], CaseSensitiveMagic.units
|
102
|
-
end
|
103
|
-
|
104
|
-
test ".units_with_aliases returns all units" do
|
105
|
-
assert_equal ["arcane", "fire", "fireball", "fireballs", "ice", "magic_missile", "magic_missiles", "ultima"], CaseSensitiveMagic.units_with_aliases
|
106
|
-
end
|
107
|
-
|
108
|
-
test ".valid_unit? looks at the list of units and aliases" do
|
109
|
-
assert CaseSensitiveMagic.valid_unit?("fire")
|
110
|
-
assert CaseSensitiveMagic.valid_unit?("fireball")
|
111
|
-
assert CaseSensitiveMagic.valid_unit?(:ice)
|
112
|
-
refute CaseSensitiveMagic.valid_unit?("junk")
|
113
|
-
end
|
114
|
-
|
115
|
-
test ".name looks at the class name" do
|
116
|
-
module Example
|
117
|
-
class VeryComplexThing < Measured::Measurable ; end
|
118
|
-
end
|
119
|
-
|
120
|
-
assert_equal "case sensitive magic", CaseSensitiveMagic.name
|
121
|
-
assert_equal "measurable", Measured::Measurable.name
|
122
|
-
assert_equal "very complex thing", Example::VeryComplexThing.name
|
123
|
-
end
|
124
|
-
|
125
|
-
test "#convert_to raises on an invalid unit" do
|
126
|
-
assert_raises Measured::UnitError do
|
127
|
-
@magic.convert_to(:punch)
|
128
|
-
end
|
129
|
-
end
|
130
|
-
|
131
|
-
test "#convert_to returns a new object of the same type in the new unit" do
|
132
|
-
converted = @magic.convert_to(:arcane)
|
133
|
-
|
134
|
-
assert_equal converted, @magic
|
135
|
-
refute_equal converted.object_id, @magic.object_id
|
136
|
-
assert_equal BigDecimal(10), @magic.value
|
137
|
-
assert_equal "magic_missile", @magic.unit
|
138
|
-
assert_equal BigDecimal(1), converted.value
|
139
|
-
assert_equal "arcane", converted.unit
|
140
|
-
end
|
141
|
-
|
142
|
-
test "#convert_to from and to the same unit returns the same object" do
|
143
|
-
converted = @magic.convert_to(@magic.unit)
|
144
|
-
assert_equal converted.object_id, @magic.object_id
|
145
|
-
end
|
146
|
-
|
147
|
-
test "#convert_to! replaces the existing object with a new version in the new unit" do
|
148
|
-
converted = @magic.convert_to!(:arcane)
|
149
|
-
|
150
|
-
assert_equal converted, @magic
|
151
|
-
assert_equal BigDecimal(1), @magic.value
|
152
|
-
assert_equal "arcane", @magic.unit
|
153
|
-
assert_equal BigDecimal(1), converted.value
|
154
|
-
assert_equal "arcane", converted.unit
|
155
|
-
end
|
156
|
-
|
157
|
-
test "#to_s outputs the number and the unit" do
|
158
|
-
assert_equal "10 fireball", CaseSensitiveMagic.new(10, :fire).to_s
|
159
|
-
assert_equal "1.234 magic_missile", CaseSensitiveMagic.new("1.234", :magic_missile).to_s
|
160
|
-
end
|
161
|
-
|
162
|
-
test "#inspect shows the number and the unit" do
|
163
|
-
assert_equal "#<CaseSensitiveMagic: 10.0 fireball>", CaseSensitiveMagic.new(10, :fire).inspect
|
164
|
-
assert_equal "#<CaseSensitiveMagic: 1.234 magic_missile>", CaseSensitiveMagic.new(1.234, :magic_missile).inspect
|
165
|
-
end
|
166
|
-
|
167
|
-
test "#<=> compares regardless of the unit" do
|
168
|
-
assert_equal -1, @magic <=> CaseSensitiveMagic.new(10, :fire)
|
169
|
-
assert_equal 1, @magic <=> CaseSensitiveMagic.new(9, :magic_missile)
|
170
|
-
assert_equal 0, @magic <=> CaseSensitiveMagic.new(10, :magic_missile)
|
171
|
-
assert_equal -1, @magic <=> CaseSensitiveMagic.new(11, :magic_missile)
|
172
|
-
end
|
173
|
-
|
174
|
-
test "#<=> compares against zero" do
|
175
|
-
assert_equal 1, @magic <=> 0
|
176
|
-
assert_equal 1, @magic <=> BigDecimal.new(0)
|
177
|
-
assert_equal 1, @magic <=> 0.00
|
178
|
-
assert_equal -1, CaseSensitiveMagic.new(-1, :magic_missile) <=> 0
|
179
|
-
end
|
180
|
-
|
181
|
-
test "#== should be the same if the classes, unit, and amount match" do
|
182
|
-
assert @magic == @magic
|
183
|
-
assert CaseSensitiveMagic.new(10, :magic_missile) == CaseSensitiveMagic.new("10", "magic_missile")
|
184
|
-
assert CaseSensitiveMagic.new(1, :arcane) == CaseSensitiveMagic.new(10, :magic_missile)
|
185
|
-
refute CaseSensitiveMagic.new(1, :arcane) == CaseSensitiveMagic.new(10.1, :magic_missile)
|
186
|
-
end
|
187
|
-
|
188
|
-
test "#== should be the same if the classes and amount match but the unit does not so they convert" do
|
189
|
-
assert CaseSensitiveMagic.new(2, :magic_missile) == CaseSensitiveMagic.new("1", "ice")
|
190
|
-
end
|
191
|
-
|
192
|
-
test "#== compares against zero" do
|
193
|
-
assert CaseSensitiveMagic.new(0, :fire) == 0
|
194
|
-
assert CaseSensitiveMagic.new(0, :magic_missile) == 0
|
195
|
-
assert CaseSensitiveMagic.new(0, :fire) == BigDecimal.new(0)
|
196
|
-
assert CaseSensitiveMagic.new(0, :fire) == 0.00
|
197
|
-
refute @magic == 0
|
198
|
-
refute @magic == BigDecimal.new(0)
|
199
|
-
end
|
200
|
-
|
201
|
-
test "#> and #< should compare measurements" do
|
202
|
-
assert CaseSensitiveMagic.new(10, :magic_missile) < CaseSensitiveMagic.new(20, :magic_missile)
|
203
|
-
refute CaseSensitiveMagic.new(10, :magic_missile) > CaseSensitiveMagic.new(20, :magic_missile)
|
204
|
-
end
|
205
|
-
|
206
|
-
test "#> and #< should compare measurements of different units" do
|
207
|
-
assert CaseSensitiveMagic.new(10, :magic_missile) < CaseSensitiveMagic.new(100, :ice)
|
208
|
-
refute CaseSensitiveMagic.new(10, :magic_missile) > CaseSensitiveMagic.new(100, :ice)
|
209
|
-
end
|
210
|
-
|
211
|
-
test "#> and #< should compare against zero" do
|
212
|
-
assert @magic > 0
|
213
|
-
assert @magic > BigDecimal.new(0)
|
214
|
-
assert @magic > 0.00
|
215
|
-
assert CaseSensitiveMagic.new(-1, :arcane) < 0
|
216
|
-
refute @magic < 0
|
217
|
-
refute CaseSensitiveMagic.new(-1, :arcane) > 0
|
218
|
-
end
|
219
|
-
|
220
|
-
test "#eql? should be the same if the classes and amount match, and unit is converted" do
|
221
|
-
assert @magic == @magic
|
222
|
-
assert CaseSensitiveMagic.new(10, :magic_missile) == CaseSensitiveMagic.new("10", "magic_missile")
|
223
|
-
assert CaseSensitiveMagic.new(1, :arcane) == CaseSensitiveMagic.new(10, :magic_missile)
|
224
|
-
refute CaseSensitiveMagic.new(1, :arcane) == CaseSensitiveMagic.new(10.1, :magic_missile)
|
225
|
-
end
|
226
|
-
|
227
|
-
end
|
data/test/conversion_test.rb
DELETED
@@ -1,243 +0,0 @@
|
|
1
|
-
require "test_helper"
|
2
|
-
|
3
|
-
class Measured::ConversionTest < ActiveSupport::TestCase
|
4
|
-
setup do
|
5
|
-
@conversion = Measured::Conversion.new
|
6
|
-
end
|
7
|
-
|
8
|
-
test "#base sets the base unit" do
|
9
|
-
@conversion.set_base :m, aliases: [:metre]
|
10
|
-
assert_equal ["m", "metre"], @conversion.base_unit.names
|
11
|
-
end
|
12
|
-
|
13
|
-
test "#base doesn't allow a second base to be added" do
|
14
|
-
@conversion.set_base :m, aliases: [:metre]
|
15
|
-
|
16
|
-
assert_raises Measured::UnitError do
|
17
|
-
@conversion.set_base :in
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
test "#add adds a new unit" do
|
22
|
-
@conversion.set_base :m
|
23
|
-
@conversion.add :in, aliases: [:inch], value: "0.0254 meter"
|
24
|
-
|
25
|
-
assert_equal 2, @conversion.units.count
|
26
|
-
end
|
27
|
-
|
28
|
-
test "#add cannot add duplicate unit names" do
|
29
|
-
@conversion.set_base :m
|
30
|
-
@conversion.add :in, aliases: [:inch], value: "0.0254 meter"
|
31
|
-
|
32
|
-
assert_raises Measured::UnitError do
|
33
|
-
@conversion.add :in, aliases: [:thing], value: "123 m"
|
34
|
-
end
|
35
|
-
|
36
|
-
assert_raises Measured::UnitError do
|
37
|
-
@conversion.add :inch, value: "123 m"
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
test "#add does not allow you to add a unit before the base" do
|
42
|
-
assert_raises Measured::UnitError do
|
43
|
-
@conversion.add :in, aliases: [:inch], value: "0.0254 meter"
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
test "#unit_names_with_aliases lists all allowed unit names" do
|
48
|
-
@conversion.set_base :m
|
49
|
-
@conversion.add :in, aliases: [:inch], value: "0.0254 meter"
|
50
|
-
@conversion.add :ft, aliases: [:feet, :foot], value: "0.3048 meter"
|
51
|
-
|
52
|
-
assert_equal ["feet", "foot", "ft", "in", "inch", "m"], @conversion.unit_names_with_aliases
|
53
|
-
end
|
54
|
-
|
55
|
-
test "#unit_names lists all base unit names without aliases" do
|
56
|
-
@conversion.set_base :m
|
57
|
-
@conversion.add :in, aliases: [:inch], value: "0.0254 meter"
|
58
|
-
@conversion.add :ft, aliases: [:feet, :foot], value: "0.3048 meter"
|
59
|
-
|
60
|
-
assert_equal ["ft", "in", "m"], @conversion.unit_names
|
61
|
-
end
|
62
|
-
|
63
|
-
test "#unit? checks if the unit is part of the units and aliases" do
|
64
|
-
@conversion.set_base :m
|
65
|
-
@conversion.add :inch, aliases: [:in], value: "0.0254 meter"
|
66
|
-
|
67
|
-
assert @conversion.unit?(:inch)
|
68
|
-
assert @conversion.unit?("m")
|
69
|
-
assert @conversion.unit?("M")
|
70
|
-
refute @conversion.unit?("in")
|
71
|
-
refute @conversion.unit?(:yard)
|
72
|
-
end
|
73
|
-
|
74
|
-
test "#unit? takes into account case_sensitive flag" do
|
75
|
-
conversion = Measured::Conversion.new(case_sensitive: true)
|
76
|
-
conversion.set_base :m
|
77
|
-
conversion.add :inch, aliases: [:in], value: "0.0254 meter"
|
78
|
-
|
79
|
-
assert conversion.unit?(:inch)
|
80
|
-
assert conversion.unit?("m")
|
81
|
-
refute conversion.unit?("M")
|
82
|
-
refute conversion.unit?("in")
|
83
|
-
end
|
84
|
-
|
85
|
-
test "#unit? with blank and nil arguments" do
|
86
|
-
refute @conversion.unit?("")
|
87
|
-
refute @conversion.unit?(nil)
|
88
|
-
end
|
89
|
-
|
90
|
-
test "#unit_or_alias? checks if the unit is part of the units but not aliases" do
|
91
|
-
@conversion.set_base :m
|
92
|
-
@conversion.add :inch, aliases: [:in], value: "0.0254 meter"
|
93
|
-
|
94
|
-
assert @conversion.unit_or_alias?(:inch)
|
95
|
-
assert @conversion.unit_or_alias?("m")
|
96
|
-
assert @conversion.unit_or_alias?(:IN)
|
97
|
-
assert @conversion.unit_or_alias?("in")
|
98
|
-
refute @conversion.unit_or_alias?(:yard)
|
99
|
-
end
|
100
|
-
|
101
|
-
test "#unit_or_alias? takes into account case_sensitive flag" do
|
102
|
-
conversion = Measured::Conversion.new(case_sensitive: true)
|
103
|
-
conversion.set_base :m
|
104
|
-
conversion.add :inch, aliases: [:in], value: "0.0254 meter"
|
105
|
-
|
106
|
-
assert conversion.unit_or_alias?(:inch)
|
107
|
-
assert conversion.unit_or_alias?("m")
|
108
|
-
refute conversion.unit_or_alias?(:M)
|
109
|
-
refute conversion.unit_or_alias?("IN")
|
110
|
-
end
|
111
|
-
|
112
|
-
test "#unit_or_alias? with blank and nil arguments" do
|
113
|
-
@conversion.set_base :m
|
114
|
-
@conversion.add :inch, aliases: [:in], value: "0.0254 meter"
|
115
|
-
|
116
|
-
refute @conversion.unit_or_alias?("")
|
117
|
-
refute @conversion.unit_or_alias?(nil)
|
118
|
-
end
|
119
|
-
|
120
|
-
test "#to_unit_name converts a unit name to its base unit" do
|
121
|
-
assert_equal "fireball", Magic.conversion.to_unit_name("fire")
|
122
|
-
end
|
123
|
-
|
124
|
-
test "#to_unit_name does not care about string or symbol" do
|
125
|
-
assert_equal "fireball", Magic.conversion.to_unit_name(:fire)
|
126
|
-
end
|
127
|
-
|
128
|
-
test "#to_unit_name passes through if already base unit name" do
|
129
|
-
assert_equal "fireball", Magic.conversion.to_unit_name("fireball")
|
130
|
-
end
|
131
|
-
|
132
|
-
test "#to_unit_name raises if not found" do
|
133
|
-
assert_raises Measured::UnitError do
|
134
|
-
Magic.conversion.to_unit_name("thunder")
|
135
|
-
end
|
136
|
-
end
|
137
|
-
|
138
|
-
test "#convert raises if either unit is not found" do
|
139
|
-
assert_raises Measured::UnitError do
|
140
|
-
Magic.conversion.convert(1, from: "fire", to: "doesnt_exist")
|
141
|
-
end
|
142
|
-
|
143
|
-
assert_raises Measured::UnitError do
|
144
|
-
Magic.conversion.convert(1, from: "doesnt_exist", to: "fire")
|
145
|
-
end
|
146
|
-
end
|
147
|
-
|
148
|
-
test "#convert converts betwen two known units" do
|
149
|
-
@conversion.set_base :m
|
150
|
-
@conversion.add :cm, value: "0.01 m"
|
151
|
-
|
152
|
-
assert_equal BigDecimal("10"), @conversion.convert(BigDecimal("1000"), from: "cm", to: "m")
|
153
|
-
assert_equal BigDecimal("250"), @conversion.convert(BigDecimal("2.5"), from: "m", to: "cm")
|
154
|
-
end
|
155
|
-
|
156
|
-
test "#convert handles the same unit" do
|
157
|
-
@conversion.set_base :m
|
158
|
-
@conversion.add :cm, value: "0.01 m"
|
159
|
-
|
160
|
-
assert_equal BigDecimal("2"), @conversion.convert(BigDecimal("2"), from: "cm", to: "cm")
|
161
|
-
end
|
162
|
-
|
163
|
-
test "#conversion_table returns expected nested hashes with BigDecimal conversion factors in a tiny data set" do
|
164
|
-
@conversion.set_base :m
|
165
|
-
@conversion.add :cm, value: "0.01 m"
|
166
|
-
|
167
|
-
expected = {
|
168
|
-
"m" => {
|
169
|
-
"m" => BigDecimal("1"),
|
170
|
-
"cm" => BigDecimal("100")
|
171
|
-
},
|
172
|
-
"cm" => {
|
173
|
-
"cm" => BigDecimal("1"),
|
174
|
-
"m" => BigDecimal("0.01")
|
175
|
-
}
|
176
|
-
}
|
177
|
-
|
178
|
-
assert_equal expected, @conversion.conversion_table
|
179
|
-
end
|
180
|
-
|
181
|
-
test "#conversion_table returns expected nested hashes with BigDecimal conversion factors" do
|
182
|
-
@conversion.set_base :m
|
183
|
-
@conversion.add :cm, value: "0.01 m"
|
184
|
-
@conversion.add :mm, value: "0.001 m"
|
185
|
-
|
186
|
-
expected = {
|
187
|
-
"m" => {
|
188
|
-
"m" => BigDecimal("1"),
|
189
|
-
"cm" => BigDecimal("100"),
|
190
|
-
"mm" => BigDecimal("1000")
|
191
|
-
},
|
192
|
-
"cm" => {
|
193
|
-
"cm" => BigDecimal("1"),
|
194
|
-
"m" => BigDecimal("0.01"),
|
195
|
-
"mm" => BigDecimal("10")
|
196
|
-
},
|
197
|
-
"mm" => {
|
198
|
-
"mm" => BigDecimal("1"),
|
199
|
-
"m" => BigDecimal("0.001"),
|
200
|
-
"cm" => BigDecimal("0.1")
|
201
|
-
}
|
202
|
-
}
|
203
|
-
|
204
|
-
assert_equal expected, @conversion.conversion_table
|
205
|
-
end
|
206
|
-
|
207
|
-
test "#conversion_table returns expected nested hashes with BigDecimal conversion factors in an indrect path" do
|
208
|
-
@conversion.set_base :mm
|
209
|
-
@conversion.add :cm, value: "10 mm"
|
210
|
-
@conversion.add :dm, value: "10 cm"
|
211
|
-
@conversion.add :m, value: "10 dm"
|
212
|
-
|
213
|
-
expected = {
|
214
|
-
"m" => {
|
215
|
-
"m" => BigDecimal("1"),
|
216
|
-
"cm" => BigDecimal("100"),
|
217
|
-
"dm" => BigDecimal("10"),
|
218
|
-
"mm" => BigDecimal("1000")
|
219
|
-
},
|
220
|
-
"cm" => {
|
221
|
-
"cm" => BigDecimal("1"),
|
222
|
-
"dm" => BigDecimal("0.1"),
|
223
|
-
"m" => BigDecimal("0.01"),
|
224
|
-
"mm" => BigDecimal("10")
|
225
|
-
},
|
226
|
-
"dm" => {
|
227
|
-
"dm" => BigDecimal("1"),
|
228
|
-
"cm" => BigDecimal("10"),
|
229
|
-
"m" => BigDecimal("0.1"),
|
230
|
-
"mm" => BigDecimal("100")
|
231
|
-
},
|
232
|
-
"mm" => {
|
233
|
-
"mm" => BigDecimal("1"),
|
234
|
-
"m" => BigDecimal("0.001"),
|
235
|
-
"dm" => BigDecimal("0.01"),
|
236
|
-
"cm" => BigDecimal("0.1")
|
237
|
-
}
|
238
|
-
}
|
239
|
-
|
240
|
-
assert_equal expected, @conversion.conversion_table
|
241
|
-
end
|
242
|
-
|
243
|
-
end
|