Sha256: 461ae0453ed4f20d4df01aa7d2781d6ffbcff17f9c473946a3b923200f6e9f95

Contents?: true

Size: 1.69 KB

Versions: 83

Compression:

Stored size: 1.69 KB

Contents

require File.dirname(File.join(__rhoGetCurrentDir(), __FILE__)) + '/../../spec_helper'
require File.dirname(File.join(__rhoGetCurrentDir(), __FILE__)) + '/fixtures/classes'

describe "Enumerable#sort" do
  it "sorts by the natural order as defined by <=> " do
    EnumerableSpecs::Numerous.new.sort.should == [1, 2, 3, 4, 5, 6]
    sorted = EnumerableSpecs::ComparesByVowelCount.wrap("a" * 1, "a" * 2, "a"*3, "a"*4, "a"*5)
    EnumerableSpecs::Numerous.new(sorted[2],sorted[0],sorted[1],sorted[3],sorted[4]).sort.should == sorted
  end

  it "yields elements to the provided block" do
    EnumerableSpecs::Numerous.new.sort { |a, b| b <=> a }.should == [6, 5, 4, 3, 2, 1]
    EnumerableSpecs::Numerous.new(2,0,1,3,4).sort { |n, m| -(n <=> m) }.should == [4,3,2,1,0]
  end

  it "sort should throw a NoMethodError if elements do not define <=>" do
    lambda {
      EnumerableSpecs::Numerous.new(Object.new, Object.new, Object.new).sort
    }.should raise_error(NoMethodError)
  end

  it "sorts enumerables that contain nils" do
    arr = EnumerableSpecs::Numerous.new(nil, true, nil, false, nil, true, nil, false, nil)
    arr.sort { |a, b|
      x = a ? -1 : a.nil? ? 0 : 1
      y = b ? -1 : b.nil? ? 0 : 1
      x <=> y
    }.should == [true, true, nil, nil, nil, nil, nil, false, false]
  end
  
  it "compare values returned by block with 0" do
    EnumerableSpecs::Numerous.new.sort { |n, m| -(n+m) * (n <=> m) }.should == [6, 5, 4, 3, 2, 1]
    EnumerableSpecs::Numerous.new.sort { |n, m|
      EnumerableSpecs::ComparableWithFixnum.new(-(n+m) * (n <=> m))
    }.should == [6, 5, 4, 3, 2, 1]
    lambda {
      EnumerableSpecs::Numerous.new.sort { |n, m| (n <=> m).to_s }
    }.should raise_error(ArgumentError)
  end
  
end

Version data entries

83 entries across 83 versions & 1 rubygems

Version Path
rhodes-3.1.1 spec/framework_spec/app/spec/core/enumerable/sort_spec.rb
rhodes-3.1.1.beta spec/framework_spec/app/spec/core/enumerable/sort_spec.rb
rhodes-3.1.0 spec/framework_spec/app/spec/core/enumerable/sort_spec.rb
rhodes-3.1.0.beta.5 spec/framework_spec/app/spec/core/enumerable/sort_spec.rb
rhodes-3.1.0.beta.4 spec/framework_spec/app/spec/core/enumerable/sort_spec.rb
rhodes-3.1.0.beta.3 spec/framework_spec/app/spec/core/enumerable/sort_spec.rb
rhodes-3.1.0.beta.2 spec/framework_spec/app/spec/core/enumerable/sort_spec.rb
rhodes-3.1.0.beta.1 spec/framework_spec/app/spec/core/enumerable/sort_spec.rb
rhodes-3.0.2 spec/framework_spec/app/spec/core/enumerable/sort_spec.rb
rhodes-3.0.2.beta.1 spec/framework_spec/app/spec/core/enumerable/sort_spec.rb
rhodes-3.0.1 spec/framework_spec/app/spec/core/enumerable/sort_spec.rb
rhodes-3.0.1.beta.8 spec/framework_spec/app/spec/core/enumerable/sort_spec.rb
rhodes-3.0.1.beta.7 spec/framework_spec/app/spec/core/enumerable/sort_spec.rb
rhodes-3.0.1.beta.6 spec/framework_spec/app/spec/core/enumerable/sort_spec.rb
rhodes-3.0.1.beta.5 spec/framework_spec/app/spec/core/enumerable/sort_spec.rb
rhodes-3.0.1.beta.4 spec/framework_spec/app/spec/core/enumerable/sort_spec.rb
rhodes-3.0.1.beta.3 spec/framework_spec/app/spec/core/enumerable/sort_spec.rb
rhodes-3.0.1.beta.2 spec/framework_spec/app/spec/core/enumerable/sort_spec.rb
rhodes-3.0.0 spec/framework_spec/app/spec/core/enumerable/sort_spec.rb
rhodes-3.0.0.beta.7 spec/framework_spec/app/spec/core/enumerable/sort_spec.rb