Bug #2661
closedBignum <= BigDecimal("NaN") raises an Exception
Description
=begin
遠藤です。
Bignum と BigDecimal("NaN") を <= などで比較すると例外があがります。
$ ./ruby -rbigdecimal -ve 'p 2**100 <= BigDecimal("NaN")'
ruby 1.9.2dev (2010-01-27 trunk 26434) [i686-linux]
-e:1:in <=': comparison of Bignum with BigDecimal failed (ArgumentError) from -e:1:in
'
ざっと確認した限りで、1.8.6-p388 、1.8.7-p249 、1.9.1-p378 、trunk のいずれ
でも発生します。
Comparable#<= が動き、その中で coerce と <=> が呼ばれますが、NaN との <=> は
nil が返るため、Comparable#<= が音を上げます。
Fixnum#<= の場合は、coerce を呼んだ後、coerce の結果に対して <= を呼ぶので
例外にはなりません。
Fixnum と同様に Bignum#<=, <, >= > を実装しないと対処できないような気が
します。
例によって、rubyspec がこれで落ちています。
BigDecimal#<= properly handles NaN values ERROR
ArgumentError: comparison of Bignum with BigDecimal failed
/home/mame/work/ruby/spec/rubyspec/library/bigdecimal/lte_spec.rb:77:in <=' /home/mame/work/ruby/spec/rubyspec/library/bigdecimal/lte_spec.rb:77:in
block (4 levels) in <top (required)>'
/home/mame/work/ruby/spec/rubyspec/library/bigdecimal/lte_spec.rb:74:in each' /home/mame/work/ruby/spec/rubyspec/library/bigdecimal/lte_spec.rb:74:in
block (3 levels) in <top (required)>'
/home/mame/work/ruby/spec/rubyspec/library/bigdecimal/lte_spec.rb:4:in `<top (required)>'
--
Yusuke Endoh mame@tsg.ne.jp
=end