Scarab  v2.9.0
Project 8 C++ Utility Library
test_chrono.py
Go to the documentation of this file.
1 from pybind11_tests import chrono as m
2 import datetime
3 
4 
6 
7  # Get the time from both c++ and datetime
8  date1 = m.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 
21  # We test that no more than about 0.5 seconds passes here
22  # This makes sure that the dates created are very close to the same
23  # but if the testing system is incredibly overloaded this should still pass
24  assert diff.microseconds < 500000
25 
26 
28  date1 = datetime.datetime.today()
29 
30  # Roundtrip the time
31  date2 = m.test_chrono2(date1)
32 
33  # The returned value should be a datetime
34  assert isinstance(date2, datetime.datetime)
35 
36  # They should be identical (no information lost on roundtrip)
37  diff = abs(date1 - date2)
38  assert diff.days == 0
39  assert diff.seconds == 0
40  assert diff.microseconds == 0
41 
42 
44  date1 = datetime.date.today()
45 
46  # Roundtrip the time
47  datetime2 = m.test_chrono2(date1)
48  date2 = datetime2.date()
49  time2 = datetime2.time()
50 
51  # The returned value should be a datetime
52  assert isinstance(datetime2, datetime.datetime)
53  assert isinstance(date2, datetime.date)
54  assert isinstance(time2, datetime.time)
55 
56  # They should be identical (no information lost on roundtrip)
57  diff = abs(date1 - date2)
58  assert diff.days == 0
59  assert diff.seconds == 0
60  assert diff.microseconds == 0
61 
62  # Year, Month & Day should be the same after the round trip
63  assert date1.year == date2.year
64  assert date1.month == date2.month
65  assert date1.day == date2.day
66 
67  # There should be no time information
68  assert time2.hour == 0
69  assert time2.minute == 0
70  assert time2.second == 0
71  assert time2.microsecond == 0
72 
73 
75  time1 = datetime.datetime.today().time()
76 
77  # Roundtrip the time
78  datetime2 = m.test_chrono2(time1)
79  date2 = datetime2.date()
80  time2 = datetime2.time()
81 
82  # The returned value should be a datetime
83  assert isinstance(datetime2, datetime.datetime)
84  assert isinstance(date2, datetime.date)
85  assert isinstance(time2, datetime.time)
86 
87  # Hour, Minute, Second & Microsecond should be the same after the round trip
88  assert time1.hour == time2.hour
89  assert time1.minute == time2.minute
90  assert time1.second == time2.second
91  assert time1.microsecond == time2.microsecond
92 
93  # There should be no date information (i.e. date = python base date)
94  assert date2.year == 1970
95  assert date2.month == 1
96  assert date2.day == 1
97 
98 
100 
101  # Get the difference between two times (a timedelta)
102  date1 = datetime.datetime.today()
103  date2 = datetime.datetime.today()
104  diff = date2 - date1
105 
106  # Make sure this is a timedelta
107  assert isinstance(diff, datetime.timedelta)
108 
109  cpp_diff = m.test_chrono3(diff)
110 
111  assert cpp_diff.days == diff.days
112  assert cpp_diff.seconds == diff.seconds
113  assert cpp_diff.microseconds == diff.microseconds
114 
115 
117 
118  date1 = datetime.datetime.today()
119  date2 = datetime.datetime.today()
120 
121  diff = date2 - date1
122  cpp_diff = m.test_chrono4(date2, date1)
123 
124  assert cpp_diff.days == diff.days
125  assert cpp_diff.seconds == diff.seconds
126  assert cpp_diff.microseconds == diff.microseconds
127 
128 
130 
131  date1 = datetime.date.today()
132  date2 = datetime.date.today()
133 
134  diff = date2 - date1
135  cpp_diff = m.test_chrono4(date2, date1)
136 
137  assert cpp_diff.days == diff.days
138  assert cpp_diff.seconds == diff.seconds
139  assert cpp_diff.microseconds == diff.microseconds
140 
141 
143  time1 = m.test_chrono5()
144  assert isinstance(time1, datetime.timedelta)
145 
146 
148  time1 = datetime.timedelta(days=10, seconds=10, microseconds=100)
149  time2 = m.test_chrono6(time1)
150 
151  assert isinstance(time2, datetime.timedelta)
152 
153  # They should be identical (no information lost on roundtrip)
154  assert time1.days == time2.days
155  assert time1.seconds == time2.seconds
156  assert time1.microseconds == time2.microseconds
157 
158 
160  # Test using a floating point number in seconds
161  time = m.test_chrono7(35.525123)
162 
163  assert isinstance(time, datetime.timedelta)
164 
165  assert time.seconds == 35
166  assert 525122 <= time.microseconds <= 525123
167 
168  diff = m.test_chrono_float_diff(43.789012, 1.123456)
169  assert diff.seconds == 42
170  assert 665556 <= diff.microseconds <= 665557
171 
172 
174  time = datetime.datetime.now()
175  time1 = m.test_nano_timepoint(time, datetime.timedelta(seconds=60))
176  assert(time1 == time + datetime.timedelta(seconds=60))
def test_chrono_system_clock_roundtrip_date()
Definition: test_chrono.py:43
def test_chrono_duration_subtraction_equivalence()
Definition: test_chrono.py:116
def test_chrono_duration_roundtrip()
Definition: test_chrono.py:99
def test_chrono_system_clock()
Definition: test_chrono.py:5
return isinstance(obj, type)
def test_chrono_steady_clock()
Definition: test_chrono.py:142
def test_nano_timepoint()
Definition: test_chrono.py:173
constexpr std::chrono::duration< Rep, Period > abs(std::chrono::duration< Rep, Period > d)
Definition: date.h:1201
def test_chrono_system_clock_roundtrip_time()
Definition: test_chrono.py:74
def test_chrono_system_clock_roundtrip()
Definition: test_chrono.py:27
def test_chrono_duration_subtraction_equivalence_date()
Definition: test_chrono.py:129
def test_chrono_steady_clock_roundtrip()
Definition: test_chrono.py:147
def test_floating_point_duration()
Definition: test_chrono.py:159