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/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{t ton}, 907.18474, :mass, %w{<kilogram>}],
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
- #temperature
92
- '<kelvin>' => [%w{degK kelvin Kelvin}, 1.0, :temperature, %w{<celcius>}],
93
- '<celcius>' => [%w{degC celcius Celcius}, 1.0, :temperature, %w{<celcius>}],
94
- '<farenheit>' => [%w{degF farenheit Farenheit}, 1.8, :temperature, %w{<celcius>}],
95
- '<rankine>' => [%w{degR rankine Rankine}, 1.8, :temperature, %w{<celcius>}],
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{Torr}, 133.322368,:pressure, %w{<kilogram>},%w{<meter> <second> <second>}],
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 radians}, 1.0, :angle, %w{<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 doz dozen},12.0,:prefix],
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
@@ -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 TestRubyUnit < Test::Unit::TestCase
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.quantity
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.quantity
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.quantity
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.quantity
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.quantity
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.quantity
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.quantity
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.new("1")
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.to_f
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.to_f
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.to_f
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.to_f
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.to_f
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.to_f
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.to_f
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.to_f,0.00001
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).to_f
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.to_f, 0.01
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.to_f, 0.01
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).to_f}
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).to_f
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).to_f}
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 >> "degF"
396
- assert_in_delta 98.6, unit2.to_f, 0.1
397
- unit2 = unit1 >> "degK"
398
- assert_in_delta 310.15, unit2.to_f, 0.01
399
- unit2 = unit1 >> "degR"
400
- assert_in_delta 558.27, unit2.to_f, 0.01
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").to_f, 0.01
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 >> "degC"
407
- assert_in_delta 37, unit2.to_f, 0.1
408
- unit2 = unit1 >> "degK"
409
- assert_in_delta 310.15, unit2.to_f, 0.01
410
- unit2 = unit1 >> "degR"
411
- assert_in_delta 558.27, unit2.to_f, 0.01
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").to_f, 0.01
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 >> "degF"
418
- assert_in_delta 98.6, unit2.to_f, 0.1
419
- unit2 = unit1 >> "degC"
420
- assert_in_delta 37, unit2.to_f, 0.01
421
- unit2 = unit1 >> "degR"
422
- assert_in_delta 558.27, unit2.to_f, 0.01
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").to_f, 0.01
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 >> "degC"
429
- assert_in_delta 37, unit2.to_f, 0.1
430
- unit2 = unit1 >> "degK"
431
- assert_in_delta 310.15, unit2.to_f, 0.01
432
- unit2 = unit1 >> "degF"
433
- assert_in_delta 98.6, unit2.to_f, 0.01
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").to_f, 0.01
436
- assert_raises(ArgumentError) {unit1 >> "degH"}
437
- assert_raises(ArgumentError) {"10 degH".unit >> "degH"}
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.to_f, 0.01
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.to_f, 0.01
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.1.1
7
- date: 2006-08-22 00:00:00 -04:00
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+ruby_units@gmail.com
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