summaryrefslogtreecommitdiff
path: root/test/ruby/test_array.rb
diff options
context:
space:
mode:
authormame <mame@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2012-11-14 15:53:50 +0000
committermame <mame@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2012-11-14 15:53:50 +0000
commitde07850e47ac41149304c58e9ebdbed47af23a70 (patch)
treec808758d7c9e91559df78acc25f4b902d465a2dc /test/ruby/test_array.rb
parentc8b0b5362c1bf354d1b4141a11b3192d1668e1f5 (diff)
* array.c (rb_ary_bsearch): add Array#bsearch for binary search.
[ruby-core:36390] [Feature #4766] * test/ruby/test_array.rb: add a test for above. * range.c (range_bsearch): add Range#bsearch for binary search. [ruby-core:36390] [Feature #4766] * test/ruby/test_range.rb: add a test for above * NEWS: added the two new methods. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37655 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'test/ruby/test_array.rb')
-rw-r--r--test/ruby/test_array.rb27
1 files changed, 27 insertions, 0 deletions
diff --git a/test/ruby/test_array.rb b/test/ruby/test_array.rb
index 8d264d9230..6c447c2626 100644
--- a/test/ruby/test_array.rb
+++ b/test/ruby/test_array.rb
@@ -2240,4 +2240,31 @@ class TestArray < Test::Unit::TestCase
a = [1,2,3]
assert_raise(ArgumentError) { a.rotate!(1, 1) }
end
+
+ def test_bsearch_in_find_minimum_mode
+ a = [0, 4, 7, 10, 12]
+ assert_equal(4, a.bsearch {|x| x >= 4 })
+ assert_equal(7, a.bsearch {|x| x >= 6 })
+ assert_equal(0, a.bsearch {|x| x >= -1 })
+ assert_equal(nil, a.bsearch {|x| x >= 100 })
+ end
+
+ def test_bsearch_in_find_any_mode
+ a = [0, 4, 7, 10, 12]
+ assert_include([4, 7], a.bsearch {|x| 1 - x / 4 })
+ assert_equal(nil, a.bsearch {|x| 4 - x / 2 })
+ assert_equal(nil, a.bsearch {|x| 1 })
+ assert_equal(nil, a.bsearch {|x| -1 })
+
+ assert_include([4, 7], a.bsearch {|x| (1 - x / 4) * (2**100) })
+ assert_equal(nil, a.bsearch {|x| 1 * (2**100) })
+ assert_equal(nil, a.bsearch {|x| (-1) * (2**100) })
+
+ assert_include([4, 7], a.bsearch {|x| (2**100).coerce((1 - x / 4) * (2**100)).first })
+ end
+
+ def test_bsearch_undefined
+ a = [0, 4, 7, 10, 12]
+ assert_equal(nil, a.bsearch {|x| "foo" }) # undefined behavior
+ end
end