test_chrono.py revision 12391
112391Sjason@lowepower.comfrom pybind11_tests import chrono as m 212391Sjason@lowepower.comimport datetime 311986Sandreas.sandberg@arm.com 411986Sandreas.sandberg@arm.com 511986Sandreas.sandberg@arm.comdef test_chrono_system_clock(): 611986Sandreas.sandberg@arm.com 711986Sandreas.sandberg@arm.com # Get the time from both c++ and datetime 812391Sjason@lowepower.com date1 = m.test_chrono1() 911986Sandreas.sandberg@arm.com date2 = datetime.datetime.today() 1011986Sandreas.sandberg@arm.com 1111986Sandreas.sandberg@arm.com # The returned value should be a datetime 1211986Sandreas.sandberg@arm.com assert isinstance(date1, datetime.datetime) 1311986Sandreas.sandberg@arm.com 1411986Sandreas.sandberg@arm.com # The numbers should vary by a very small amount (time it took to execute) 1511986Sandreas.sandberg@arm.com diff = abs(date1 - date2) 1611986Sandreas.sandberg@arm.com 1711986Sandreas.sandberg@arm.com # There should never be a days/seconds difference 1811986Sandreas.sandberg@arm.com assert diff.days == 0 1911986Sandreas.sandberg@arm.com assert diff.seconds == 0 2011986Sandreas.sandberg@arm.com 2111986Sandreas.sandberg@arm.com # We test that no more than about 0.5 seconds passes here 2211986Sandreas.sandberg@arm.com # This makes sure that the dates created are very close to the same 2311986Sandreas.sandberg@arm.com # but if the testing system is incredibly overloaded this should still pass 2411986Sandreas.sandberg@arm.com assert diff.microseconds < 500000 2511986Sandreas.sandberg@arm.com 2611986Sandreas.sandberg@arm.com 2711986Sandreas.sandberg@arm.comdef test_chrono_system_clock_roundtrip(): 2811986Sandreas.sandberg@arm.com date1 = datetime.datetime.today() 2911986Sandreas.sandberg@arm.com 3011986Sandreas.sandberg@arm.com # Roundtrip the time 3112391Sjason@lowepower.com date2 = m.test_chrono2(date1) 3211986Sandreas.sandberg@arm.com 3311986Sandreas.sandberg@arm.com # The returned value should be a datetime 3411986Sandreas.sandberg@arm.com assert isinstance(date2, datetime.datetime) 3511986Sandreas.sandberg@arm.com 3611986Sandreas.sandberg@arm.com # They should be identical (no information lost on roundtrip) 3711986Sandreas.sandberg@arm.com diff = abs(date1 - date2) 3811986Sandreas.sandberg@arm.com assert diff.days == 0 3911986Sandreas.sandberg@arm.com assert diff.seconds == 0 4011986Sandreas.sandberg@arm.com assert diff.microseconds == 0 4111986Sandreas.sandberg@arm.com 4211986Sandreas.sandberg@arm.com 4311986Sandreas.sandberg@arm.comdef test_chrono_duration_roundtrip(): 4411986Sandreas.sandberg@arm.com 4511986Sandreas.sandberg@arm.com # Get the difference between two times (a timedelta) 4611986Sandreas.sandberg@arm.com date1 = datetime.datetime.today() 4711986Sandreas.sandberg@arm.com date2 = datetime.datetime.today() 4811986Sandreas.sandberg@arm.com diff = date2 - date1 4911986Sandreas.sandberg@arm.com 5011986Sandreas.sandberg@arm.com # Make sure this is a timedelta 5111986Sandreas.sandberg@arm.com assert isinstance(diff, datetime.timedelta) 5211986Sandreas.sandberg@arm.com 5312391Sjason@lowepower.com cpp_diff = m.test_chrono3(diff) 5411986Sandreas.sandberg@arm.com 5511986Sandreas.sandberg@arm.com assert cpp_diff.days == diff.days 5611986Sandreas.sandberg@arm.com assert cpp_diff.seconds == diff.seconds 5711986Sandreas.sandberg@arm.com assert cpp_diff.microseconds == diff.microseconds 5811986Sandreas.sandberg@arm.com 5911986Sandreas.sandberg@arm.com 6011986Sandreas.sandberg@arm.comdef test_chrono_duration_subtraction_equivalence(): 6111986Sandreas.sandberg@arm.com 6211986Sandreas.sandberg@arm.com date1 = datetime.datetime.today() 6311986Sandreas.sandberg@arm.com date2 = datetime.datetime.today() 6411986Sandreas.sandberg@arm.com 6511986Sandreas.sandberg@arm.com diff = date2 - date1 6612391Sjason@lowepower.com cpp_diff = m.test_chrono4(date2, date1) 6711986Sandreas.sandberg@arm.com 6811986Sandreas.sandberg@arm.com assert cpp_diff.days == diff.days 6911986Sandreas.sandberg@arm.com assert cpp_diff.seconds == diff.seconds 7011986Sandreas.sandberg@arm.com assert cpp_diff.microseconds == diff.microseconds 7111986Sandreas.sandberg@arm.com 7211986Sandreas.sandberg@arm.com 7311986Sandreas.sandberg@arm.comdef test_chrono_steady_clock(): 7412391Sjason@lowepower.com time1 = m.test_chrono5() 7511986Sandreas.sandberg@arm.com assert isinstance(time1, datetime.timedelta) 7611986Sandreas.sandberg@arm.com 7711986Sandreas.sandberg@arm.com 7811986Sandreas.sandberg@arm.comdef test_chrono_steady_clock_roundtrip(): 7911986Sandreas.sandberg@arm.com time1 = datetime.timedelta(days=10, seconds=10, microseconds=100) 8012391Sjason@lowepower.com time2 = m.test_chrono6(time1) 8111986Sandreas.sandberg@arm.com 8211986Sandreas.sandberg@arm.com assert isinstance(time2, datetime.timedelta) 8311986Sandreas.sandberg@arm.com 8411986Sandreas.sandberg@arm.com # They should be identical (no information lost on roundtrip) 8511986Sandreas.sandberg@arm.com assert time1.days == time2.days 8611986Sandreas.sandberg@arm.com assert time1.seconds == time2.seconds 8711986Sandreas.sandberg@arm.com assert time1.microseconds == time2.microseconds 8811986Sandreas.sandberg@arm.com 8911986Sandreas.sandberg@arm.com 9011986Sandreas.sandberg@arm.comdef test_floating_point_duration(): 9112391Sjason@lowepower.com # Test using a floating point number in seconds 9212391Sjason@lowepower.com time = m.test_chrono7(35.525123) 9311986Sandreas.sandberg@arm.com 9411986Sandreas.sandberg@arm.com assert isinstance(time, datetime.timedelta) 9511986Sandreas.sandberg@arm.com 9611986Sandreas.sandberg@arm.com assert time.seconds == 35 9711986Sandreas.sandberg@arm.com assert 525122 <= time.microseconds <= 525123 9812037Sandreas.sandberg@arm.com 9912391Sjason@lowepower.com diff = m.test_chrono_float_diff(43.789012, 1.123456) 10012037Sandreas.sandberg@arm.com assert diff.seconds == 42 10112037Sandreas.sandberg@arm.com assert 665556 <= diff.microseconds <= 665557 102