From 223defd62ae511786a2b50c68ed97b73bfc05d59 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Fri, 17 May 2019 11:26:16 +0900 Subject: Move `Numeric#div` to the core. --- mrbgems/mruby-numeric-ext/mrblib/numeric_ext.rb | 4 ---- 1 file changed, 4 deletions(-) (limited to 'mrbgems/mruby-numeric-ext') diff --git a/mrbgems/mruby-numeric-ext/mrblib/numeric_ext.rb b/mrbgems/mruby-numeric-ext/mrblib/numeric_ext.rb index f250538fe..e86e8b283 100644 --- a/mrbgems/mruby-numeric-ext/mrblib/numeric_ext.rb +++ b/mrbgems/mruby-numeric-ext/mrblib/numeric_ext.rb @@ -1,8 +1,4 @@ module Integral - def div(other) - self.divmod(other)[0] - end - def zero? self == 0 end -- cgit v1.2.3 From c5c39f585b48ef9cede6059ae5bc16b00f160db8 Mon Sep 17 00:00:00 2001 From: KOBAYASHI Shuji Date: Fri, 17 May 2019 21:13:31 +0900 Subject: Move `Integral#(zero|nonzero|positive|negative)?` to `Numeric` Because these methods work if object is `Comparable`, and `Numeric` is `Comparable`. --- mrbgems/mruby-numeric-ext/mrblib/numeric_ext.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'mrbgems/mruby-numeric-ext') diff --git a/mrbgems/mruby-numeric-ext/mrblib/numeric_ext.rb b/mrbgems/mruby-numeric-ext/mrblib/numeric_ext.rb index e86e8b283..576605cb1 100644 --- a/mrbgems/mruby-numeric-ext/mrblib/numeric_ext.rb +++ b/mrbgems/mruby-numeric-ext/mrblib/numeric_ext.rb @@ -1,4 +1,4 @@ -module Integral +class Numeric def zero? self == 0 end -- cgit v1.2.3 From c980fe279266448cf5ac8faa646d57d0f8561b10 Mon Sep 17 00:00:00 2001 From: KOBAYASHI Shuji Date: Sun, 21 Jul 2019 22:59:41 +0900 Subject: Integrate `Integral#chr` (`Fixnum#chr`) to `mruby-string-ext` Because they're defined in both `mruby-string-ext` and `mruby-numeric-ext` (they seem more natural to define in N, but `mruby-string-ext` depends on `Integral#chr`). --- mrbgems/mruby-numeric-ext/src/numeric_ext.c | 27 --------------------------- mrbgems/mruby-numeric-ext/test/numeric.rb | 8 -------- mrbgems/mruby-string-ext/src/string.c | 8 ++++---- mrbgems/mruby-string-ext/test/fixnum.rb | 3 --- mrbgems/mruby-string-ext/test/numeric.rb | 5 +++++ 5 files changed, 9 insertions(+), 42 deletions(-) delete mode 100644 mrbgems/mruby-string-ext/test/fixnum.rb create mode 100644 mrbgems/mruby-string-ext/test/numeric.rb (limited to 'mrbgems/mruby-numeric-ext') diff --git a/mrbgems/mruby-numeric-ext/src/numeric_ext.c b/mrbgems/mruby-numeric-ext/src/numeric_ext.c index cd8bbf187..86c384a87 100644 --- a/mrbgems/mruby-numeric-ext/src/numeric_ext.c +++ b/mrbgems/mruby-numeric-ext/src/numeric_ext.c @@ -8,32 +8,6 @@ to_int(mrb_state *mrb, mrb_value x) return mrb_fixnum(x); } -/* - * Document-method: Integer#chr - * call-seq: - * int.chr -> string - * - * Returns a string containing the character represented by the +int+'s value - * according to +encoding+. - * - * 65.chr #=> "A" - * 230.chr #=> "\xE6" - */ -static mrb_value -mrb_int_chr(mrb_state *mrb, mrb_value x) -{ - mrb_int chr; - char c; - - chr = to_int(mrb, x); - if (chr >= (1 << CHAR_BIT)) { - mrb_raisef(mrb, E_RANGE_ERROR, "%S out of char range", x); - } - c = (char)chr; - - return mrb_str_new(mrb, &c, 1); -} - /* * call-seq: * int.allbits?(mask) -> true or false @@ -87,7 +61,6 @@ mrb_mruby_numeric_ext_gem_init(mrb_state* mrb) { struct RClass *i = mrb_module_get(mrb, "Integral"); - mrb_define_method(mrb, i, "chr", mrb_int_chr, MRB_ARGS_NONE()); mrb_define_method(mrb, i, "allbits?", mrb_int_allbits, MRB_ARGS_REQ(1)); mrb_define_method(mrb, i, "anybits?", mrb_int_anybits, MRB_ARGS_REQ(1)); mrb_define_method(mrb, i, "nobits?", mrb_int_nobits, MRB_ARGS_REQ(1)); diff --git a/mrbgems/mruby-numeric-ext/test/numeric.rb b/mrbgems/mruby-numeric-ext/test/numeric.rb index c85cb61f2..efdf25a34 100644 --- a/mrbgems/mruby-numeric-ext/test/numeric.rb +++ b/mrbgems/mruby-numeric-ext/test/numeric.rb @@ -1,14 +1,6 @@ ## # Numeric(Ext) Test -assert('Integer#chr') do - assert_equal("A", 65.chr) - assert_equal("B", 0x42.chr) - - # multibyte encoding (not support yet) - assert_raise(RangeError) { 256.chr } -end - assert('Integer#div') do assert_equal 52, 365.div(7) end diff --git a/mrbgems/mruby-string-ext/src/string.c b/mrbgems/mruby-string-ext/src/string.c index 50a4e5582..ab9919650 100644 --- a/mrbgems/mruby-string-ext/src/string.c +++ b/mrbgems/mruby-string-ext/src/string.c @@ -125,7 +125,7 @@ mrb_str_swapcase(mrb_state *mrb, mrb_value self) return str; } -static mrb_value mrb_fixnum_chr(mrb_state *mrb, mrb_value num); +static mrb_value mrb_int_chr(mrb_state *mrb, mrb_value num); /* * call-seq: @@ -149,7 +149,7 @@ mrb_str_concat_m(mrb_state *mrb, mrb_value self) mrb_get_args(mrb, "o", &str); if (mrb_fixnum_p(str)) - str = mrb_fixnum_chr(mrb, str); + str = mrb_int_chr(mrb, str); else str = mrb_ensure_string_type(mrb, str); mrb_str_concat(mrb, self, str); @@ -837,7 +837,7 @@ mrb_str_chr(mrb_state *mrb, mrb_value self) } static mrb_value -mrb_fixnum_chr(mrb_state *mrb, mrb_value num) +mrb_int_chr(mrb_state *mrb, mrb_value num) { mrb_int cp = mrb_fixnum(num); #ifdef MRB_UTF8_STRING @@ -1219,7 +1219,7 @@ mrb_mruby_string_ext_gem_init(mrb_state* mrb) mrb_define_method(mrb, s, "delete_suffix", mrb_str_del_suffix, MRB_ARGS_REQ(1)); mrb_define_method(mrb, s, "__lines", mrb_str_lines, MRB_ARGS_NONE()); - mrb_define_method(mrb, mrb->fixnum_class, "chr", mrb_fixnum_chr, MRB_ARGS_NONE()); + mrb_define_method(mrb, mrb_module_get(mrb, "Integral"), "chr", mrb_int_chr, MRB_ARGS_NONE()); } void diff --git a/mrbgems/mruby-string-ext/test/fixnum.rb b/mrbgems/mruby-string-ext/test/fixnum.rb deleted file mode 100644 index 9036b1a06..000000000 --- a/mrbgems/mruby-string-ext/test/fixnum.rb +++ /dev/null @@ -1,3 +0,0 @@ -assert('Fixnum#chr') do - assert_equal "a", 97.chr -end diff --git a/mrbgems/mruby-string-ext/test/numeric.rb b/mrbgems/mruby-string-ext/test/numeric.rb new file mode 100644 index 000000000..cae562fc1 --- /dev/null +++ b/mrbgems/mruby-string-ext/test/numeric.rb @@ -0,0 +1,5 @@ +assert('Integer#chr') do + assert_equal("A", 65.chr) + assert_equal("B", 0x42.chr) + assert_raise(RangeError) { -1.chr } +end -- cgit v1.2.3 From eb8634013948021f163d2f4c2ee53c394c0a143c Mon Sep 17 00:00:00 2001 From: dearblue Date: Sat, 3 Aug 2019 11:38:00 +0900 Subject: Add constants for floating point number --- include/mruby/numeric.h | 30 +++++++++++++++++++++++++++++ mrbgems/mruby-numeric-ext/src/numeric_ext.c | 14 ++++++++++++++ 2 files changed, 44 insertions(+) (limited to 'mrbgems/mruby-numeric-ext') diff --git a/include/mruby/numeric.h b/include/mruby/numeric.h index 07266aa10..39f6773d9 100644 --- a/include/mruby/numeric.h +++ b/include/mruby/numeric.h @@ -160,6 +160,36 @@ mrb_int_mul_overflow(mrb_int multiplier, mrb_int multiplicand, mrb_int *product) #endif +#ifndef MRB_WITHOUT_FLOAT +# include +# include + +# define MRB_FLT_RADIX FLT_RADIX + +# ifdef MRB_USE_FLOAT +# define MRB_FLT_MANT_DIG FLT_MANT_DIG +# define MRB_FLT_EPSILON FLT_EPSILON +# define MRB_FLT_DIG FLT_DIG +# define MRB_FLT_MIN_EXP FLT_MIN_EXP +# define MRB_FLT_MIN FLT_MIN +# define MRB_FLT_MIN_10_EXP FLT_MIN_10_EXP +# define MRB_FLT_MAX_EXP FLT_MAX_EXP +# define MRB_FLT_MAX FLT_MAX +# define MRB_FLT_MAX_10_EXP FLT_MAX_10_EXP + +# else /* not MRB_USE_FLOAT */ +# define MRB_FLT_MANT_DIG DBL_MANT_DIG +# define MRB_FLT_EPSILON DBL_EPSILON +# define MRB_FLT_DIG DBL_DIG +# define MRB_FLT_MIN_EXP DBL_MIN_EXP +# define MRB_FLT_MIN DBL_MIN +# define MRB_FLT_MIN_10_EXP DBL_MIN_10_EXP +# define MRB_FLT_MAX_EXP DBL_MAX_EXP +# define MRB_FLT_MAX DBL_MAX +# define MRB_FLT_MAX_10_EXP DBL_MAX_10_EXP +# endif /* MRB_USE_FLOAT */ +#endif /* MRB_WITHOUT_FLOAT */ + MRB_END_DECL #endif /* MRUBY_NUMERIC_H */ diff --git a/mrbgems/mruby-numeric-ext/src/numeric_ext.c b/mrbgems/mruby-numeric-ext/src/numeric_ext.c index 86c384a87..16560fe86 100644 --- a/mrbgems/mruby-numeric-ext/src/numeric_ext.c +++ b/mrbgems/mruby-numeric-ext/src/numeric_ext.c @@ -1,5 +1,6 @@ #include #include +#include static inline mrb_int to_int(mrb_state *mrb, mrb_value x) @@ -64,6 +65,19 @@ mrb_mruby_numeric_ext_gem_init(mrb_state* mrb) mrb_define_method(mrb, i, "allbits?", mrb_int_allbits, MRB_ARGS_REQ(1)); mrb_define_method(mrb, i, "anybits?", mrb_int_anybits, MRB_ARGS_REQ(1)); mrb_define_method(mrb, i, "nobits?", mrb_int_nobits, MRB_ARGS_REQ(1)); + +#ifndef MRB_WITHOUT_FLOAT + mrb_define_const(mrb, mrb->float_class, "RADIX", mrb_fixnum_value(MRB_FLT_RADIX)); + mrb_define_const(mrb, mrb->float_class, "MANT_DIG", mrb_fixnum_value(MRB_FLT_MANT_DIG)); + mrb_define_const(mrb, mrb->float_class, "EPSILON", mrb_float_value(mrb, MRB_FLT_EPSILON)); + mrb_define_const(mrb, mrb->float_class, "DIG", mrb_fixnum_value(MRB_FLT_DIG)); + mrb_define_const(mrb, mrb->float_class, "MIN_EXP", mrb_fixnum_value(MRB_FLT_MIN_EXP)); + mrb_define_const(mrb, mrb->float_class, "MIN", mrb_float_value(mrb, MRB_FLT_MIN)); + mrb_define_const(mrb, mrb->float_class, "MIN_10_EXP", mrb_fixnum_value(MRB_FLT_MIN_10_EXP)); + mrb_define_const(mrb, mrb->float_class, "MAX_EXP", mrb_fixnum_value(MRB_FLT_MAX_EXP)); + mrb_define_const(mrb, mrb->float_class, "MAX", mrb_float_value(mrb, MRB_FLT_MAX)); + mrb_define_const(mrb, mrb->float_class, "MAX_10_EXP", mrb_fixnum_value(MRB_FLT_MAX_10_EXP)); +#endif /* MRB_WITHOUT_FLOAT */ } void -- cgit v1.2.3 From d599e35aa4adcf25aeaa434c60138a33b91ed88a Mon Sep 17 00:00:00 2001 From: KOBAYASHI Shuji Date: Sun, 4 Aug 2019 22:02:39 +0900 Subject: Use `mrb_int()` instead of `to_int()` in `mruby-numeric-ext` --- mrbgems/mruby-numeric-ext/src/numeric_ext.c | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) (limited to 'mrbgems/mruby-numeric-ext') diff --git a/mrbgems/mruby-numeric-ext/src/numeric_ext.c b/mrbgems/mruby-numeric-ext/src/numeric_ext.c index 86c384a87..e54239365 100644 --- a/mrbgems/mruby-numeric-ext/src/numeric_ext.c +++ b/mrbgems/mruby-numeric-ext/src/numeric_ext.c @@ -1,13 +1,6 @@ #include #include -static inline mrb_int -to_int(mrb_state *mrb, mrb_value x) -{ - x = mrb_to_int(mrb, x); - return mrb_fixnum(x); -} - /* * call-seq: * int.allbits?(mask) -> true or false @@ -20,7 +13,7 @@ mrb_int_allbits(mrb_state *mrb, mrb_value self) mrb_int n, m; mrb_get_args(mrb, "i", &m); - n = to_int(mrb, self); + n = mrb_int(mrb, self); return mrb_bool_value((n & m) == m); } @@ -36,7 +29,7 @@ mrb_int_anybits(mrb_state *mrb, mrb_value self) mrb_int n, m; mrb_get_args(mrb, "i", &m); - n = to_int(mrb, self); + n = mrb_int(mrb, self); return mrb_bool_value((n & m) != 0); } @@ -52,7 +45,7 @@ mrb_int_nobits(mrb_state *mrb, mrb_value self) mrb_int n, m; mrb_get_args(mrb, "i", &m); - n = to_int(mrb, self); + n = mrb_int(mrb, self); return mrb_bool_value((n & m) == 0); } -- cgit v1.2.3