ruby-changes:17365
From: yugui <ko1@a...>
Date: Wed, 29 Sep 2010 21:25:39 +0900 (JST)
Subject: [ruby-changes:17365] Ruby:r29370 (ruby_1_9_2): merges r29044 from trunk into ruby_1_9_2.
yugui 2010-09-29 21:25:24 +0900 (Wed, 29 Sep 2010) New Revision: 29370 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=29370 Log: merges r29044 from trunk into ruby_1_9_2. -- * array.c (rb_ary_permutation, rb_ary_repeated_permutation, rb_ary_repeated_combination, rb_ary_product): use ary_make_shared_copy instead of ary_make_substitution. [ruby-dev:42067] [Bug #3708] * test/ruby/test_array.rb (test_product, test_repeated_permutation, test_repeated_combination): append assertions against [Bug #3708]. Modified files: branches/ruby_1_9_2/ChangeLog branches/ruby_1_9_2/array.c branches/ruby_1_9_2/test/ruby/test_array.rb branches/ruby_1_9_2/version.h Index: ruby_1_9_2/array.c =================================================================== --- ruby_1_9_2/array.c (revision 29369) +++ ruby_1_9_2/array.c (revision 29370) @@ -4004,7 +4004,7 @@ long *p = (long*)RSTRING_PTR(t0); volatile VALUE t1 = tmpbuf(n,sizeof(char)); char *used = (char*)RSTRING_PTR(t1); - VALUE ary0 = ary_make_substitution(ary); /* private defensive copy of ary */ + VALUE ary0 = ary_make_shared_copy(ary); /* private defensive copy of ary */ RBASIC(ary0)->klass = 0; MEMZERO(used, char, n); /* initialize array */ @@ -4174,7 +4174,7 @@ else { /* this is the general case */ volatile VALUE t0 = tmpbuf(r, sizeof(long)); long *p = (long*)RSTRING_PTR(t0); - VALUE ary0 = ary_make_substitution(ary); /* private defensive copy of ary */ + VALUE ary0 = ary_make_shared_copy(ary); /* private defensive copy of ary */ RBASIC(ary0)->klass = 0; rpermute0(n, r, p, 0, ary0); /* compute and yield repeated permutations */ @@ -4260,7 +4260,7 @@ else { volatile VALUE t0 = tmpbuf(n, sizeof(long)); long *p = (long*)RSTRING_PTR(t0); - VALUE ary0 = ary_make_substitution(ary); /* private defensive copy of ary */ + VALUE ary0 = ary_make_shared_copy(ary); /* private defensive copy of ary */ RBASIC(ary0)->klass = 0; rcombinate0(len, n, p, 0, n, ary0); /* compute and yield repeated combinations */ @@ -4319,7 +4319,7 @@ /* Make defensive copies of arrays; exit if any is empty */ for (i = 0; i < n; i++) { if (RARRAY_LEN(arrays[i]) == 0) goto done; - arrays[i] = ary_make_substitution(arrays[i]); + arrays[i] = ary_make_shared_copy(arrays[i]); } } else { Index: ruby_1_9_2/ChangeLog =================================================================== --- ruby_1_9_2/ChangeLog (revision 29369) +++ ruby_1_9_2/ChangeLog (revision 29370) @@ -1,3 +1,13 @@ +Thu Aug 19 12:04:39 2010 Kenta Murata <mrkn@m...> + + * array.c (rb_ary_permutation, rb_ary_repeated_permutation, + rb_ary_repeated_combination, rb_ary_product): + use ary_make_shared_copy instead of ary_make_substitution. + [ruby-dev:42067] [Bug #3708] + + * test/ruby/test_array.rb (test_product, test_repeated_permutation, + test_repeated_combination): append assertions against [Bug #3708]. + Thu Aug 19 11:11:24 2010 NARUSE, Yui <naruse@r...> * enum.c (enum_inject): fix typo of rdoc. Index: ruby_1_9_2/version.h =================================================================== --- ruby_1_9_2/version.h (revision 29369) +++ ruby_1_9_2/version.h (revision 29370) @@ -1,6 +1,6 @@ #define RUBY_VERSION "1.9.2" #define RUBY_RELEASE_DATE "2010-09-29" -#define RUBY_PATCHLEVEL 3 +#define RUBY_PATCHLEVEL 4 #define RUBY_VERSION_MAJOR 1 #define RUBY_VERSION_MINOR 9 Index: ruby_1_9_2/test/ruby/test_array.rb =================================================================== --- ruby_1_9_2/test/ruby/test_array.rb (revision 29369) +++ ruby_1_9_2/test/ruby/test_array.rb (revision 29370) @@ -1528,6 +1528,10 @@ acc = [1,2].product(*[o]*10) assert_equal([1,2].product([3,4], [3,4], [3,4], [3,4], [3,4], [3,4], [3,4], [3,4], [3,4], [3,4]), acc) + + a = [] + [1, 2].product([0, 1, 2, 3, 4][1, 4]) {|x| a << x } + assert(a.all?{|x| !x.include?(0) }) end def test_permutation @@ -1571,6 +1575,9 @@ a.repeated_permutation(4) {|x| b << x; a.replace(@cls[9, 8, 7, 6]) } assert_equal(@cls[9, 8, 7, 6], a) assert_equal(@cls[1, 2, 3, 4].repeated_permutation(4).to_a, b) + + a = @cls[0, 1, 2, 3, 4][1, 4].repeated_permutation(2) + assert(a.all?{|x| !x.include?(0) }) end def test_repeated_combination @@ -1597,6 +1604,9 @@ a.repeated_combination(4) {|x| b << x; a.replace(@cls[9, 8, 7, 6]) } assert_equal(@cls[9, 8, 7, 6], a) assert_equal(@cls[1, 2, 3, 4].repeated_combination(4).to_a, b) + + a = @cls[0, 1, 2, 3, 4][1, 4].repeated_combination(2) + assert(a.all?{|x| !x.include?(0) }) end def test_take -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/