diff --git a/complex.c b/complex.c index d625ced7fa..ae40fa7355 100644 --- a/complex.c +++ b/complex.c @@ -1121,7 +1121,10 @@ nucomp_real_p(VALUE self) static VALUE nucomp_cmp(VALUE self, VALUE other) { - if (nucomp_real_p(self) && k_numeric_p(other)) { + if (!k_numeric_p(other)) { + return rb_num_coerce_cmp(self, other, idCmp); + } + if (nucomp_real_p(self)) { if (RB_TYPE_P(other, T_COMPLEX) && nucomp_real_p(other)) { get_dat2(self, other); return rb_funcall(adat->real, idCmp, 1, bdat->real); diff --git a/test/ruby/test_complex.rb b/test/ruby/test_complex.rb index a3a7546575..f85bf101e0 100644 --- a/test/ruby/test_complex.rb +++ b/test/ruby/test_complex.rb @@ -579,7 +579,7 @@ class Complex_Test < Test::Unit::TestCase def test_coerce2 x = ObjectX.new - %w(+ - * / quo **).each do |op| + %w(+ - * / quo ** <=>).each do |op| assert_kind_of(Numeric, Complex(1).__send__(op, x)) end end