mirror of
https://github.com/mruby/mruby
synced 2026-06-08 16:11:16 +00:00
Merge pull request #2190 from cremno/mrbtest-mrb_int-constants
test fixnum overflow for add, sub and mul
This commit is contained in:
@@ -87,6 +87,7 @@ main(int argc, char **argv)
|
||||
{
|
||||
mrb_state *mrb;
|
||||
struct RClass *krn;
|
||||
struct RClass *mrbtest;
|
||||
int ret;
|
||||
|
||||
print_hint();
|
||||
@@ -106,6 +107,18 @@ main(int argc, char **argv)
|
||||
krn = mrb->kernel_module;
|
||||
mrb_define_method(mrb, krn, "__t_printstr__", mrb_t_printstr, MRB_ARGS_REQ(1));
|
||||
|
||||
mrbtest = mrb_define_module(mrb, "Mrbtest");
|
||||
|
||||
#ifdef MRB_WORD_BOXING
|
||||
mrb_define_const(mrb, mrbtest, "FIXNUM_MAX", mrb_fixnum_value(MRB_INT_MAX >> MRB_FIXNUM_SHIFT));
|
||||
mrb_define_const(mrb, mrbtest, "FIXNUM_MIN", mrb_fixnum_value(MRB_INT_MIN >> MRB_FIXNUM_SHIFT));
|
||||
mrb_define_const(mrb, mrbtest, "FIXNUM_BIT", mrb_fixnum_value(MRB_INT_BIT >> MRB_FIXNUM_SHIFT));
|
||||
#else
|
||||
mrb_define_const(mrb, mrbtest, "FIXNUM_MAX", mrb_fixnum_value(MRB_INT_MAX));
|
||||
mrb_define_const(mrb, mrbtest, "FIXNUM_MIN", mrb_fixnum_value(MRB_INT_MIN));
|
||||
mrb_define_const(mrb, mrbtest, "FIXNUM_BIT", mrb_fixnum_value(MRB_INT_BIT));
|
||||
#endif
|
||||
|
||||
mrb_init_mrbtest(mrb);
|
||||
ret = eval_test(mrb);
|
||||
mrb_close(mrb);
|
||||
|
||||
@@ -18,6 +18,14 @@ assert('Integer#+', '15.2.8.3.1') do
|
||||
|
||||
assert_raise(TypeError){ 0+nil }
|
||||
assert_raise(TypeError){ 1+nil }
|
||||
|
||||
c = Mrbtest::FIXNUM_MAX + 1
|
||||
d = Mrbtest::FIXNUM_MAX.__send__(:+, 1)
|
||||
e = Mrbtest::FIXNUM_MAX + 1.0
|
||||
assert_equal Float, c.class
|
||||
assert_equal Float, d.class
|
||||
assert_float e, c
|
||||
assert_float e, d
|
||||
end
|
||||
|
||||
assert('Integer#-', '15.2.8.3.2') do
|
||||
@@ -26,6 +34,14 @@ assert('Integer#-', '15.2.8.3.2') do
|
||||
|
||||
assert_equal 1, a
|
||||
assert_equal 1.0, b
|
||||
|
||||
c = Mrbtest::FIXNUM_MIN - 1
|
||||
d = Mrbtest::FIXNUM_MIN.__send__(:-, 1)
|
||||
e = Mrbtest::FIXNUM_MIN - 1.0
|
||||
assert_equal Float, c.class
|
||||
assert_equal Float, d.class
|
||||
assert_float e, c
|
||||
assert_float e, d
|
||||
end
|
||||
|
||||
assert('Integer#*', '15.2.8.3.3') do
|
||||
@@ -37,6 +53,14 @@ assert('Integer#*', '15.2.8.3.3') do
|
||||
|
||||
assert_raise(TypeError){ 0*nil }
|
||||
assert_raise(TypeError){ 1*nil }
|
||||
|
||||
c = Mrbtest::FIXNUM_MAX * 2
|
||||
d = Mrbtest::FIXNUM_MAX.__send__(:*, 2)
|
||||
e = Mrbtest::FIXNUM_MAX * 2.0
|
||||
assert_equal Float, c.class
|
||||
assert_equal Float, d.class
|
||||
assert_float e, c
|
||||
assert_float e, d
|
||||
end
|
||||
|
||||
assert('Integer#/', '15.2.8.3.4') do
|
||||
|
||||
Reference in New Issue
Block a user