From a8c1ddf9b4a13bcfa8ea8e48efdb31d3d83bb624 Mon Sep 17 00:00:00 2001 From: Oskar Eichler Date: Sat, 29 Aug 2026 21:57:29 +0200 Subject: [PATCH 1/2] Honor exception false for complex conversion --- ext/bigdecimal/bigdecimal.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ext/bigdecimal/bigdecimal.c b/ext/bigdecimal/bigdecimal.c index 99bd9f06..b414ff4e 100644 --- a/ext/bigdecimal/bigdecimal.c +++ b/ext/bigdecimal/bigdecimal.c @@ -2898,7 +2898,7 @@ rb_convert_to_BigDecimal(VALUE val, size_t digs, int raise_exception) else if (RB_TYPE_P(val, T_COMPLEX)) { VALUE im = rb_complex_imag(val); if (!is_zero(im)) { - /* TODO: handle raise_exception */ + if (!raise_exception) return Qnil; rb_raise(rb_eArgError, "Unable to make a BigDecimal from non-zero imaginary number"); } From 389cd5858ad2bc15d1cc48b6d9ae5ddd499a463e Mon Sep 17 00:00:00 2001 From: tompng Date: Sat, 12 Sep 2026 15:31:13 +0900 Subject: [PATCH 2/2] Add test for BigDecimal(complex, exception: false) Co-Authored-By: Claude Fable 5.1 --- test/bigdecimal/test_bigdecimal.rb | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/test/bigdecimal/test_bigdecimal.rb b/test/bigdecimal/test_bigdecimal.rb index 4487f4a4..00992e3b 100644 --- a/test/bigdecimal/test_bigdecimal.rb +++ b/test/bigdecimal/test_bigdecimal.rb @@ -293,13 +293,12 @@ def test_BigDecimal_with_exception_keyword assert_nothing_raised(ArgumentError) { assert_equal(nil, BigDecimal(4.2, Float::DIG + 2, exception: false)) } - # TODO: support conversion from complex - # assert_raise(RangeError) { - # BigDecimal(1i, exception: true) - # } - # assert_nothing_raised(RangeError) { - # assert_equal(nil, BigDecimal(1i, exception: false)) - # } + assert_raise(ArgumentError) { + BigDecimal(1i, exception: true) + } + assert_nothing_raised(ArgumentError) { + assert_equal(nil, BigDecimal(1i, exception: false)) + } assert_raise_with_message(TypeError, "can't convert nil into BigDecimal") { BigDecimal(nil, exception: true) }