blob: 0253550d9719075f26c19c98cac6bf326aa7cf80 [file] [log] [blame]
Trent Houliston352149e2016-08-25 23:08:04 +10001
2
3def test_chrono_system_clock():
4 from pybind11_tests import test_chrono1
5 import datetime
6
7 # Get the time from both c++ and datetime
8 date1 = test_chrono1()
9 date2 = datetime.datetime.today()
10
11 # The returned value should be a datetime
12 assert isinstance(date1, datetime.datetime)
13
14 # The numbers should vary by a very small amount (time it took to execute)
15 diff = abs(date1 - date2)
16
17 # There should never be a days/seconds difference
18 assert diff.days == 0
19 assert diff.seconds == 0
20
Trent Houliston8fe2fa72016-08-25 23:25:48 +100021 # 50 milliseconds is a very long time to execute this
22 assert diff.microseconds < 50000
Trent Houliston352149e2016-08-25 23:08:04 +100023
24
25def test_chrono_system_clock_roundtrip():
26 from pybind11_tests import test_chrono2
27 import datetime
28
29 date1 = datetime.datetime.today()
30
31 # Roundtrip the time
32 date2 = test_chrono2(date1)
33
34 # The returned value should be a datetime
35 assert isinstance(date2, datetime.datetime)
36
37 # They should be identical (no information lost on roundtrip)
38 diff = abs(date1 - date2)
39 assert diff.days == 0
40 assert diff.seconds == 0
41 assert diff.microseconds == 0
42
43
44def test_chrono_duration_roundtrip():
45 from pybind11_tests import test_chrono3
46 import datetime
47
48 # Get the difference betwen two times (a timedelta)
49 date1 = datetime.datetime.today()
50 date2 = datetime.datetime.today()
51 diff = date2 - date1
52
53 # Make sure this is a timedelta
54 assert isinstance(diff, datetime.timedelta)
55
56 cpp_diff = test_chrono3(diff)
57
58 assert cpp_diff.days == diff.days
59 assert cpp_diff.seconds == diff.seconds
60 assert cpp_diff.microseconds == diff.microseconds
61
62
63def test_chrono_duration_subtraction_equivalence():
64 from pybind11_tests import test_chrono4
65 import datetime
66
67 date1 = datetime.datetime.today()
68 date2 = datetime.datetime.today()
69
70 diff = date2 - date1
71 cpp_diff = test_chrono4(date2, date1)
72
73 assert cpp_diff.days == diff.days
74 assert cpp_diff.seconds == diff.seconds
75 assert cpp_diff.microseconds == diff.microseconds
76
77
78def test_chrono_steady_clock():
79 from pybind11_tests import test_chrono5
80 import datetime
81
82 time1 = test_chrono5()
83 time2 = test_chrono5()
84
Trent Houliston2f597682016-09-13 20:40:28 +100085 assert isinstance(time1, datetime.timedelta)
86 assert isinstance(time2, datetime.timedelta)
Trent Houliston352149e2016-08-25 23:08:04 +100087
88
89def test_chrono_steady_clock_roundtrip():
90 from pybind11_tests import test_chrono6
91 import datetime
92
Trent Houliston2f597682016-09-13 20:40:28 +100093 time1 = datetime.timedelta(days=10, seconds=10, microseconds=100)
Trent Houliston352149e2016-08-25 23:08:04 +100094 time2 = test_chrono6(time1)
95
Trent Houliston2f597682016-09-13 20:40:28 +100096 assert isinstance(time2, datetime.timedelta)
Trent Houliston352149e2016-08-25 23:08:04 +100097
98 # They should be identical (no information lost on roundtrip)
Trent Houliston2f597682016-09-13 20:40:28 +100099 assert time1.days == time2.days
100 assert time1.seconds == time2.seconds
101 assert time1.microseconds == time2.microseconds
102
103
104def test_floating_point_duration():
105 from pybind11_tests import test_chrono7
106 import datetime
107
108 # Test using 35.525123 seconds as an example floating point number in seconds
109 time = test_chrono7(35.525123)
110
111 assert isinstance(time, datetime.timedelta)
112
113 assert time.seconds == 35
114 assert time.microseconds == 525123