diff options
Diffstat (limited to 'mrbgems/mruby-array-ext')
| -rw-r--r-- | mrbgems/mruby-array-ext/mrblib/array.rb | 14 | ||||
| -rw-r--r-- | mrbgems/mruby-array-ext/test/array.rb | 9 |
2 files changed, 14 insertions, 9 deletions
diff --git a/mrbgems/mruby-array-ext/mrblib/array.rb b/mrbgems/mruby-array-ext/mrblib/array.rb index 1cd1eb643..fc5d87f2c 100644 --- a/mrbgems/mruby-array-ext/mrblib/array.rb +++ b/mrbgems/mruby-array-ext/mrblib/array.rb @@ -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 0 < n && 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 ## diff --git a/mrbgems/mruby-array-ext/test/array.rb b/mrbgems/mruby-array-ext/test/array.rb index 4fad42518..a4e328b71 100644 --- a/mrbgems/mruby-array-ext/test/array.rb +++ b/mrbgems/mruby-array-ext/test/array.rb @@ -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) @@ -389,6 +392,7 @@ assert("Array#permutation") do assert_permutation([[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]], a, 3) assert_permutation([[]], a, 0) assert_permutation([], a, 4) + assert_permutation([], a, -1) end assert("Array#combination") do @@ -399,6 +403,7 @@ assert("Array#combination") do assert_combination([[1,2,3,4]], a, 4) assert_combination([[]], a, 0) assert_combination([], a, 5) + assert_combination([], a, -1) end assert('Array#transpose') do |
