|
1 | 1 | from __future__ import division
|
2 | 2 |
|
3 |
| -from pandas import Interval, Timestamp |
| 3 | +import numpy as np |
| 4 | +from pandas import Interval, Timestamp, Timedelta |
4 | 5 | from pandas.core.common import _any_none
|
5 | 6 |
|
6 | 7 | import pytest
|
@@ -66,6 +67,48 @@ def test_hash(self, interval):
|
66 | 67 | # should not raise
|
67 | 68 | hash(interval)
|
68 | 69 |
|
| 70 | + @pytest.mark.parametrize('left, right, expected', [ |
| 71 | + (0, 5, 5), |
| 72 | + (-2, 5.5, 7.5), |
| 73 | + (10, 10, 0), |
| 74 | + (10, np.inf, np.inf), |
| 75 | + (-np.inf, -5, np.inf), |
| 76 | + (-np.inf, np.inf, np.inf), |
| 77 | + (Timedelta('0 days'), Timedelta('5 days'), Timedelta('5 days')), |
| 78 | + (Timedelta('10 days'), Timedelta('10 days'), Timedelta('0 days')), |
| 79 | + (Timedelta('1H10M'), Timedelta('5H5M'), Timedelta('3H55M')), |
| 80 | + (Timedelta('5S'), Timedelta('1H'), Timedelta('59M55S'))]) |
| 81 | + def test_length(self, left, right, expected): |
| 82 | + # GH 18789 |
| 83 | + iv = Interval(left, right) |
| 84 | + result = iv.length |
| 85 | + assert result == expected |
| 86 | + |
| 87 | + @pytest.mark.parametrize('left, right, expected', [ |
| 88 | + ('2017-01-01', '2017-01-06', '5 days'), |
| 89 | + ('2017-01-01', '2017-01-01 12:00:00', '12 hours'), |
| 90 | + ('2017-01-01 12:00', '2017-01-01 12:00:00', '0 days'), |
| 91 | + ('2017-01-01 12:01', '2017-01-05 17:31:00', '4 days 5 hours 30 min')]) |
| 92 | + @pytest.mark.parametrize('tz', (None, 'UTC', 'CET', 'US/Eastern')) |
| 93 | + def test_length_timestamp(self, tz, left, right, expected): |
| 94 | + # GH 18789 |
| 95 | + iv = Interval(Timestamp(left, tz=tz), Timestamp(right, tz=tz)) |
| 96 | + result = iv.length |
| 97 | + expected = Timedelta(expected) |
| 98 | + assert result == expected |
| 99 | + |
| 100 | + @pytest.mark.parametrize('left, right', [ |
| 101 | + ('a', 'z'), |
| 102 | + (('a', 'b'), ('c', 'd')), |
| 103 | + (list('AB'), list('ab')), |
| 104 | + (Interval(0, 1), Interval(1, 2))]) |
| 105 | + def test_length_errors(self, left, right): |
| 106 | + # GH 18789 |
| 107 | + iv = Interval(left, right) |
| 108 | + msg = 'cannot compute length between .* and .*' |
| 109 | + with tm.assert_raises_regex(TypeError, msg): |
| 110 | + iv.length |
| 111 | + |
69 | 112 | def test_math_add(self, interval):
|
70 | 113 | expected = Interval(1, 2)
|
71 | 114 | actual = interval + 1
|
|
0 commit comments