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
 |