summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKenta Murata <mrkn@mrkn.jp>2020-12-19 11:55:46 +0900
committerKenta Murata <mrkn@mrkn.jp>2020-12-19 22:13:58 +0900
commit654f6fbf19c0ca2e01765a909b4d952b7f0f5baa (patch)
tree4596101121252a268228a757e62ace9ffb861fa8
parentff9e40811c67b1090966b655f7adc0684fc58abe (diff)
[bigdecimal] Make BigDecimal#precs deprecated
https://github.com/ruby/bigdecimal/commit/7e80e6e145 https://github.com/ruby/bigdecimal/commit/0ed7846e8c
-rw-r--r--ext/bigdecimal/bigdecimal.c13
-rw-r--r--ext/bigdecimal/bigdecimal.h4
-rw-r--r--ext/bigdecimal/extconf.rb2
-rw-r--r--test/bigdecimal/test_bigdecimal.rb22
4 files changed, 31 insertions, 10 deletions
diff --git a/ext/bigdecimal/bigdecimal.c b/ext/bigdecimal/bigdecimal.c
index ef975a01e0..fa00395583 100644
--- a/ext/bigdecimal/bigdecimal.c
+++ b/ext/bigdecimal/bigdecimal.c
@@ -355,11 +355,12 @@ BigDecimal_double_fig(VALUE self)
/* call-seq:
* big_decimal.precs -> array
*
- * Returns an Array of two Integer values.
+ * Returns an Array of two Integer values that represent platform-dependent
+ * internal storage properties.
*
- * The first value is the current number of significant digits in the
- * BigDecimal. The second value is the maximum number of significant digits
- * for the BigDecimal.
+ * This method is deprecated and will be removed in the future.
+ * Instead, use BigDecimal#precision for obtaining the number of decimal
+ * digits.
*
* BigDecimal('5').precs #=> [9, 18]
*/
@@ -371,6 +372,10 @@ BigDecimal_prec(VALUE self)
Real *p;
VALUE obj;
+ rb_category_warn(RB_WARN_CATEGORY_DEPRECATED,
+ "BigDecimal#precs is deprecated and will be removed in the future; "
+ "use BigDecimal#precision instead.");
+
GUARD_OBJ(p, GetVpValue(self, 1));
obj = rb_assoc_new(SIZET2NUM(p->Prec*VpBaseFig()),
SIZET2NUM(p->MaxPrec*VpBaseFig()));
diff --git a/ext/bigdecimal/bigdecimal.h b/ext/bigdecimal/bigdecimal.h
index e3eae06e67..28f3363b3c 100644
--- a/ext/bigdecimal/bigdecimal.h
+++ b/ext/bigdecimal/bigdecimal.h
@@ -159,6 +159,10 @@ rb_sym2str(VALUE sym)
# define vabs llabs
#endif
+#if !defined(HAVE_RB_CATEGORY_WARN) || !defined(HAVE_CONST_RB_WARN_CATEGORY_DEPRECATED)
+# define rb_category_warn(category, ...) rb_warn(__VA_ARGS__)
+#endif
+
extern VALUE rb_cBigDecimal;
#if 0 || SIZEOF_BDIGITS >= 16
diff --git a/ext/bigdecimal/extconf.rb b/ext/bigdecimal/extconf.rb
index fc448ed380..63123e2892 100644
--- a/ext/bigdecimal/extconf.rb
+++ b/ext/bigdecimal/extconf.rb
@@ -42,6 +42,8 @@ have_func("rb_complex_imag", "ruby.h")
have_func("rb_array_const_ptr", "ruby.h")
have_func("rb_sym2str", "ruby.h")
have_func("rb_opts_exception_p", "ruby.h")
+have_func("rb_category_warn", "ruby.h")
+have_const("RB_WARN_CATEGORY_DEPRECATED", "ruby.h")
if File.file?(File.expand_path('../lib/bigdecimal.rb', __FILE__))
bigdecimal_rb = "$(srcdir)/lib/bigdecimal.rb"
diff --git a/test/bigdecimal/test_bigdecimal.rb b/test/bigdecimal/test_bigdecimal.rb
index 59726adabb..3003e44a6e 100644
--- a/test/bigdecimal/test_bigdecimal.rb
+++ b/test/bigdecimal/test_bigdecimal.rb
@@ -610,12 +610,22 @@ class TestBigDecimal < Test::Unit::TestCase
assert_operator(BigDecimal((2**100).to_s), :==, d)
end
+ def test_precs_deprecated
+ assert_warn(/BigDecimal#precs is deprecated and will be removed in the future/) do
+ BigDecimal("1").precs
+ end
+ end
+
def test_precs
- a = BigDecimal("1").precs
- assert_instance_of(Array, a)
- assert_equal(2, a.size)
- assert_kind_of(Integer, a[0])
- assert_kind_of(Integer, a[1])
+ assert_separately(["-rbigdecimal"], "#{<<~"begin;"}\n#{<<~'end;'}")
+ begin;
+ $VERBOSE = nil
+ a = BigDecimal("1").precs
+ assert_instance_of(Array, a)
+ assert_equal(2, a.size)
+ assert_kind_of(Integer, a[0])
+ assert_kind_of(Integer, a[1])
+ end;
end
def test_hash
@@ -764,7 +774,7 @@ class TestBigDecimal < Test::Unit::TestCase
assert_equal(BigDecimal("0.1"), a, '[ruby-core:34318]')
a, b = BigDecimal("0.11111").coerce(1.quo(3))
- assert_equal(BigDecimal("0." + "3"*a.precs[0]), a)
+ assert_equal(BigDecimal("0." + "3"*a.precision), a)
assert_nothing_raised(TypeError, '#7176') do
BigDecimal('1') + Rational(1)