diff options
author | Jeremy Evans <code@jeremyevans.net> | 2019-06-04 21:41:02 -0700 |
---|---|---|
committer | Jeremy Evans <code@jeremyevans.net> | 2019-06-19 10:50:58 -0700 |
commit | b9ef35e4c6325864e013ab6e45df6fe00f759a47 (patch) | |
tree | 0e3814c316dd16034139a4b2802a69aca469da7c /spec | |
parent | 65944e96d39a8ae3602751f49cb337335b2c6c45 (diff) | |
download | ruby-b9ef35e4c6325864e013ab6e45df6fe00f759a47.tar.gz |
Implement Complex#<=>
Implement Complex#<=> so that it is usable as an argument when
calling <=> on objects of other classes (since #coerce will coerce
such numbers to Complex). If the complex number has a zero imaginary
part, and the other argument is a real number (or complex number with
zero imaginary part), return -1, 0, or 1. Otherwise, return nil,
indicating the objects are not comparable.
Fixes [Bug #15857]
Diffstat (limited to 'spec')
-rw-r--r-- | spec/ruby/core/complex/spaceship_spec.rb | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/spec/ruby/core/complex/spaceship_spec.rb b/spec/ruby/core/complex/spaceship_spec.rb new file mode 100644 index 0000000000..7b2849a86a --- /dev/null +++ b/spec/ruby/core/complex/spaceship_spec.rb @@ -0,0 +1,27 @@ +require_relative '../../spec_helper' + +describe "Complex#<=>" do + ruby_version_is '2.7' do + it "returns nil if either self or argument has imaginary part" do + (Complex(5, 1) <=> Complex(2)).should be_nil + (Complex(1) <=> Complex(2, 1)).should be_nil + (5 <=> Complex(2, 1)).should be_nil + end + + it "returns nil if argument is not numeric" do + (Complex(5, 1) <=> "cmp").should be_nil + (Complex(1) <=> "cmp").should be_nil + (Complex(1) <=> Object.new).should be_nil + end + + it "returns 0, 1, or -1 if self and argument do not have imaginary part" do + (Complex(5) <=> Complex(2)).should == 1 + (Complex(2) <=> Complex(3)).should == -1 + (Complex(2) <=> Complex(2)).should == 0 + + (Complex(5) <=> 2).should == 1 + (Complex(2) <=> 3).should == -1 + (Complex(2) <=> 2).should == 0 + end + end +end |