Project

General

Profile

Actions

Bug #2661

closed

Bignum <= BigDecimal("NaN") raises an Exception

Added by mame (Yusuke Endoh) over 15 years ago. Updated over 14 years ago.

Status:
Closed
Assignee:
-
Target version:
-
ruby -v:
ruby 1.9.2dev (2010-01-27 trunk 26434) [i686-linux]
Backport:
[ruby-dev:40167]

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
=end

Actions

Also available in: Atom PDF

Like0
Like0Like0