Sha256: 05428ead2787c36e0cdee8bab81484dde29f89020689f02e14d8403b39a0400e

Contents?: true

Size: 1.84 KB

Versions: 83

Compression:

Stored size: 1.84 KB

Contents

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

describe "Array#sample" do
  ruby_version_is "" ... "1.9" do
    it "is not defined" do
      lambda { [].sample }.should raise_error(NoMethodError)
    end
  end

  ruby_version_is "1.9" do
    it "selects a random value from the array" do
      a = [1, 2, 3, 4]
      10.times {
        a.include?(a.sample).should be_true
      }
    end

    it "returns nil for empty arrays" do
      [].sample.should be_nil
    end

    describe "passed a number n as an argument" do
      it "raises ArgumentError for a negative n" do
        lambda { [1, 2].sample(-1) }.should raise_error(ArgumentError)
      end

      it "returns different random values from the array" do
        a = [1, 2, 3, 4]
        sum = []
        42.times {
          pair = a.sample(2)
          sum.concat(pair)
          (pair - a).should == []
          pair[0].should_not == pair[1]
        }
        a.should == [1, 2, 3, 4]
        (a - sum).should == []  # Might fail once every 2^40 times ...
      end

      it "tries to convert n to an Integer using #to_int" do
        a = [1, 2, 3, 4]
        a.sample(2.3).size.should == 2

        obj = mock('to_int')
        obj.should_receive(:to_int).and_return(2)
        a.sample(obj).size.should == 2
      end

      it "returns all values with n big enough" do
        a = [1, 2, 3, 4]
        a.sample(4).sort.should == a
        a.sample(5).sort.should == a
      end

      it "returns [] for empty arrays or if n <= 0" do
        [].sample(1).should == []
        [1, 2, 3].sample(0).should == []
      end

      it "does not return subclass instances with Array subclass" do
        ArraySpecs::MyArray[1, 2, 3].sample(2).class.should == Array
      end
    end
  end
end

Version data entries

83 entries across 83 versions & 1 rubygems

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