Hi,
In message "Math.sqrt(-1) doesn't raise ArgumentError"
|server> irb
|irb(main):001:0> Math.sqrt(-1)
|=> NaN
|irb(main):002:0>
|
|NaN == Not a Number
|
|Why has sqrt behavier changed, when it hasn't for divisionbyzero?
Because sqrt is a float operation.
p 3.0 / 0
=> Infinity
matz.
I want to do an assert_equal in rubicon, like this
Version.less_than("1.8.1") do
assert_raise(ArgumentError) { Math.sqrt(-1) }
end
Version.greater_or_equal("1.8.1") do
assert_equal(NaN, Math.sqrt(-1))
end
However How do I make an Float instance of NaN?
irb(main):001:0> Math.sqrt(-1)
=> NaN
irb(main):002:0> v = NaN
NameError: uninitialized constant NaN
from (irb):2
irb(main):003:0> v = Math::NaN
NameError: uninitialized constant Math::NaN
from (irb):3
irb(main):004:0> v = Math.NaN
NoMethodError: undefined method `NaN' for Math:Module
from (irb):4
irb(main):005:0> v = Math.NaN
NoMethodError: undefined method `NaN' for Math:Module
from (irb):5
irb(main):006:0> v = Math.sqrt(-1)
=> NaN
irb(main):007:0> v.class
=> Float
irb(main):008:0> x = Float::NaN
NameError: uninitialized constant Float::NaN
from (irb):8
irb(main):009:0> x = Float.NaN
NoMethodError: undefined method `NaN' for Float:Class
from (irb):9
irb(main):010:0> x = Float.new(NaN)
NameError: uninitialized constant NaN
from (irb):10
irb(main):011:0>