diff options
-rw-r--r-- | complex.c | 4 | ||||
-rw-r--r-- | test/ruby/test_complex.rb | 14 |
2 files changed, 16 insertions, 2 deletions
@@ -486,7 +486,7 @@ imp1(sinh) static VALUE m_cos(VALUE x) { - if (f_real_p(x)) + if (!RB_TYPE_P(x, T_COMPLEX)) return m_cos_bang(x); { get_dat1(x); @@ -501,7 +501,7 @@ m_cos(VALUE x) static VALUE m_sin(VALUE x) { - if (f_real_p(x)) + if (!RB_TYPE_P(x, T_COMPLEX)) return m_sin_bang(x); { get_dat1(x); diff --git a/test/ruby/test_complex.rb b/test/ruby/test_complex.rb index 48fb9947a3..c2ed1b0827 100644 --- a/test/ruby/test_complex.rb +++ b/test/ruby/test_complex.rb @@ -970,4 +970,18 @@ class Complex_Test < Test::Unit::TestCase assert_equal(obj, c.real) assert_equal(-1, c.imag) end + + def test_canonicalize_polar + obj = Class.new(Numeric) do + def initialize + @x = 2 + end + def real? + (@x -= 1) > 0 + end + end.new + assert_raise(TypeError) do + Complex.polar(1, obj) + end + end end |