remove Array#sample from core_ext

This commit is contained in:
Vasiliy Ermolovich 2011-12-21 17:31:40 +03:00
parent 618cb44291
commit c52ce1dae2
3 changed files with 0 additions and 59 deletions

View File

@ -4,5 +4,4 @@ require 'active_support/core_ext/array/uniq_by'
require 'active_support/core_ext/array/conversions'
require 'active_support/core_ext/array/extract_options'
require 'active_support/core_ext/array/grouping'
require 'active_support/core_ext/array/random_access'
require 'active_support/core_ext/array/prepend_and_append'

View File

@ -1,30 +0,0 @@
class Array
# Backport of Array#sample based on Marc-Andre Lafortune's https://github.com/marcandre/backports/
# Returns a random element or +n+ random elements from the array.
# If the array is empty and +n+ is nil, returns <tt>nil</tt>.
# If +n+ is passed and its value is less than 0, it raises an +ArgumentError+ exception.
# If the value of +n+ is equal or greater than 0 it returns <tt>[]</tt>.
#
# [1,2,3,4,5,6].sample # => 4
# [1,2,3,4,5,6].sample(3) # => [2, 4, 5]
# [1,2,3,4,5,6].sample(-3) # => ArgumentError: negative array size
# [].sample # => nil
# [].sample(3) # => []
def sample(n=nil)
return self[Kernel.rand(size)] if n.nil?
n = n.to_int
rescue Exception => e
raise TypeError, "Coercion error: #{n.inspect}.to_int => Integer failed:\n(#{e.message})"
else
raise TypeError, "Coercion error: obj.to_int did NOT return an Integer (was #{n.class})" unless n.kind_of? Integer
raise ArgumentError, "negative array size" if n < 0
n = size if n > size
result = Array.new(self)
n.times do |i|
r = i + Kernel.rand(size - i)
result[i], result[r] = result[r], result[i]
end
result[n..size] = []
result
end unless method_defined? :sample
end

View File

@ -363,34 +363,6 @@ class ArrayUniqByTests < Test::Unit::TestCase
end
end
class ArrayExtRandomTests < ActiveSupport::TestCase
def test_sample_from_array
assert_nil [].sample
assert_equal [], [].sample(5)
assert_equal 42, [42].sample
assert_equal [42], [42].sample(5)
a = [:foo, :bar, 42]
s = a.sample(2)
assert_equal 2, s.size
assert_equal 1, (a-s).size
assert_equal [], a-(0..20).sum{a.sample(2)}
o = Object.new
def o.to_int; 1; end
assert_equal [0], [0].sample(o)
o = Object.new
assert_raises(TypeError) { [0].sample(o) }
o = Object.new
def o.to_int; ''; end
assert_raises(TypeError) { [0].sample(o) }
assert_raises(ArgumentError) { [0].sample(-7) }
end
end
class ArrayWrapperTests < Test::Unit::TestCase
class FakeCollection
def to_ary