diff options
author | marcandre <marcandre@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2013-01-30 05:11:03 +0000 |
---|---|---|
committer | marcandre <marcandre@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2013-01-30 05:11:03 +0000 |
commit | 39048aca7592a4096380f45f421bad578b61efb8 (patch) | |
tree | 43d9ac2aed6a5abd87a5cf28c40257e4dca016b2 | |
parent | ddea0c823239d2eb9b699dc00adf6b0963913d27 (diff) |
* array.c (rb_ary_bsearch): Return enumerator if no block [#7725]
* range.c (range_bsearch): ditto
* test/ruby/test_array.rb: Test for above
* test/ruby/test_range.rb: ditto
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@38984 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | ChangeLog | 10 | ||||
-rw-r--r-- | array.c | 1 | ||||
-rw-r--r-- | range.c | 2 | ||||
-rw-r--r-- | test/ruby/test_array.rb | 6 | ||||
-rw-r--r-- | test/ruby/test_range.rb | 6 |
5 files changed, 25 insertions, 0 deletions
@@ -1,3 +1,13 @@ +Wed Jan 30 14:10:52 2013 Marc-Andre Lafortune <ruby-core@marc-andre.ca> + + * array.c (rb_ary_bsearch): Return enumerator if no block [#7725] + + * range.c (range_bsearch): ditto + + * test/ruby/test_array.rb: Test for above + + * test/ruby/test_range.rb: ditto + Wed Jan 30 13:53:43 2013 Marc-Andre Lafortune <ruby-core@marc-andre.ca> * lib/matrix.rb: Take conjugate for inner product @@ -2438,6 +2438,7 @@ rb_ary_bsearch(VALUE ary) int smaller = 0, satisfied = 0; VALUE v, val; + RETURN_ENUMERATOR(ary, 0, 0); while (low < high) { mid = low + ((high - low) / 2); val = rb_ary_entry(ary, mid); @@ -595,6 +595,7 @@ range_bsearch(VALUE range) #define BSEARCH(conv) \ do { \ + RETURN_ENUMERATOR(range, 0, 0); \ if (EXCL(range)) high--; \ org_high = high; \ while (low < high) { \ @@ -639,6 +640,7 @@ range_bsearch(VALUE range) VALUE low = beg; VALUE high = end; VALUE mid, org_high; + RETURN_ENUMERATOR(range, 0, 0); if (EXCL(range)) high = rb_funcall(high, '-', 1, INT2FIX(1)); org_high = high; diff --git a/test/ruby/test_array.rb b/test/ruby/test_array.rb index 6c7f920d79..ae0f76c970 100644 --- a/test/ruby/test_array.rb +++ b/test/ruby/test_array.rb @@ -2249,6 +2249,12 @@ class TestArray < Test::Unit::TestCase assert_raise(ArgumentError) { a.rotate!(1, 1) } end + def test_bsearch_with_no_block + enum = [1, 2, 42, 100, 666].bsearch + assert_nil enum.size + assert_equal 42, enum.each{|x| x >= 33 } + end + def test_bsearch_in_find_minimum_mode a = [0, 4, 7, 10, 12] assert_equal(4, a.bsearch {|x| x >= 4 }) diff --git a/test/ruby/test_range.rb b/test/ruby/test_range.rb index f8e9658728..c8867cf2ec 100644 --- a/test/ruby/test_range.rb +++ b/test/ruby/test_range.rb @@ -356,6 +356,12 @@ class TestRange < Test::Unit::TestCase assert_equal 42, (1..42).each.size end + def test_bsearch_with_no_block + enum = (42...666).bsearch + assert_nil enum.size + assert_equal 200, enum.each{|x| x >= 200 } + end + def test_bsearch_for_fixnum ary = [3, 4, 7, 9, 12] assert_equal(0, (0...ary.size).bsearch {|i| ary[i] >= 2 }) |