[前][次][番号順一覧][スレッド一覧]

ruby-changes:39945

From: akr <ko1@a...>
Date: Sun, 4 Oct 2015 23:42:01 +0900 (JST)
Subject: [ruby-changes:39945] akr:r52026 (trunk): * enum.c (nmin_filter): Fix limit value.

akr	2015-10-04 23:41:55 +0900 (Sun, 04 Oct 2015)

  New Revision: 52026

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=52026

  Log:
    * enum.c (nmin_filter): Fix limit value.
      patch by Helder Pereira.
      [Bug #11471] [ruby-core:70477]

  Modified files:
    trunk/ChangeLog
    trunk/enum.c
    trunk/test/ruby/test_enum.rb
Index: ChangeLog
===================================================================
--- ChangeLog	(revision 52025)
+++ ChangeLog	(revision 52026)
@@ -1,3 +1,9 @@ https://github.com/ruby/ruby/blob/trunk/ChangeLog#L1
+Sun Oct  4 23:39:09 2015  Tanaka Akira  <akr@f...>
+
+	* enum.c (nmin_filter): Fix limit value.
+	  patch by Helder Pereira.
+	  [Bug #11471] [ruby-core:70477]
+
 Sun Oct  4 15:11:48 2015  NARUSE, Yui  <naruse@r...>
 
 	* enc/euc_jp.c (mbc_case_fold): check given string is valid or not,
Index: enum.c
===================================================================
--- enum.c	(revision 52025)
+++ enum.c	(revision 52026)
@@ -1192,6 +1192,7 @@ nmin_filter(struct nmin_data *data) https://github.com/ruby/ruby/blob/trunk/enum.c#L1192
     long numelts;
 
     long left, right;
+    long store_index;
 
     long i, j;
 
@@ -1217,7 +1218,6 @@ nmin_filter(struct nmin_data *data) https://github.com/ruby/ruby/blob/trunk/enum.c#L1218
 
     while (1) {
 	long pivot_index = left + (right-left)/2;
-	long store_index;
 	long num_pivots = 1;
 
 	SWAP(pivot_index, right);
@@ -1261,9 +1261,9 @@ nmin_filter(struct nmin_data *data) https://github.com/ruby/ruby/blob/trunk/enum.c#L1261
 #undef GETPTR
 #undef SWAP
 
+    data->limit = RARRAY_PTR(data->buf)[store_index*eltsize];
     data->curlen = data->n;
     rb_ary_resize(data->buf, data->n * eltsize);
-    data->limit = RARRAY_PTR(data->buf)[(data->n-1)*eltsize];
 }
 
 static VALUE
@@ -1283,7 +1283,7 @@ nmin_i(VALUE i, VALUE *_data, int argc, https://github.com/ruby/ruby/blob/trunk/enum.c#L1283
         int c = data->cmpfunc(&cmpv, &data->limit, data);
         if (data->rev)
             c = -c;
-        if (c > 0)
+        if (c >= 0)
             return Qnil;
     }
 
Index: test/ruby/test_enum.rb
===================================================================
--- test/ruby/test_enum.rb	(revision 52025)
+++ test/ruby/test_enum.rb	(revision 52026)
@@ -289,6 +289,8 @@ class TestEnumerable < Test::Unit::TestC https://github.com/ruby/ruby/blob/trunk/test/ruby/test_enum.rb#L289
     assert_equal(%w[albatross dog], ary.min(2))
     assert_equal(%w[dog horse],
                  ary.min(2) {|a,b| a.length <=> b.length })
+    assert_equal([13, 14], [20, 32, 32, 21, 30, 25, 29, 13, 14].min(2))
+    assert_equal([2, 4, 6, 7], [2, 4, 8, 6, 7].min(4))
   end
 
   def test_max
@@ -303,6 +305,7 @@ class TestEnumerable < Test::Unit::TestC https://github.com/ruby/ruby/blob/trunk/test/ruby/test_enum.rb#L305
     assert_equal(%w[horse dog], ary.max(2))
     assert_equal(%w[albatross horse],
                  ary.max(2) {|a,b| a.length <=> b.length })
+    assert_equal([3, 2], [0, 0, 0, 0, 0, 0, 1, 3, 2].max(2))
   end
 
   def test_minmax
@@ -325,6 +328,7 @@ class TestEnumerable < Test::Unit::TestC https://github.com/ruby/ruby/blob/trunk/test/ruby/test_enum.rb#L328
     assert_equal("dog", a.min_by {|x| x.length })
     assert_equal(3, [2,3,1].min_by {|x| -x })
     assert_equal(%w[dog horse], a.min_by(2) {|x| x.length })
+    assert_equal([13, 14], [20, 32, 32, 21, 30, 25, 29, 13, 14].min_by(2) {|x| x})
   end
 
   def test_max_by
@@ -335,6 +339,7 @@ class TestEnumerable < Test::Unit::TestC https://github.com/ruby/ruby/blob/trunk/test/ruby/test_enum.rb#L339
     assert_equal("albatross", a.max_by {|x| x.length })
     assert_equal(1, [2,3,1].max_by {|x| -x })
     assert_equal(%w[albatross horse], a.max_by(2) {|x| x.length })
+    assert_equal([3, 2], [0, 0, 0, 0, 0, 0, 1, 3, 2].max_by(2) {|x| x})
   end
 
   def test_minmax_by

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]