diff --git a/ChangeLog b/ChangeLog index a56d0ca613..c1e718a16c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Mon Oct 1 23:44:23 2007 Yukihiro Matsumoto + + * array.c (rb_ary_combination): revisit #combination behavior. + suggested by David Flanagan. + Mon Oct 1 16:17:44 2007 Tanaka Akira * bootstraptest/test_method.rb: use assert_normal_exit to test diff --git a/array.c b/array.c index 0c25de0705..4c75c6d70d 100644 --- a/array.c +++ b/array.c @@ -3028,13 +3028,11 @@ rb_ary_combination(VALUE ary, VALUE num) RETURN_ENUMERATOR(ary, 1, &num); n = NUM2LONG(num); len = RARRAY_LEN(ary); - if (n < 1 || len < n) { + if (len < n) { /* yield nothing */ } - else if (n == 0) { - for (i = 0; i < len; i++) { - rb_yield(rb_ary_new2(0)); - } + else if (n <= 0) { + rb_yield(rb_ary_new2(0)); } else if (n == 1) { for (i = 0; i < len; i++) { diff --git a/test/ruby/test_array.rb b/test/ruby/test_array.rb index 4d2b05304b..9ab3168d73 100644 --- a/test/ruby/test_array.rb +++ b/test/ruby/test_array.rb @@ -1178,7 +1178,7 @@ class TestArray < Test::Unit::TestCase end # def test_permutation -# assert_equal(@cls[], @cls[1,2,3].permutation(0).to_a) +# assert_equal(@cls[[]], @cls[1,2,3].permutation(0).to_a) # assert_equal(@cls[[1],[2],[3]], @cls[1,2,3].permutation(1).to_a) # assert_equal(@cls[[1,2],[1,3],[2,1],[2,3],[3,1],[3,2]], @cls[1,2,3].permutation(2).to_a) # assert_equal(@cls[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]], @cls[1,2,3].permutation(3).to_a) @@ -1186,7 +1186,7 @@ class TestArray < Test::Unit::TestCase # end def test_combination - assert_equal(@cls[], @cls[1,2,3,4].combination(0).to_a) + assert_equal(@cls[[]], @cls[1,2,3,4].combination(0).to_a) assert_equal(@cls[[1],[2],[3],[4]], @cls[1,2,3,4].combination(1).to_a) assert_equal(@cls[[1,2],[1,3],[1,4],[2,3],[2,4],[3,4]], @cls[1,2,3,4].combination(2).to_a) assert_equal(@cls[[1,2,3],[1,2,4],[1,3,4],[2,3,4]], @cls[1,2,3,4].combination(3).to_a)