mirror of
https://github.com/mruby/mruby
synced 2026-06-08 16:11:16 +00:00
Merge pull request #4677 from shuujii/array-permutation-combination-without-block-should-return-self
`Array#(permutation|combination)` without block should return `self`
This commit is contained in:
@@ -815,12 +815,11 @@ class Array
|
||||
# a.permutation(0).to_a #=> [[]] # one permutation of length 0
|
||||
# a.permutation(4).to_a #=> [] # no permutations of length 4
|
||||
def permutation(n=self.size, &block)
|
||||
size = self.size
|
||||
return to_enum(:permutation, n) unless block
|
||||
return if n > size
|
||||
size = self.size
|
||||
if n == 0
|
||||
yield []
|
||||
else
|
||||
yield []
|
||||
elsif n <= size
|
||||
i = 0
|
||||
while i<size
|
||||
result = [self[i]]
|
||||
@@ -835,6 +834,7 @@ class Array
|
||||
i += 1
|
||||
end
|
||||
end
|
||||
self
|
||||
end
|
||||
|
||||
##
|
||||
@@ -861,9 +861,8 @@ class Array
|
||||
# a.combination(5).to_a #=> [] # no combinations of length 5
|
||||
|
||||
def combination(n, &block)
|
||||
size = self.size
|
||||
return to_enum(:combination, n) unless block
|
||||
return if n > size
|
||||
size = self.size
|
||||
if n == 0
|
||||
yield []
|
||||
elsif n == 1
|
||||
@@ -872,7 +871,7 @@ class Array
|
||||
yield [self[i]]
|
||||
i += 1
|
||||
end
|
||||
else
|
||||
elsif n <= size
|
||||
i = 0
|
||||
while i<size
|
||||
result = [self[i]]
|
||||
@@ -882,6 +881,7 @@ class Array
|
||||
i += 1
|
||||
end
|
||||
end
|
||||
self
|
||||
end
|
||||
|
||||
##
|
||||
|
||||
@@ -3,8 +3,11 @@
|
||||
|
||||
def assert_permutation_combination(exp, receiver, meth, *args)
|
||||
act = []
|
||||
receiver.__send__(meth, *args) { |v| act << v }
|
||||
assert_equal(exp, act.sort)
|
||||
ret = receiver.__send__(meth, *args) { |v| act << v }
|
||||
assert "assert_#{meth}" do
|
||||
assert_equal(exp, act.sort)
|
||||
assert_same(receiver, ret)
|
||||
end
|
||||
end
|
||||
|
||||
def assert_permutation(exp, receiver, *args)
|
||||
|
||||
Reference in New Issue
Block a user