ruby-units 0.1.1 → 0.2.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.
- data/CHANGELOG +52 -6
- data/README +1 -1
- data/lib/ruby-units.rb +383 -196
- data/lib/ruby_units.rb +1 -0
- data/lib/units.rb +13 -12
- data/test/test_ruby-units.rb +148 -59
- metadata +4 -3
data/lib/ruby_units.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require 'ruby-units'
|
data/lib/units.rb
CHANGED
@@ -61,7 +61,7 @@ UNIT_DEFINITIONS = {
|
|
61
61
|
'<AMU>' => [%w{u AMU amu}, 6.0221415e26, :mass, %w{<kilogram>}],
|
62
62
|
'<dalton>' => [%w{Da Dalton Daltons dalton daltons}, 6.0221415e26, :mass, %w{<kilogram>}],
|
63
63
|
'<slug>' => [%w{slug slugs}, 14.5939029, :mass, %w{<kilogram>}],
|
64
|
-
'<short-ton>' => [%w{
|
64
|
+
'<short-ton>' => [%w{tn ton}, 907.18474, :mass, %w{<kilogram>}],
|
65
65
|
'<metric-ton>'=>[%w{tonne}, 1000, :mass, %w{<kilogram>}],
|
66
66
|
'<carat>' => [%w{ct carat carats}, 0.0002, :mass, %w{<kilogram>}],
|
67
67
|
'<pound-mass>' => [%w{lbs lb pound pounds #}, 0.45359237, :mass, %w{<kilogram>}],
|
@@ -88,12 +88,12 @@ UNIT_DEFINITIONS = {
|
|
88
88
|
'<knot>' => [%w{kn knot knots}, 0.514444444, :speed, %w{<meter>}, %w{<second>}],
|
89
89
|
'<fps>' => [%w{fps}, 0.3048, :speed, %w{<meter>}, %w{<second>}],
|
90
90
|
|
91
|
-
#
|
92
|
-
'<kelvin>' => [%w{degK kelvin Kelvin}, 1.0, :temperature, %w{<
|
93
|
-
'<celcius>' => [%w{degC celcius Celcius}, 1.0, :temperature, %w{<
|
94
|
-
'<farenheit>' => [%w{degF farenheit Farenheit}, 1.8, :temperature, %w{<
|
95
|
-
'<rankine>' => [%w{degR rankine Rankine}, 1.8, :temperature, %w{<
|
96
|
-
|
91
|
+
#temperature_difference
|
92
|
+
'<kelvin>' => [%w{degK kelvin Kelvin}, 1.0, :temperature, %w{<kelvin>}],
|
93
|
+
'<celcius>' => [%w{degC celcius Celcius}, 1.0, :temperature, %w{<kelvin>}],
|
94
|
+
'<farenheit>' => [%w{degF farenheit Farenheit}, 1.8, :temperature, %w{<kelvin>}],
|
95
|
+
'<rankine>' => [%w{degR rankine Rankine}, 1.8, :temperature, %w{<kelvin>}],
|
96
|
+
|
97
97
|
#time
|
98
98
|
'<second>'=> [%w{s sec second seconds}, 1.0, :time, %w{<second>}],
|
99
99
|
'<minute>'=> [%w{min minute minutes}, 60.0, :time, %w{<second>}],
|
@@ -109,9 +109,9 @@ UNIT_DEFINITIONS = {
|
|
109
109
|
'<pascal>' => [%w{Pa pascal Pascal}, 1.0, :pressure, %w{<kilogram>},%w{<meter> <second> <second>}],
|
110
110
|
'<bar>' => [%w{bar bars}, 100000, :pressure, %w{<kilogram>},%w{<meter> <second> <second>}],
|
111
111
|
'<mmHg>' => [%w{mmHg}, 133.322368,:pressure, %w{<kilogram>},%w{<meter> <second> <second>}],
|
112
|
-
'<torr>' => [%w{
|
112
|
+
'<torr>' => [%w{torr}, 133.322368,:pressure, %w{<kilogram>},%w{<meter> <second> <second>}],
|
113
113
|
'<bar>' => [%w{bar}, 100000,:pressure, %w{<kilogram>},%w{<meter> <second> <second>}],
|
114
|
-
'<atm>' => [%w{atm atmosphere atmospheres}, 101325,:pressure, %w{<kilogram>},%w{<meter> <second> <second>}],
|
114
|
+
'<atm>' => [%w{atm ATM atmosphere atmospheres}, 101325,:pressure, %w{<kilogram>},%w{<meter> <second> <second>}],
|
115
115
|
'<psi>' => [%w{psi}, 6894.76,:pressure, %w{<kilogram>},%w{<meter> <second> <second>}],
|
116
116
|
'<cmh2o>' => [%w{cmH2O}, 98.0638,:pressure, %w{<kilogram>},%w{<meter> <second> <second>}],
|
117
117
|
|
@@ -174,7 +174,7 @@ UNIT_DEFINITIONS = {
|
|
174
174
|
'<hertz>' => [%w{Hz hertz Hertz}, 1.0, :frequency, %w{<1>}, %{<second>}],
|
175
175
|
|
176
176
|
#angle
|
177
|
-
'<radian>' =>[%w{rad radian
|
177
|
+
'<radian>' =>[%w{rad radian radian}, 1.0, :angle, %w{<radian>}],
|
178
178
|
'<degree>' =>[%w{deg degree degrees}, Math::PI / 180.0, :angle, %w{<radian>}],
|
179
179
|
'<grad>' =>[%w{grad gradian grads}, Math::PI / 200.0, :angle, %w{<radian>}],
|
180
180
|
'<steradian>' => [%w{sr steradian steradians}, 1.0, :solid_angle, %w{<steradian>}],
|
@@ -215,11 +215,12 @@ UNIT_DEFINITIONS = {
|
|
215
215
|
'<base-pair>' => [%w{bp}, 1.0, :counting, %w{<each>}],
|
216
216
|
'<nucleotide>' => [%w{nt}, 1.0, :counting, %w{<each>}],
|
217
217
|
'<molecule>' => [%w{molecule molecules}, 1.0, :counting, %w{<each>}],
|
218
|
-
'<dozen>' => [%w{dz
|
218
|
+
'<dozen>' => [%w{doz dz dozen},12.0,:prefix_only, %w{<each>}],
|
219
219
|
'<percent>'=> [%w{% percent}, 0.01, :prefix_only, %w{<centi>}],
|
220
220
|
'<ppm>' => [%w{ppm},1e-6,:prefix_only, %w{<micro>}],
|
221
221
|
'<ppt>' => [%w{ppt},1e-9,:prefix_only, %w{<nano>}],
|
222
|
-
'<gross>' => [%w{gr gross},144.0, :prefix_only, %w{<dozen> <dozen>}]
|
222
|
+
'<gross>' => [%w{gr gross},144.0, :prefix_only, %w{<dozen> <dozen>}],
|
223
|
+
'<decibel>' => [%w{dB decibel decibels}, 1.0, :logarithmic, %w{<decibel>}]
|
223
224
|
|
224
225
|
|
225
226
|
} # doc
|
data/test/test_ruby-units.rb
CHANGED
@@ -3,11 +3,12 @@ require 'ruby-units'
|
|
3
3
|
|
4
4
|
class Unit < Numeric
|
5
5
|
@@USER_DEFINITIONS = {'<inchworm>' => [%w{inworm inchworm}, 0.0254, :length, %w{<meter>} ],
|
6
|
+
'<cell>' => [%w{cells cell}, 1, :counting, %w{<each>}],
|
6
7
|
'<habenero>' => [%{degH}, 100, :temperature, %w{<celcius>}]}
|
7
8
|
Unit.setup
|
8
9
|
end
|
9
10
|
|
10
|
-
class
|
11
|
+
class TestRubyUnits < Test::Unit::TestCase
|
11
12
|
|
12
13
|
def test_clone
|
13
14
|
unit1= "1 mm".unit
|
@@ -31,14 +32,14 @@ class TestRubyUnit < Test::Unit::TestCase
|
|
31
32
|
def test_create_unit_only
|
32
33
|
unit1 = Unit.new("m")
|
33
34
|
assert_equal ['<meter>'], unit1.numerator
|
34
|
-
assert_equal 1.0, unit1.
|
35
|
+
assert_equal 1.0, unit1.scalar
|
35
36
|
end
|
36
37
|
|
37
38
|
def test_to_base
|
38
39
|
unit1 = Unit.new("100 cm")
|
39
|
-
assert_in_delta 1, 0.001, unit1.to_base.
|
40
|
+
assert_in_delta 1, 0.001, unit1.to_base.scalar
|
40
41
|
unit2 = Unit("1 mm^2 ms^-2")
|
41
|
-
assert_in_delta 1, 0.001, unit2.to_base.
|
42
|
+
assert_in_delta 1, 0.001, unit2.to_base.scalar
|
42
43
|
end
|
43
44
|
|
44
45
|
def test_to_unit
|
@@ -48,22 +49,22 @@ class TestRubyUnit < Test::Unit::TestCase
|
|
48
49
|
assert Unit === unit1
|
49
50
|
assert unit1 == unit2
|
50
51
|
unit1 = "2.54 cm".to_unit("in")
|
51
|
-
assert_in_delta 1, 0.001, unit1.
|
52
|
+
assert_in_delta 1, 0.001, unit1.scalar
|
52
53
|
assert_equal ['<inch>'], unit1.numerator
|
53
54
|
unit1 = "2.54 cm".unit("in")
|
54
|
-
assert_in_delta 1, 0.001, unit1.
|
55
|
+
assert_in_delta 1, 0.001, unit1.scalar
|
55
56
|
assert_equal ['<inch>'], unit1.numerator
|
56
57
|
unit1 = 1.unit
|
57
|
-
assert_in_delta 1, 0.001, unit1.
|
58
|
+
assert_in_delta 1, 0.001, unit1.scalar
|
58
59
|
assert_equal ['<1>'], unit1.numerator
|
59
60
|
unit1 = [1,'mm'].unit
|
60
|
-
assert_in_delta 1, 0.001, unit1.
|
61
|
+
assert_in_delta 1, 0.001, unit1.scalar
|
61
62
|
assert_equal ['<milli>','<meter>'], unit1.numerator
|
62
63
|
end
|
63
64
|
|
64
65
|
def test_create_unitless
|
65
|
-
unit1 = Unit
|
66
|
-
assert_equal 1,unit1.to_f
|
66
|
+
unit1 = Unit("1")
|
67
|
+
assert_equal 1, unit1.to_f
|
67
68
|
assert_equal ['<1>'],unit1.numerator
|
68
69
|
assert_equal ['<1>'],unit1.denominator
|
69
70
|
unit1 = Unit.new("1.5")
|
@@ -74,49 +75,54 @@ class TestRubyUnit < Test::Unit::TestCase
|
|
74
75
|
|
75
76
|
def test_create_simple
|
76
77
|
unit1 = Unit.new("1 m")
|
77
|
-
assert_equal 1,unit1.
|
78
|
+
assert_equal 1,unit1.scalar
|
78
79
|
assert_equal ['<meter>'], unit1.numerator
|
79
80
|
assert_equal ['<1>'],unit1.denominator
|
80
81
|
end
|
81
82
|
|
82
83
|
def test_create_compound
|
83
84
|
unit1 = Unit.new("1 N*m")
|
84
|
-
assert_equal 1,unit1.
|
85
|
+
assert_equal 1,unit1.scalar
|
85
86
|
assert_equal ['<newton>','<meter>'],unit1.numerator
|
86
87
|
assert_equal ['<1>'],unit1.denominator
|
87
88
|
end
|
88
89
|
|
89
90
|
def test_create_with_denominator
|
90
91
|
unit1 = Unit.new("1 m/s")
|
91
|
-
assert_equal 1, unit1.
|
92
|
+
assert_equal 1, unit1.scalar
|
92
93
|
assert_equal ['<meter>'],unit1.numerator
|
93
94
|
assert_equal ['<second>'],unit1.denominator
|
94
95
|
end
|
95
96
|
|
96
97
|
def test_create_with_powers
|
97
98
|
unit1 = Unit.new("1 m^2/s^2")
|
98
|
-
assert_equal 1, unit1.
|
99
|
+
assert_equal 1, unit1.scalar
|
99
100
|
assert_equal ['<meter>','<meter>'],unit1.numerator
|
100
101
|
assert_equal ['<second>','<second>'],unit1.denominator
|
102
|
+
unit1 = Unit.new("1 m^2 kg^2 J^2/s^2")
|
103
|
+
assert_equal 1, unit1.scalar
|
104
|
+
assert_equal ['<meter>','<meter>','<kilogram>','<kilogram>','<joule>','<joule>'],unit1.numerator
|
105
|
+
assert_equal ['<second>','<second>'],unit1.denominator
|
106
|
+
|
101
107
|
end
|
102
108
|
|
103
109
|
def test_create_with_zero_power
|
104
110
|
unit1 = Unit.new("1 m^0")
|
105
|
-
assert_equal 1,unit1.
|
111
|
+
assert_equal 1,unit1.scalar
|
106
112
|
assert_equal ['<1>'],unit1.numerator
|
107
113
|
assert_equal ['<1>'],unit1.denominator
|
108
114
|
end
|
109
115
|
|
110
116
|
def test_create_with_negative_powers
|
111
117
|
unit1 = Unit.new("1 m^2 s^-2")
|
112
|
-
assert_equal 1, unit1.
|
118
|
+
assert_equal 1, unit1.scalar
|
113
119
|
assert_equal ['<meter>','<meter>'],unit1.numerator
|
114
120
|
assert_equal ['<second>','<second>'],unit1.denominator
|
115
121
|
end
|
116
122
|
|
117
123
|
def test_create_from_array
|
118
124
|
unit1 = Unit.new([1, "mm^2", "ul^2"])
|
119
|
-
assert_equal 1, unit1.
|
125
|
+
assert_equal 1, unit1.scalar
|
120
126
|
assert_equal ['<milli>','<meter>','<milli>','<meter>'], unit1.numerator
|
121
127
|
assert_equal ['<micro>','<liter>','<micro>','<liter>'], unit1.denominator
|
122
128
|
end
|
@@ -134,7 +140,7 @@ class TestRubyUnit < Test::Unit::TestCase
|
|
134
140
|
unit2 = unit1 >> "in/s"
|
135
141
|
assert_equal ['<inch>'],unit2.numerator
|
136
142
|
assert_equal ['<second>'],unit2.denominator
|
137
|
-
assert_in_delta 1.0043269330917,unit2.
|
143
|
+
assert_in_delta 1.0043269330917,unit2.scalar,0.00001
|
138
144
|
}
|
139
145
|
end
|
140
146
|
|
@@ -150,6 +156,9 @@ class TestRubyUnit < Test::Unit::TestCase
|
|
150
156
|
assert_equal ['<1>'],unit3.denominator
|
151
157
|
}
|
152
158
|
assert_raises(ArgumentError) { unit3= unit1 >> 5.0}
|
159
|
+
assert_equal unit1, unit1.to(true)
|
160
|
+
assert_equal unit1, unit1.to(false)
|
161
|
+
assert_equal unit1, unit1.to(nil)
|
153
162
|
end
|
154
163
|
|
155
164
|
def test_compare
|
@@ -196,7 +205,7 @@ class TestRubyUnit < Test::Unit::TestCase
|
|
196
205
|
unit1 = Unit.new("1 mm")
|
197
206
|
unit2 = Unit.new("2 mm")
|
198
207
|
assert_nothing_raised {
|
199
|
-
assert_equal 3.0, (unit1+unit2).
|
208
|
+
assert_equal 3.0, (unit1+unit2).scalar
|
200
209
|
}
|
201
210
|
end
|
202
211
|
|
@@ -205,7 +214,7 @@ class TestRubyUnit < Test::Unit::TestCase
|
|
205
214
|
unit2 = Unit.new("1 in")
|
206
215
|
assert_nothing_raised {
|
207
216
|
unit3 = unit1 + unit2
|
208
|
-
assert_in_delta 3.54, unit3.
|
217
|
+
assert_in_delta 3.54, unit3.scalar, 0.01
|
209
218
|
}
|
210
219
|
end
|
211
220
|
|
@@ -214,14 +223,14 @@ class TestRubyUnit < Test::Unit::TestCase
|
|
214
223
|
unit2 = Unit.new("1 in")
|
215
224
|
assert_nothing_raised {
|
216
225
|
unit3 = unit1 - unit2
|
217
|
-
assert_in_delta -1.54, unit3.
|
226
|
+
assert_in_delta -1.54, unit3.scalar, 0.01
|
218
227
|
}
|
219
228
|
end
|
220
229
|
|
221
230
|
def test_add_unlike_units
|
222
231
|
unit1 = Unit.new("1 mm")
|
223
232
|
unit2 = Unit.new("2 ml")
|
224
|
-
assert_raise(ArgumentError) {(unit1+unit2).
|
233
|
+
assert_raise(ArgumentError) {(unit1+unit2).scalar}
|
225
234
|
end
|
226
235
|
|
227
236
|
def test_add_coerce
|
@@ -274,14 +283,14 @@ class TestRubyUnit < Test::Unit::TestCase
|
|
274
283
|
unit1 = Unit.new("1 mm")
|
275
284
|
unit2 = Unit.new("2 mm")
|
276
285
|
assert_nothing_raised {
|
277
|
-
assert_equal -1, (unit1-unit2).
|
286
|
+
assert_equal -1, (unit1-unit2).scalar
|
278
287
|
}
|
279
288
|
end
|
280
289
|
|
281
290
|
def test_subtract_unlike_units
|
282
291
|
unit1 = Unit.new("1 mm")
|
283
292
|
unit2 = Unit.new("2 ml")
|
284
|
-
assert_raise(ArgumentError) {(unit1-unit2).
|
293
|
+
assert_raise(ArgumentError) {(unit1-unit2).scalar}
|
285
294
|
end
|
286
295
|
|
287
296
|
def test_multiply
|
@@ -300,6 +309,9 @@ class TestRubyUnit < Test::Unit::TestCase
|
|
300
309
|
unit3 = unit1 / unit2
|
301
310
|
assert_equal Unit.new("1 M"), unit3
|
302
311
|
}
|
312
|
+
assert_raises(ZeroDivisionError) {
|
313
|
+
unit1 / 0
|
314
|
+
}
|
303
315
|
end
|
304
316
|
|
305
317
|
def test_inverse
|
@@ -327,6 +339,9 @@ class TestRubyUnit < Test::Unit::TestCase
|
|
327
339
|
assert_nothing_raised {
|
328
340
|
assert_equal unit2, unit1**-2
|
329
341
|
}
|
342
|
+
assert_raises(ZeroDivisionError) {
|
343
|
+
unit="0 mm".unit**-1
|
344
|
+
}
|
330
345
|
end
|
331
346
|
|
332
347
|
def test_exponentiate_zero
|
@@ -335,6 +350,7 @@ class TestRubyUnit < Test::Unit::TestCase
|
|
335
350
|
assert_nothing_raised {
|
336
351
|
assert_equal unit2, unit1**0
|
337
352
|
}
|
353
|
+
assert_equal 1, "0 mm".unit**0
|
338
354
|
end
|
339
355
|
|
340
356
|
def test_abs
|
@@ -392,59 +408,65 @@ class TestRubyUnit < Test::Unit::TestCase
|
|
392
408
|
|
393
409
|
def test_temperature_conversions
|
394
410
|
unit1 = Unit.new("37 degC")
|
395
|
-
unit2 = unit1 >> "
|
396
|
-
assert_in_delta 98.6, unit2.
|
397
|
-
unit2 = unit1 >> "
|
398
|
-
assert_in_delta 310.15, unit2.
|
399
|
-
unit2 = unit1 >> "
|
400
|
-
assert_in_delta 558.27, unit2.
|
411
|
+
unit2 = unit1 >> "tempF"
|
412
|
+
assert_in_delta 98.6, unit2.scalar, 0.1
|
413
|
+
unit2 = unit1 >> "tempK"
|
414
|
+
assert_in_delta 310.15, unit2.scalar, 0.01
|
415
|
+
unit2 = unit1 >> "tempR"
|
416
|
+
assert_in_delta 558.27, unit2.scalar, 0.01
|
401
417
|
unit3 = Unit.new("1 J/degC")
|
402
|
-
assert_in_delta 1, (unit3 >> "J/degK").
|
403
|
-
assert_raises(ArgumentError) {unit1 >> "degH"}
|
418
|
+
assert_in_delta 1, (unit3 >> "J/degK").scalar, 0.01
|
404
419
|
|
405
420
|
unit1 = Unit.new("98.6 degF")
|
406
|
-
unit2 = unit1 >> "
|
407
|
-
assert_in_delta 37, unit2.
|
408
|
-
unit2 = unit1 >> "
|
409
|
-
assert_in_delta 310.15, unit2.
|
410
|
-
unit2 = unit1 >> "
|
411
|
-
assert_in_delta 558.27, unit2.
|
421
|
+
unit2 = unit1 >> "tempC"
|
422
|
+
assert_in_delta 37, unit2.scalar, 0.1
|
423
|
+
unit2 = unit1 >> "tempK"
|
424
|
+
assert_in_delta 310.15, unit2.scalar, 0.01
|
425
|
+
unit2 = unit1 >> "tempR"
|
426
|
+
assert_in_delta 558.27, unit2.scalar, 0.01
|
412
427
|
unit3 = Unit.new("1 J/degC")
|
413
|
-
assert_in_delta 1, (unit3 >> "J/degK").
|
414
|
-
assert_raises(ArgumentError) {unit1 >> "degH"}
|
428
|
+
assert_in_delta 1, (unit3 >> "J/degK").scalar, 0.01
|
415
429
|
|
416
430
|
unit1 = Unit.new("310.15 degK")
|
417
|
-
unit2 = unit1 >> "
|
418
|
-
assert_in_delta 98.6, unit2.
|
419
|
-
unit2 = unit1 >> "
|
420
|
-
assert_in_delta 37, unit2.
|
421
|
-
unit2 = unit1 >> "
|
422
|
-
assert_in_delta 558.27, unit2.
|
431
|
+
unit2 = unit1 >> "tempF"
|
432
|
+
assert_in_delta 98.6, unit2.scalar, 0.1
|
433
|
+
unit2 = unit1 >> "tempC"
|
434
|
+
assert_in_delta 37, unit2.scalar, 0.01
|
435
|
+
unit2 = unit1 >> "tempR"
|
436
|
+
assert_in_delta 558.27, unit2.scalar, 0.01
|
423
437
|
unit3 = Unit.new("1 J/degC")
|
424
|
-
assert_in_delta 1, (unit3 >> "J/degK").
|
425
|
-
assert_raises(ArgumentError) {unit1 >> "degH"}
|
438
|
+
assert_in_delta 1, (unit3 >> "J/degK").scalar, 0.01
|
426
439
|
|
427
440
|
unit1 = Unit.new("558.27 degR")
|
428
|
-
unit2 = unit1 >> "
|
429
|
-
assert_in_delta 37, unit2.
|
430
|
-
unit2 = unit1 >> "
|
431
|
-
assert_in_delta 310.15, unit2.
|
432
|
-
unit2 = unit1 >> "
|
433
|
-
assert_in_delta 98.6, unit2.
|
441
|
+
unit2 = unit1 >> "tempC"
|
442
|
+
assert_in_delta 37, unit2.scalar, 0.1
|
443
|
+
unit2 = unit1 >> "tempK"
|
444
|
+
assert_in_delta 310.15, unit2.scalar, 0.01
|
445
|
+
unit2 = unit1 >> "tempF"
|
446
|
+
assert_in_delta 98.6, unit2.scalar, 0.01
|
447
|
+
assert_in_delta 558.27, unit1.to("tempR").scalar, 0.01
|
434
448
|
unit3 = Unit.new("1 J/degC")
|
435
|
-
assert_in_delta 1, (unit3 >> "J/degK").
|
436
|
-
assert_raises(ArgumentError) {
|
437
|
-
|
449
|
+
assert_in_delta 1, (unit3 >> "J/degK").scalar, 0.01
|
450
|
+
assert_raises(ArgumentError) {"10 degH".unit >> "tempF"}
|
451
|
+
|
452
|
+
# round trip conversions
|
453
|
+
unit1 = Unit "37 degC"
|
454
|
+
unit2 = unit1 >> "degF" >> 'degK' >> 'degR' >> 'degC'
|
455
|
+
assert_equal unit2, unit1
|
456
|
+
|
457
|
+
unit1 = Unit "37 degC"
|
458
|
+
unit2 = unit1 >> "tempF" >> 'tempK' >> 'tempR' >> 'tempC'
|
459
|
+
assert_equal unit2, unit1
|
438
460
|
end
|
439
461
|
|
440
462
|
def test_feet
|
441
463
|
unit1 = Unit.new("6'6\"")
|
442
|
-
assert_in_delta 6.5, unit1.
|
464
|
+
assert_in_delta 6.5, unit1.scalar, 0.01
|
443
465
|
end
|
444
466
|
|
445
467
|
def test_pounds
|
446
468
|
unit1 = Unit.new("8 pounds, 8 ounces")
|
447
|
-
assert_in_delta 8.5, unit1.
|
469
|
+
assert_in_delta 8.5, unit1.scalar, 0.01
|
448
470
|
end
|
449
471
|
|
450
472
|
# these units are 'ambiguous' and could be mis-parsed
|
@@ -457,6 +479,10 @@ class TestRubyUnit < Test::Unit::TestCase
|
|
457
479
|
assert_equal ['<minute>'], unit3.numerator
|
458
480
|
unit4 = Unit.new('1 ft') # could be a 'femto-ton' instead of a foot
|
459
481
|
assert_equal ['<foot>'], unit4.numerator
|
482
|
+
unit5 = "1 atm".unit
|
483
|
+
assert_equal ['<atm>'], unit5.numerator
|
484
|
+
unit6 = "1 doz".unit
|
485
|
+
assert_equal ['<dozen>'], unit6.numerator
|
460
486
|
end
|
461
487
|
|
462
488
|
def test_to_s
|
@@ -503,4 +529,67 @@ class TestRubyUnit < Test::Unit::TestCase
|
|
503
529
|
assert_equal "1 inworm", a.to_s
|
504
530
|
end
|
505
531
|
|
532
|
+
def test_ideal_gas_law
|
533
|
+
p = Unit "100 kPa"
|
534
|
+
v = Unit "1 m^3"
|
535
|
+
n = Unit "1 mole"
|
536
|
+
r = Unit "8.31451 J/mol*degK"
|
537
|
+
t = ((p*v)/(n*r)).to("tempF")
|
538
|
+
assert_in_delta 21189.2,t.scalar, 0.1
|
539
|
+
end
|
540
|
+
|
541
|
+
|
542
|
+
def test_eliminate_terms
|
543
|
+
a = ['<meter>','<meter>','<kelvin>','<second>']
|
544
|
+
b = ['<meter>','<meter>','<second>']
|
545
|
+
h = Unit.eliminate_terms(1,a,b)
|
546
|
+
assert_equal ['<kelvin>'], h[:numerator]
|
547
|
+
end
|
548
|
+
|
549
|
+
def test_to_base_consistency
|
550
|
+
a = "1 W*m/J*s".unit
|
551
|
+
assert_equal a.signature, a.to_base.signature
|
552
|
+
end
|
553
|
+
|
554
|
+
def test_unit_roots
|
555
|
+
unit1 = Unit "2 m*J*kg"
|
556
|
+
unit2 = Unit "4 m^2*J^2*kg^2"
|
557
|
+
unit3 = Unit "8 m^3*J^3*kg^3"
|
558
|
+
assert_equal unit2**(1/2), unit1
|
559
|
+
assert_equal unit3**(1/3), unit1
|
560
|
+
end
|
561
|
+
|
562
|
+
def test_inspect
|
563
|
+
unit1 = Unit "1 mm"
|
564
|
+
assert_equal "1 mm", unit1.inspect
|
565
|
+
assert_not_equal "1 mm", unit1.inspect(:dump)
|
566
|
+
end
|
567
|
+
|
568
|
+
def test_to_f
|
569
|
+
assert_equal 1, 1.unit.to_f
|
570
|
+
assert_raises(RuntimeError) {
|
571
|
+
assert_equal 1, "1 mm".unit.to_f
|
572
|
+
}
|
573
|
+
end
|
574
|
+
|
575
|
+
def test_exponentiate_float2
|
576
|
+
assert_equal "2 m".unit, "4 m^2".unit**(0.5)
|
577
|
+
assert_raises(ArgumentError) { "1 mm".unit**(2/3)}
|
578
|
+
assert_raises(ArgumentError) { "1 mm".unit**("A")}
|
579
|
+
|
580
|
+
end
|
581
|
+
|
582
|
+
def test_range
|
583
|
+
a = Unit "1 mm"
|
584
|
+
b = Unit "3 mm"
|
585
|
+
c = (a..b).to_a
|
586
|
+
assert_equal ["1 mm".unit, "2 mm".unit, "3 mm".unit], c
|
587
|
+
end
|
588
|
+
|
589
|
+
def test_scientific
|
590
|
+
a = Unit "1e6 cells"
|
591
|
+
assert_equal 1e6, a.scalar
|
592
|
+
assert_equal "cells", a.units
|
593
|
+
end
|
594
|
+
|
506
595
|
end
|
metadata
CHANGED
@@ -3,12 +3,12 @@ rubygems_version: 0.9.0
|
|
3
3
|
specification_version: 1
|
4
4
|
name: ruby-units
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.
|
7
|
-
date: 2006-
|
6
|
+
version: 0.2.0
|
7
|
+
date: 2006-09-18 00:00:00 -04:00
|
8
8
|
summary: A model that performs unit conversions and unit math
|
9
9
|
require_paths:
|
10
10
|
- lib
|
11
|
-
email: kevin.olbrich+
|
11
|
+
email: kevin.olbrich+ruby-units@gmail.com
|
12
12
|
homepage: http://rubyforge.com/projects/ruby-units/
|
13
13
|
rubyforge_project: ruby-units
|
14
14
|
description:
|
@@ -32,6 +32,7 @@ files:
|
|
32
32
|
- LICENSE
|
33
33
|
- README
|
34
34
|
- CHANGELOG
|
35
|
+
- lib/ruby_units.rb
|
35
36
|
- lib/ruby-units.rb
|
36
37
|
- lib/units.rb
|
37
38
|
- test/test_ruby-units.rb
|