Changeset 3744

Show
Ignore:
Timestamp:
12/28/07 23:56:28 (5 years ago)
Author:
cho45
Message:

lang/ruby/hyde/test/hyde_test.rb,
lang/ruby/hyde/lib/hyde.rb:

Add units.

Location:
lang/ruby/hyde
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • lang/ruby/hyde/lib/hyde.rb

    r3738 r3744  
    11 
    22module 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        } 
    317 
    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 
    763        end 
    8         module_function :hyde_to_m 
    9  
    10         # convert unit metre to hyde 
    11         def m_to_hyde(m) 
    12                 m / 1.56 
    13         end 
    14         module_function :m_to_hyde 
    1564 
    1665        module NumericExtension 
     
    3079 
    3180                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) 
    3382                        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)] 
    4388                        end 
    4489                end 
  • lang/ruby/hyde/test/hyde_test.rb

    r3738 r3744  
    44class HydeTest < Test::Unit::TestCase 
    55        def test_convert 
     6                assert_equal 1.56, Hyde.hyde_to_metre(1),    "hyde must be 156cm" 
    67                assert_equal 1.56, Hyde.hyde_to_m(1),    "hyde must be 156cm" 
    78                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) 
    818        end 
    919 
     
    1828                assert_equal "1.0hyde", c.convert("1.56m") 
    1929                assert_equal "1.0hyde", c.convert("0.00156km") 
     30                assert_equal "1.0hyde", c.convert("5.11811024feet") 
    2031        end 
    2132end