[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[dennou-ruby:003725] Re: numru-units on ruby 2.1



村上さま

まったく違う問題ですから,同じ土俵で議論しないでくださいませ。
(村上さん自身は混ぜるつもりはないかもしれませんが。)
豊田さんをお呼びした問題は根本的なもので,これが解決
しないと GPhys は動作しません。一方ご指摘の問題は
テストプログラムの問題です。直すべきなのはもちろんですが。

# 1.6 から 1.8 への仕様変更に対応してないとか...
   (ご想像どおり,長年このテストは存在も忘れてました。
   すみません。) 

> 豊田さま、堀之内さま、
> 
> 村上真也です。
> 
> とりあえず、ruby 1.9.3, 2.0.0 でもテストは通りません。
> 以下のようにして、ちょっとテストを書き換えると少し進みますが、
> ----ここから----
> $ diff -u numru-units-1.7/src/test.rb numru-units/src/test.rb
> --- numru-units-1.7/src/test.rb	      2004-03-01 13:45:28.000000000 +0900
> +++ numru-units/src/test.rb	      2014-04-28 00:44:06.880925724 +0900
> @@ -8,7 +8,7 @@
>  
>  puts "=== reduce1 ==="
>  
> -assert Units.new('').reduce1.to_s, ""
> +assert Units.new('').reduce1.to_s, "1"
>  assert Units.new('m').reduce1.to_s, "m"
>  assert Units.new('3').reduce1.to_s, "3"
>  assert Units.new('3.14').reduce1.to_s, "3.14"
> @@ -75,18 +75,18 @@
>  assert Units.new('km2').reduce4.to_s, "km2"
>  assert Units.new('hours.hour').reduce4.to_s, "hour2"
>  assert Units.new('(10)^2').reduce4.to_s, "100"
> -assert Units.new('100/10').reduce4.to_s, "10.0"
> -assert Units.new('(10)^2/100').reduce4.to_s, "1.0"
> +assert Units.new('100/10').reduce4.to_s, "10"
> +assert Units.new('(10)^2/100').reduce4.to_s, "1"
>  
>  puts "=== reduce5 ==="
>  
>  assert Units.new('km2').reduce5.to_s, "1000000 m2"
> -assert Units.new('(10)^2/100').reduce5.to_s, "1.0"
> +assert Units.new('(10)^2/100').reduce5.to_s, "1"
>  
>  assert Units.new('hPa').reduce5.to_s, "100 kg.m-1 s-2"
> -assert Units.new('mb').reduce5.to_s, "100.0 kg.m-1 s-2"
> +assert Units.new('mb').reduce5.to_s, "100 kg.m-1 s-2"
>  
> -assert Units.new('hPa/mb').reduce5.to_s, "1.0"
> +assert Units.new('hPa/mb').reduce5.to_s, "1"
>  
>  assert Units.new('(K @ 273.15)@ 10').reduce5.to_s, "(K @ 283.15)"
>  
> ----ここまで----
> 
> $ ruby19 /home/murashin/software/lib/ruby/site_ruby/1.9.1/numru/units.rb
> 中略
> === APPLICATIONS ===
> ok 4900
> /home/murashin/software/lib/ruby/site_ruby/1.9.1/numru/units.rb:3387:in `assert': "273.15000000000003" != "273.15" (RuntimeError)
> from /home/murashin/software/lib/ruby/site_ruby/1.9.1/numru/units.rb:3478:in `<main>'
> となってダメです。
> # 浮動小数点数を含むテストは難しいような...?(1.8.7では通る(なんで?))
> 
> From: Eizi TOYODA <toyoda.eizi@xxxxxxxxx>
> Date: Mon, 28 Apr 2014 00:20:18 +0900
> 
> > 村上さま
> > 
> > 今回はたまたま気が付きました。
> > そのうち見られれば見ます。 まあ、Ruby 2.1 となるとどこにも使える環境はありませんし、正直いつになるやら。
> > 
> > 豊田拝
> > 
> > from android phone
> > 2014/04/27 20:52 "Shin-ya Murakami" <murashin@xxxxxxxxxxxxxx>:
> > 
> >> 堀之内さま、豊田さま、
> >>
> >> 村上真也です。
> >>
> >> # 気づいてもらいやすいように豊田さんをToに入れてみました。
> >>
> >> 私も見てみましたが、よく分かりませんでした。
> >>
> >> ところで(こちらが本題)、http://ruby.gfd-dennou.org/ml/index-j.htm
> >> に2014年のエントリがありませんね。私はrubyグループに入っていなくて
> >> 編集できないので、どなたかよろしくお願い致します。
> >>
> >> From: Takeshi Horinouchi <horinout@xxxxxxxxxxxxxxxxx>
> >> Date: Thu, 10 Apr 2014 11:12:33 +0900
> >>
> >> > 堀之内です。
> >> >
> >> > どうやら Ruby 2.1 では単位ライブラリ numru-units がうまく動かない
> >> > ようです(先日の "1"  問題とは別)。Racc でうまく行ってないよう
> >> > なので,調査は難航しそうです。どなたか見当がつくと嬉しいのですが...
> >> > > 豊田さん,時間取れないですかね。
> >> >
> >> > お試し用に電脳 K の私のホームの下
> >> > (/home/horinout/tmp/ruby2.1/bin/)に ruby 2.1.1 をインストール
> >> > してありますので (nurmu-unitsはgemでいれてある),アカウントの
> >> > ある方は試していただけます。
> >> >
> >> > 以下実行例です。
> >> >
> >> > ● ruby 2.0 だと(問題なし):
> >> >
> >> > $ ruby --version
> >> > ruby 2.0.0p451 (2014-02-24 revision 45167) [i686-linux]
> >> > $ ruby -r numru/units -e "u=NumRu::Units['m/s']; u2=NumRu::Units['s'];
> >> puts u*u2"
> >> > m
> >> >
> >> > ● ruby 2.0 だと(問題あり):
> >> >
> >> > $ use_ruby 2.1
> >> > ruby 2.1.1p76 (2014-02-24 revision 45161) [i686-linux]
> >> > $ ruby -r numru/units -e "u=NumRu::Units['m/s'];
> >> > u2=NumRu::Units['s']; puts u*u2"
> >> > /opt/ruby2.1/lib/ruby/site_ruby/2.1.0/numru/units.rb:209:in
> >> `foldnumber': undefined method `foldnumber' for
> >> Error[m/s]:NumRu::Units::ErrorNode (NoMethodError)
> >> >       from /opt/ruby2.1/lib/ruby/site_ruby/2.1.0/numru/units.rb:139:in
> >> `reduce4'
> >> >       from /opt/ruby2.1/lib/ruby/site_ruby/2.1.0/numru/units.rb:2611:in
> >> `binop'
> >> >       from /opt/ruby2.1/lib/ruby/site_ruby/2.1.0/numru/units.rb:2616:in
> >> `*'
> >> >       from -e:1:in `<main>'
> >> >
> >> > このように演算がうまく行きません。これはパースがうまくいかない
> >> > からです:
> >> >
> >> > $ ruby -r numru/units -e "u=NumRu::Units['m']; p u.do_parse2,
> >> > u.do_parse2.class"
> >> > Error[m]
> >> > NumRu::Units::ErrorNode
> >> >
> >> > ここで,do_parse2 メソッドは Racc に投げた parse 処理の
> >> > 結果が nil なので ErrorNode なるものを返してます。だから
> >> > 問題はなんでちゃんと parse されないかということなんですが...。
> >> >
> >> > 堀之内 武
> >> ----
> >> Shin-ya Murakami
> >> email: murashin@xxxxxxxxxxxxxx
> >> WWW: http://www.gfd-dennou.org/member/murashin/
> ----
> Shin-ya Murakami
> email: murashin@xxxxxxxxxxxxxx
> WWW: http://www.gfd-dennou.org/member/murashin/
> 

堀之内 武
北海道大学 地球環境科学研究院 地球圏科学部門
〒060-0810 札幌市北区北10条西5丁目