forked from pandas-dev/pandas
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtest_interval_ops.py
61 lines (48 loc) · 2.31 KB
/
test_interval_ops.py
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
"""Tests for Interval-Interval operations, such as overlaps, contains, etc."""
import pytest
import pandas.util.testing as tm
from pandas import Interval, Timedelta, Timestamp
@pytest.fixture(params=[
(Timedelta('0 days'), Timedelta('1 day')),
(Timestamp('2018-01-01'), Timedelta('1 day')),
(0, 1)], ids=lambda x: type(x[0]).__name__)
def start_shift(request):
"""
Fixture for generating intervals of types from a start value and a shift
value that can be added to start to generate an endpoint
"""
return request.param
class TestOverlaps(object):
def test_overlaps_self(self, start_shift, closed):
start, shift = start_shift
interval = Interval(start, start + shift, closed)
assert interval.overlaps(interval)
def test_overlaps_nested(self, start_shift, closed, other_closed):
start, shift = start_shift
interval1 = Interval(start, start + 3 * shift, other_closed)
interval2 = Interval(start + shift, start + 2 * shift, closed)
# nested intervals should always overlap
assert interval1.overlaps(interval2)
def test_overlaps_disjoint(self, start_shift, closed, other_closed):
start, shift = start_shift
interval1 = Interval(start, start + shift, other_closed)
interval2 = Interval(start + 2 * shift, start + 3 * shift, closed)
# disjoint intervals should never overlap
assert not interval1.overlaps(interval2)
def test_overlaps_endpoint(self, start_shift, closed, other_closed):
start, shift = start_shift
interval1 = Interval(start, start + shift, other_closed)
interval2 = Interval(start + shift, start + 2 * shift, closed)
# overlap if shared endpoint is closed for both (overlap at a point)
result = interval1.overlaps(interval2)
expected = interval1.closed_right and interval2.closed_left
assert result == expected
@pytest.mark.parametrize('other', [
10, True, 'foo', Timedelta('1 day'), Timestamp('2018-01-01')],
ids=lambda x: type(x).__name__)
def test_overlaps_invalid_type(self, other):
interval = Interval(0, 1)
msg = '`other` must be an Interval, got {other}'.format(
other=type(other).__name__)
with tm.assert_raises_regex(TypeError, msg):
interval.overlaps(other)