Skip to content

Commit

Permalink
[bigdecimal] Make BigDecimal#precs deprecated
Browse files Browse the repository at this point in the history
  • Loading branch information
mrkn committed Dec 19, 2020
1 parent ff9e408 commit 654f6fb
Show file tree
Hide file tree
Showing 4 changed files with 31 additions and 10 deletions.
13 changes: 9 additions & 4 deletions ext/bigdecimal/bigdecimal.c
Original file line number Diff line number Diff line change
Expand Up @@ -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]
*/
Expand All @@ -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()));
Expand Down
4 changes: 4 additions & 0 deletions ext/bigdecimal/bigdecimal.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 2 additions & 0 deletions ext/bigdecimal/extconf.rb
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,8 @@ def check_bigdecimal_version(gemspec_path)
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"
Expand Down
22 changes: 16 additions & 6 deletions test/bigdecimal/test_bigdecimal.rb
Original file line number Diff line number Diff line change
Expand Up @@ -610,12 +610,22 @@ def test_cmp_data
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
Expand Down Expand Up @@ -764,7 +774,7 @@ def test_coerce
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)
Expand Down

0 comments on commit 654f6fb

Please sign in to comment.