Feature #6973 ยป integral.patch
numeric.c | ||
---|---|---|
return Qfalse;
|
||
}
|
||
/*
|
||
* call-seq:
|
||
* num.abs -> numeric
|
||
... | ... | |
}
|
||
/*
|
||
* call-seq:
|
||
* x.integral? -> true or false
|
||
*
|
||
* Returns <code>true</code> iff <i>x</i> has an integer value.
|
||
*
|
||
* 1.integral? #=> true
|
||
* 1.0.integral? #=> true
|
||
* 1.2.integral? #=> false
|
||
*/
|
||
static VALUE
|
||
num_integral_p(VALUE x)
|
||
{
|
||
VALUE y;
|
||
if (rb_respond_to(x, rb_intern("to_i"))) {
|
||
y = num_to_int(x);
|
||
return rb_funcall(x, id_eq, 1, y);
|
||
}
|
||
else {
|
||
return Qfalse;
|
||
}
|
||
}
|
||
/********************************************************************
|
||
*
|
||
* Document-class: Float
|
||
... | ... | |
rb_define_method(rb_cNumeric, "real?", num_real_p, 0);
|
||
rb_define_method(rb_cNumeric, "integer?", num_int_p, 0);
|
||
rb_define_method(rb_cNumeric, "integral?", num_integral_p, 0);
|
||
rb_define_method(rb_cNumeric, "zero?", num_zero_p, 0);
|
||
rb_define_method(rb_cNumeric, "nonzero?", num_nonzero_p, 0);
|
||
test/ruby/test_integer.rb | ||
---|---|---|
assert(1.integer?)
|
||
end
|
||
def test_integral_p
|
||
assert(1.integral?)
|
||
end
|
||
def test_odd_p_even_p
|
||
Fixnum.class_eval do
|
||
alias odd_bak odd?
|
test/ruby/test_numeric.rb | ||
---|---|---|
assert(!Numeric.new.integer?)
|
||
end
|
||
def test_integral_p
|
||
assert(!Numeric.new.integral?)
|
||
end
|
||
def test_abs
|
||
a = DummyNumeric.new
|
||
DummyNumeric.class_eval do
|
||
... | ... | |
assert(!(1.eql?(1.0)))
|
||
assert(!(1.eql?(2)))
|
||
end
|
||
def test_integral?
|
||
assert(1.integral?, "1 is not integral")
|
||
assert(1.0.integral?, "1.0 is not integral")
|
||
assert(!1.2.integral?, "1.2 is integral")
|
||
end
|
||
end
|