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"); } 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) }