blob: eee488c915f4231c65e8c35b3073dd955a5a86de (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
|
require 'range_ext'
RSpec.describe Range do
describe "#intersection" do
it "is nil (sic) for two distinct ranges" do
expect( (1..2).intersection(3..4) ).to be_nil
end
it "is the smaller of two if one is part of the other" do
expect( (1..2).intersection(0..3) ).to eq 1..2
expect( (0..2).intersection(1..2) ).to eq 1..2
end
it "is the intersection otherwise" do
expect( (1..3) & (2..4) ).to eq 2..3
expect( (2..4) & (1..3) ).to eq 2..3
end
end
describe "intersect?" do
it 'is true when the given range includes begin' do
expect( (2..4).intersect? (1..3) ).to be_truthy
end
it 'is true when the given range includes end' do
expect( (2..4).intersect? (3..5) ).to be_truthy
end
it 'is true when the given range includes both begin and end' do
expect( (2..4).intersect? (1..5) ).to be_truthy
end
it 'is true when the given range is the same' do
expect( (2..4).intersect? (2..4) ).to be_truthy
end
it 'is false when the given range is after' do
expect( (2..4).intersect? (5..7) ).to be_falsey
end
it 'is false when the given range is before' do
expect( (2..4).intersect? (0..2) ).to be_falsey
end
end
context "remove" do
it "is unchanged when the given range has no intersection" do
expect( (1..2).remove(3..4) ).to eq 1..2
expect( (3..4).remove(1..2) ).to eq 3..4
end
it "is nil for two equal ranges" do
expect( (1..2).remove(1..2) ).to be_empty
end
it "is the begin of the range when given range intersect the end" do
expect( (5..10).remove(8..15) ).to eq [5..7]
end
it "is the end of the range when given range intersect the begin" do
expect( (5..10).remove(1..6) ).to eq [7..10]
end
it "is the two remaing ranges when given range is the middle" do
expect( (1..10).remove(4..6) ).to eq [1..3, 7..10]
end
end
end
|