зеркало из https://github.com/github/ruby.git
* 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
This commit is contained in:
Родитель
ddea0c8232
Коммит
39048aca75
10
ChangeLog
10
ChangeLog
|
@ -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
|
||||
|
|
1
array.c
1
array.c
|
@ -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);
|
||||
|
|
2
range.c
2
range.c
|
@ -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;
|
||||
|
||||
|
|
|
@ -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 })
|
||||
|
|
|
@ -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 })
|
||||
|
|
Загрузка…
Ссылка в новой задаче