diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2016-11-24 21:48:14 +0900 |
|---|---|---|
| committer | GitHub <[email protected]> | 2016-11-24 21:48:14 +0900 |
| commit | 86027890677259a411ceed30242cd0aea00afd64 (patch) | |
| tree | b378461009bfef8433af95f78ac8fc5e6ce4e0b3 | |
| parent | e289ba3effd728d4f9da73cd14db5a4538fa38d0 (diff) | |
| parent | 72ed7eebc30eaccf4175eaa7f62235bcb7a8901d (diff) | |
| download | mruby-86027890677259a411ceed30242cd0aea00afd64.tar.gz mruby-86027890677259a411ceed30242cd0aea00afd64.zip | |
Merge pull request #3277 from dabroz/feature-float-tolerance
Fixed float tolerance in tests when MRB_USE_FLOAT is set
| -rw-r--r-- | include/mruby.h | 7 | ||||
| -rw-r--r-- | mrbgems/mruby-range-ext/src/range.c | 2 | ||||
| -rw-r--r-- | mrbgems/mruby-test/driver.c | 6 | ||||
| -rw-r--r-- | test/assert.rb | 2 |
4 files changed, 15 insertions, 2 deletions
diff --git a/include/mruby.h b/include/mruby.h index d40dce6d9..bc6800e29 100644 --- a/include/mruby.h +++ b/include/mruby.h @@ -64,6 +64,13 @@ #endif #include "mrbconf.h" + +#ifdef MRB_USE_FLOAT +#define MRB_FLOAT_EPSILON FLT_EPSILON +#else +#define MRB_FLOAT_EPSILON DBL_EPSILON +#endif + #include "mruby/common.h" #include <mruby/value.h> #include <mruby/gc.h> diff --git a/mrbgems/mruby-range-ext/src/range.c b/mrbgems/mruby-range-ext/src/range.c index 32222a594..ccb5a9e45 100644 --- a/mrbgems/mruby-range-ext/src/range.c +++ b/mrbgems/mruby-range-ext/src/range.c @@ -140,7 +140,7 @@ mrb_range_size(mrb_state *mrb, mrb_value range) } if (num_p) { mrb_float n = end_f - beg_f; - mrb_float err = (fabs(beg_f) + fabs(end_f) + fabs(end_f-beg_f)) * DBL_EPSILON; + mrb_float err = (fabs(beg_f) + fabs(end_f) + fabs(end_f-beg_f)) * MRB_FLOAT_EPSILON; if (err>0.5) err=0.5; if (excl) { diff --git a/mrbgems/mruby-test/driver.c b/mrbgems/mruby-test/driver.c index 7cc5211f0..14e93ff33 100644 --- a/mrbgems/mruby-test/driver.c +++ b/mrbgems/mruby-test/driver.c @@ -94,6 +94,12 @@ mrb_init_test_driver(mrb_state *mrb, mrb_bool verbose) 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)); +#ifdef MRB_USE_FLOAT + mrb_define_const(mrb, mrbtest, "FLOAT_TOLERANCE", mrb_float_value(mrb, 1e-6)); +#else + mrb_define_const(mrb, mrbtest, "FLOAT_TOLERANCE", mrb_float_value(mrb, 1e-12)); +#endif + if (verbose) { mrb_gv_set(mrb, mrb_intern_lit(mrb, "$mrbtest_verbose"), mrb_true_value()); } diff --git a/test/assert.rb b/test/assert.rb index f565652b1..5617e1e38 100644 --- a/test/assert.rb +++ b/test/assert.rb @@ -232,7 +232,7 @@ end ## # Performs fuzzy check for equality on methods returning floats def check_float(a, b) - tolerance = 1e-12 + tolerance = Mrbtest::FLOAT_TOLERANCE a = a.to_f b = b.to_f if a.finite? and b.finite? |
