Skip to content

Commit 5232948

Browse files
committed
update tests for DatetimeIndex
1 parent 4490269 commit 5232948

File tree

1 file changed

+38
-0
lines changed

1 file changed

+38
-0
lines changed

pandas/tests/indexes/datetimes/test_scalar_compat.py

+38
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import pandas as pd
1212

1313
from pandas import date_range, Timestamp, DatetimeIndex
14+
from pandas.tseries.frequencies import to_offset
1415

1516

1617
class TestDatetimeIndexOps(object):
@@ -169,6 +170,43 @@ def test_ceil_floor_edge(self, test_input, rounder, freq, expected):
169170
expected = DatetimeIndex(list(expected))
170171
assert expected.equals(result)
171172

173+
@pytest.mark.parametrize('start, index_freq, periods', [
174+
('2018-01-01', '12H', 25),
175+
('2018-01-01 0:0:0.124999', '1ns', 1000),
176+
])
177+
@pytest.mark.parametrize('rounding_freq', [
178+
'2ns', '3ns', '4ns', '5ns', '6ns', '7ns',
179+
'250ns', '500ns', '750ns',
180+
'1us', '19us', '250us', '500us', '750us',
181+
'1s', '2s', '3s',
182+
'12H', '1D',
183+
])
184+
def test_round_int64(self, start, index_freq, periods, rounding_freq):
185+
dt = DatetimeIndex(start=start, freq=index_freq, periods=periods)
186+
unit = to_offset(rounding_freq).nanos
187+
# test floor
188+
result = dt.floor(rounding_freq).asi8
189+
diff = dt.asi8 - result
190+
mod = result % unit
191+
assert (mod == 0).all(), "floor not a %s multiple" % (rounding_freq, )
192+
assert (0 <= diff).all() and (diff < unit).all(), "floor error"
193+
# test ceil
194+
result = dt.ceil(rounding_freq).asi8
195+
diff = result - dt.asi8
196+
mod = result % unit
197+
assert (mod == 0).all(), "ceil not a %s multiple" % (rounding_freq, )
198+
assert (0 <= diff).all() and (diff < unit).all(), "ceil error"
199+
# test round
200+
result = dt.round(rounding_freq).asi8
201+
diff = abs(result - dt.asi8)
202+
mod = result % unit
203+
assert (mod == 0).all(), "round not a %s multiple" % (rounding_freq, )
204+
assert (diff <= unit // 2).all(), "round error"
205+
if unit % 2 == 0:
206+
assert (
207+
result[diff == unit // 2] % 2 == 0
208+
).all(), "round half to even error"
209+
172210
# ----------------------------------------------------------------
173211
# DatetimeIndex.normalize
174212

0 commit comments

Comments
 (0)