Changeset 3744
- Timestamp:
- 12/28/07 23:56:28 (5 years ago)
- Location:
- lang/ruby/hyde
- Files:
-
- 2 modified
-
lib/hyde.rb (modified) (2 diffs)
-
test/hyde_test.rb (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
lang/ruby/hyde/lib/hyde.rb
r3738 r3744 1 1 2 2 module Hyde 3 Units = { 4 # :metre => 1, 5 :m => 1, 6 :hyde => 1.56, 7 :barleycorn => 0.008467 , 8 :inch => 0.0254 , 9 :feet => 0.3048 , 10 :yard => 0.9144 , 11 :pole => 5.0292 , 12 :chain => 20.1168 , 13 :furlong => 201.168 , 14 :mile => 1609.344 , 15 :league => 4828.032 , 16 } 3 17 4 # convert unit hyde to metre 5 def hyde_to_m(hyde) 6 hyde * 1.56 18 Prefix = { 19 :Y => 1e24, 20 :Z => 1e21, 21 :E => 1e18, 22 :P => 1e15, 23 :T => 1e12, 24 :G => 1e9, 25 :M => 1e6, 26 :k => 1e3, 27 :h => 1e2, 28 :da => 1e1, 29 :d => 1e-1, 30 :c => 1e-2, 31 :m => 1e-3, 32 :u => 1e-6, 33 :n => 1e-9, 34 :p => 1e-12, 35 :f => 1e-15, 36 :a => 1e-18, 37 :z => 1e-21, 38 :y => 1e-24, 39 } 40 41 Units.each do |u, v| 42 module_eval <<-EOS 43 def metre_to_#{u}(m) 44 m / Units[:#{u}] 45 end 46 module_function :metre_to_#{u} 47 48 def #{u}_to_metre(t) 49 t * Units[:#{u}] 50 end 51 module_function :#{u}_to_metre 52 53 def hyde_to_#{u}(hyde) 54 metre_to_#{u}(hyde_to_metre(hyde)) 55 end 56 module_function :hyde_to_#{u} 57 58 def #{u}_to_hyde(t) 59 metre_to_hyde(#{u}_to_metre(t)) 60 end 61 module_function :#{u}_to_hyde 62 EOS 7 63 end 8 module_function :hyde_to_m9 10 # convert unit metre to hyde11 def m_to_hyde(m)12 m / 1.5613 end14 module_function :m_to_hyde15 64 16 65 module NumericExtension … … 30 79 31 80 def convert(a) 32 _, num, unit = */([\d.]+)([ck]?m|hyde)/.match(a)81 _, num, prefix, unit = */([\d.]+)(#{Prefix.keys.join("|")})?(#{Units.keys.join("|")})/o.match(a) 33 82 num = num.to_f 34 case unit 35 when "m" 36 "#{Hyde.m_to_hyde(num)}hyde" 37 when "cm" 38 "#{Hyde.m_to_hyde(num / 100)}hyde" 39 when "km" 40 "#{Hyde.m_to_hyde(num * 1000)}hyde" 41 when "hyde" 42 "#{Hyde.hyde_to_m(num) * 100}cm" 83 num *= Prefix[prefix.to_sym] if prefix 84 if unit == "hyde" 85 "%.1fcm" % [Hyde.hyde_to_metre(num) * 100] 86 else 87 "%.1fhyde" % [Hyde.send("#{unit}_to_hyde", num)] 43 88 end 44 89 end -
lang/ruby/hyde/test/hyde_test.rb
r3738 r3744 4 4 class HydeTest < Test::Unit::TestCase 5 5 def test_convert 6 assert_equal 1.56, Hyde.hyde_to_metre(1), "hyde must be 156cm" 6 7 assert_equal 1.56, Hyde.hyde_to_m(1), "hyde must be 156cm" 7 8 assert_equal 1, Hyde.m_to_hyde(1.56), "156cm must be hyde" 9 assert_equal 0.008467, Hyde.barleycorn_to_metre(1) 10 assert_equal 0.0254, Hyde.inch_to_metre(1) 11 assert_equal 0.3048, Hyde.feet_to_metre(1) 12 assert_equal 0.9144, Hyde.yard_to_metre(1) 13 assert_equal 5.0292, Hyde.pole_to_metre(1) 14 assert_equal 20.1168, Hyde.chain_to_metre(1) 15 assert_equal 201.168, Hyde.furlong_to_metre(1) 16 assert_equal 1609.344, Hyde.mile_to_metre(1) 17 assert_equal 4828.032, Hyde.league_to_metre(1) 8 18 end 9 19 … … 18 28 assert_equal "1.0hyde", c.convert("1.56m") 19 29 assert_equal "1.0hyde", c.convert("0.00156km") 30 assert_equal "1.0hyde", c.convert("5.11811024feet") 20 31 end 21 32 end
![(please configure the [header_logo] section in trac.ini)](/share/chrome/site/your_project_logo.png)