6from pybind11_tests
import chrono
as m
9def test_chrono_system_clock():
11 date0 = datetime.datetime.today()
12 date1 = m.test_chrono1()
13 date2 = datetime.datetime.today()
19 diff_python =
abs(date2 - date0)
20 diff =
abs(date1 - date2)
27 assert diff.seconds <= diff_python.seconds
30def test_chrono_system_clock_roundtrip():
31 date1 = datetime.datetime.today()
34 date2 = m.test_chrono2(date1)
40 diff =
abs(date1 - date2)
41 assert diff == datetime.timedelta(0)
44def test_chrono_system_clock_roundtrip_date():
45 date1 = datetime.date.today()
48 datetime2 = m.test_chrono2(date1)
49 date2 = datetime2.date()
50 time2 = datetime2.time()
53 assert isinstance(datetime2, datetime.datetime)
58 diff =
abs(date1 - date2)
60 assert diff.seconds == 0
61 assert diff.microseconds == 0
67 assert time2.hour == 0
68 assert time2.minute == 0
69 assert time2.second == 0
70 assert time2.microsecond == 0
73SKIP_TZ_ENV_ON_WIN = pytest.mark.skipif(
74 "env.WIN", reason=
"TZ environment variable only supported on POSIX"
78@pytest.mark.parametrize(
81 datetime.datetime.today().time(),
82 datetime.time(0, 0, 0),
83 datetime.time(0, 0, 0, 1),
84 datetime.time(0, 28, 45, 109827),
85 datetime.time(0, 59, 59, 999999),
86 datetime.time(1, 0, 0),
87 datetime.time(5, 59, 59, 0),
88 datetime.time(5, 59, 59, 1),
91@pytest.mark.parametrize(
95 pytest.param(
"Europe/Brussels", marks=SKIP_TZ_ENV_ON_WIN),
96 pytest.param(
"Asia/Pyongyang", marks=SKIP_TZ_ENV_ON_WIN),
97 pytest.param(
"America/New_York", marks=SKIP_TZ_ENV_ON_WIN),
100def test_chrono_system_clock_roundtrip_time(time1, tz, monkeypatch):
102 monkeypatch.setenv(
"TZ", f
"/usr/share/zoneinfo/{tz}")
105 datetime2 = m.test_chrono2(time1)
106 date2 = datetime2.date()
107 time2 = datetime2.time()
110 assert isinstance(datetime2, datetime.datetime)
115 assert time1 == time2
118 assert date2.year == 1970
119 assert date2.month == 1
120 assert date2.day == 1
123def test_chrono_duration_roundtrip():
125 date1 = datetime.datetime.today()
126 date2 = datetime.datetime.today()
132 cpp_diff = m.test_chrono3(diff)
134 assert cpp_diff == diff
137 diff = datetime.timedelta(microseconds=-1)
138 cpp_diff = m.test_chrono3(diff)
140 assert cpp_diff == diff
143def test_chrono_duration_subtraction_equivalence():
144 date1 = datetime.datetime.today()
145 date2 = datetime.datetime.today()
148 cpp_diff = m.test_chrono4(date2, date1)
150 assert cpp_diff == diff
153def test_chrono_duration_subtraction_equivalence_date():
154 date1 = datetime.date.today()
155 date2 = datetime.date.today()
158 cpp_diff = m.test_chrono4(date2, date1)
160 assert cpp_diff == diff
163def test_chrono_steady_clock():
164 time1 = m.test_chrono5()
168def test_chrono_steady_clock_roundtrip():
169 time1 = datetime.timedelta(days=10, seconds=10, microseconds=100)
170 time2 = m.test_chrono6(time1)
175 assert time1 == time2
178def test_floating_point_duration():
180 time = m.test_chrono7(35.525123)
184 assert time.seconds == 35
185 assert 525122 <= time.microseconds <= 525123
187 diff = m.test_chrono_float_diff(43.789012, 1.123456)
188 assert diff.seconds == 42
189 assert 665556 <= diff.microseconds <= 665557
192def test_nano_timepoint():
193 time = datetime.datetime.now()
194 time1 = m.test_nano_timepoint(time, datetime.timedelta(seconds=60))
195 assert time1 == time + datetime.timedelta(seconds=60)
198def test_chrono_different_resolutions():
199 resolutions = m.different_resolutions()
200 time = datetime.datetime.now()
201 resolutions.timestamp_h = time
202 resolutions.timestamp_m = time
203 resolutions.timestamp_s = time
204 resolutions.timestamp_ms = time
205 resolutions.timestamp_us = time
bool isinstance(handle obj)
\rst Return true if obj is an instance of T.
std::string abs(const Vector2 &)