mirror of
https://github.com/mruby/mruby
synced 2026-06-08 16:11:16 +00:00
Add Array#sample test
And simplify tests for `Array#shuffle` and `Array#shuffle!`.
This commit is contained in:
@@ -39,28 +39,20 @@ assert("return class of Kernel.rand") do
|
||||
end
|
||||
|
||||
assert("Array#shuffle") do
|
||||
ary = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
|
||||
orig = ary.dup
|
||||
orig = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
|
||||
ary = orig.dup
|
||||
shuffled = ary.shuffle
|
||||
assert_equal(orig, ary)
|
||||
assert_not_equal(ary, shuffled)
|
||||
assert_equal(ary.size, shuffled.size)
|
||||
shuffled.each do |x|
|
||||
assert_include(ary, x)
|
||||
ary.delete(x)
|
||||
end
|
||||
assert_equal(orig, shuffled.sort)
|
||||
end
|
||||
|
||||
assert('Array#shuffle!') do
|
||||
ary = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
|
||||
orig = ary.dup
|
||||
orig = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
|
||||
ary = orig.dup
|
||||
assert_same(ary, ary.shuffle!)
|
||||
assert_not_equal(orig, ary)
|
||||
assert_equal(orig.size, ary.size)
|
||||
ary.each do |x|
|
||||
assert_include(orig, x)
|
||||
orig.delete(x)
|
||||
end
|
||||
assert_equal(orig, ary.sort)
|
||||
end
|
||||
|
||||
assert("Array#shuffle(random)") do
|
||||
@@ -94,3 +86,37 @@ assert('Array#shuffle!(random)') do
|
||||
assert_equal(ary1, ary2)
|
||||
assert_not_equal(ary1, ary3)
|
||||
end
|
||||
|
||||
assert('Array#sample') do
|
||||
100.times do
|
||||
assert_include([0, 1, 2], [2, 1, 0].sample)
|
||||
[2, 1, 0].sample(2).each { |sample| assert_include([0, 1, 2], sample) }
|
||||
h = {}
|
||||
(1..10).to_a.sample(7).each do |sample|
|
||||
assert_not_include(h, sample)
|
||||
h[sample] = true
|
||||
end
|
||||
end
|
||||
|
||||
assert_nil([].sample)
|
||||
assert_equal([], [].sample(1))
|
||||
assert_equal([], [2, 1].sample(0))
|
||||
assert_raise(TypeError) { [2, 1].sample(true) }
|
||||
assert_raise(ArgumentError) { [2, 1].sample(-1) }
|
||||
end
|
||||
|
||||
assert('Array#sample(random)') do
|
||||
assert_raise(TypeError) do
|
||||
# this will cause an exception due to the wrong argument
|
||||
[1, 2].sample(2, "Not a Random instance")
|
||||
end
|
||||
|
||||
# verify that the same seed causes the same results
|
||||
ary = (1..10).to_a
|
||||
srand(15)
|
||||
samples1 = ary.sample(4)
|
||||
samples2 = ary.sample(4, Random.new(15))
|
||||
samples3 = ary.sample(4, Random.new(16))
|
||||
assert_equal(samples1, samples2)
|
||||
assert_not_equal(samples1, samples3)
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user