|
9 | 9 | it_behaves_like :enumeratorized_with_unknown_size, :bsearch, (1..3)
|
10 | 10 |
|
11 | 11 | it "raises a TypeError if the block returns an Object" do
|
12 |
| - -> { (0..1).bsearch { Object.new } }.should raise_error(TypeError) |
| 12 | + -> { (0..1).bsearch { Object.new } }.should raise_error(TypeError, "wrong argument type Object (must be numeric, true, false or nil)") |
13 | 13 | end
|
14 | 14 |
|
15 |
| - it "raises a TypeError if the block returns a String" do |
16 |
| - -> { (0..1).bsearch { "1" } }.should raise_error(TypeError) |
| 15 | + it "raises a TypeError if the block returns a String and boundaries are Integer values" do |
| 16 | + -> { (0..1).bsearch { "1" } }.should raise_error(TypeError, "wrong argument type String (must be numeric, true, false or nil)") |
| 17 | + end |
| 18 | + |
| 19 | + it "raises a TypeError if the block returns a String and boundaries are Float values" do |
| 20 | + -> { (0.0..1.0).bsearch { "1" } }.should raise_error(TypeError, "wrong argument type String (must be numeric, true, false or nil)") |
17 | 21 | end
|
18 | 22 |
|
19 | 23 | it "raises a TypeError if the Range has Object values" do
|
20 | 24 | value = mock("range bsearch")
|
21 | 25 | r = Range.new value, value
|
22 | 26 |
|
23 |
| - -> { r.bsearch { true } }.should raise_error(TypeError) |
| 27 | + -> { r.bsearch { true } }.should raise_error(TypeError, "can't do binary search for MockObject") |
24 | 28 | end
|
25 | 29 |
|
26 | 30 | it "raises a TypeError if the Range has String values" do
|
27 |
| - -> { ("a".."e").bsearch { true } }.should raise_error(TypeError) |
| 31 | + -> { ("a".."e").bsearch { true } }.should raise_error(TypeError, "can't do binary search for String") |
| 32 | + end |
| 33 | + |
| 34 | + it "raises TypeError when non-Numeric begin/end and block not passed" do |
| 35 | + -> { ("a".."e").bsearch }.should raise_error(TypeError, "can't do binary search for String") |
28 | 36 | end
|
29 | 37 |
|
30 | 38 | context "with Integer values" do
|
|
94 | 102 | (4..2).bsearch { 0 }.should == nil
|
95 | 103 | (4..2).bsearch { -1 }.should == nil
|
96 | 104 | end
|
| 105 | + |
| 106 | + it "returns enumerator when block not passed" do |
| 107 | + (0...3).bsearch.kind_of?(Enumerator).should == true |
| 108 | + end |
97 | 109 | end
|
98 | 110 |
|
99 | 111 | context "with Float values" do
|
|
156 | 168 |
|
157 | 169 | it "returns nil if the block returns greater than zero for every element" do
|
158 | 170 | (0.3..3.0).bsearch { |x| x <=> -1 }.should be_nil
|
159 |
| - |
160 | 171 | end
|
161 | 172 |
|
162 | 173 | it "returns nil if the block never returns zero" do
|
|
213 | 224 | (0...inf).bsearch { |x| x >= Float::MAX ? 0 : 1 }.should == Float::MAX
|
214 | 225 | end
|
215 | 226 | end
|
| 227 | + |
| 228 | + it "returns enumerator when block not passed" do |
| 229 | + (0.1...2.3).bsearch.kind_of?(Enumerator).should == true |
| 230 | + end |
216 | 231 | end
|
217 | 232 |
|
218 | 233 | context "with endless ranges and Integer values" do
|
|
250 | 265 | [1, 2, 3].should include(result)
|
251 | 266 | end
|
252 | 267 | end
|
| 268 | + |
| 269 | + it "returns enumerator when block not passed" do |
| 270 | + eval("(-2..)").bsearch.kind_of?(Enumerator).should == true |
| 271 | + end |
253 | 272 | end
|
254 | 273 |
|
255 | 274 | context "with endless ranges and Float values" do
|
|
327 | 346 | eval("(0.0...)").bsearch { 0 }.should != inf
|
328 | 347 | end
|
329 | 348 | end
|
330 |
| - end |
331 | 349 |
|
| 350 | + it "returns enumerator when block not passed" do |
| 351 | + eval("(0.1..)").bsearch.kind_of?(Enumerator).should == true |
| 352 | + end |
| 353 | + end |
332 | 354 |
|
333 | 355 | context "with beginless ranges and Integer values" do
|
334 | 356 | context "with a block returning true or false" do
|
|
361 | 383 | [1, 2, 3].should include(result)
|
362 | 384 | end
|
363 | 385 | end
|
| 386 | + |
| 387 | + it "returns enumerator when block not passed" do |
| 388 | + (..10).bsearch.kind_of?(Enumerator).should == true |
| 389 | + end |
364 | 390 | end
|
365 | 391 |
|
366 | 392 | context "with beginless ranges and Float values" do
|
|
432 | 458 | (...inf).bsearch { |x| 3 - x }.should == 3
|
433 | 459 | end
|
434 | 460 | end
|
| 461 | + |
| 462 | + it "returns enumerator when block not passed" do |
| 463 | + (..-0.1).bsearch.kind_of?(Enumerator).should == true |
| 464 | + end |
435 | 465 | end
|
436 | 466 | end
|
0 commit comments