Test integerness: Difference between revisions

Content added Content deleted
(→‎{{header|Haskell}}: Added Haskell solution)
(→‎{{header|Ruby}}: Added testcases conform suggested improvements.)
Line 1,306: Line 1,306:


=={{header|Ruby}}==
=={{header|Ruby}}==

{{improve|Ruby|This method appears to support arbitrarily large floats, as well as special float values like NaN and infinity, but doesn't demonstrate it. Some test-cases should probably be added. (See the recommended test-cases in the task description.)}}


Testing for integerness of floats, rationals and complex numbers:
Testing for integerness of floats, rationals and complex numbers:
Line 1,314: Line 1,312:
def integer?
def integer?
self == self.to_i rescue false
self == self.to_i rescue false
end
end
end
end

# Demo
# Demo
ar = [2.0, 2.5, # 2 floats
ar = [25.000000, 24.999999, 25.000100, -2.1e120, -5e-2,
2.to_r, 2.5.to_r, # 2 rationals
Float::NAN, Float::INFINITY,
2.to_c, 2+0.5i] # 2 complex numbers
2r, 2.5r, # rationals
2+0i, 2 + 0.0i, 5-5i]

ar.each{|num| puts "#{num} integer? #{num.integer?}" }
ar.each{|num| puts "#{num} integer? #{num.integer?}" }
</lang>
</lang>
{{out}}
{{out}}
<pre>
<pre>
2.0 integer? true
25.0 integer? true
2.5 integer? false
24.999999 integer? false
25.0001 integer? false
-2.1e+120 integer? true
-0.05 integer? false
NaN integer? false
Infinity integer? false
2/1 integer? true
2/1 integer? true
5/2 integer? false
5/2 integer? false
2+0i integer? true
2+0i integer? true
2+0.5i integer? false
2+0.0i integer? false
5-5i integer? false
</pre>
</pre>

Ruby considers 2+0.0i to be inexact and raises an exception when the to_i method attempts to convert it to an integer. 2+0i is exact and converts to integer.


=={{header|Tcl}}==
=={{header|Tcl}}==