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 4314299Sbbruce@ucdavis.edudef test_chrono_system_clock_roundtrip_date(): 4414299Sbbruce@ucdavis.edu date1 = datetime.date.today() 4514299Sbbruce@ucdavis.edu 4614299Sbbruce@ucdavis.edu # Roundtrip the time 4714299Sbbruce@ucdavis.edu datetime2 = m.test_chrono2(date1) 4814299Sbbruce@ucdavis.edu date2 = datetime2.date() 4914299Sbbruce@ucdavis.edu time2 = datetime2.time() 5014299Sbbruce@ucdavis.edu 5114299Sbbruce@ucdavis.edu # The returned value should be a datetime 5214299Sbbruce@ucdavis.edu assert isinstance(datetime2, datetime.datetime) 5314299Sbbruce@ucdavis.edu assert isinstance(date2, datetime.date) 5414299Sbbruce@ucdavis.edu assert isinstance(time2, datetime.time) 5514299Sbbruce@ucdavis.edu 5614299Sbbruce@ucdavis.edu # They should be identical (no information lost on roundtrip) 5714299Sbbruce@ucdavis.edu diff = abs(date1 - date2) 5814299Sbbruce@ucdavis.edu assert diff.days == 0 5914299Sbbruce@ucdavis.edu assert diff.seconds == 0 6014299Sbbruce@ucdavis.edu assert diff.microseconds == 0 6114299Sbbruce@ucdavis.edu 6214299Sbbruce@ucdavis.edu # Year, Month & Day should be the same after the round trip 6314299Sbbruce@ucdavis.edu assert date1.year == date2.year 6414299Sbbruce@ucdavis.edu assert date1.month == date2.month 6514299Sbbruce@ucdavis.edu assert date1.day == date2.day 6614299Sbbruce@ucdavis.edu 6714299Sbbruce@ucdavis.edu # There should be no time information 6814299Sbbruce@ucdavis.edu assert time2.hour == 0 6914299Sbbruce@ucdavis.edu assert time2.minute == 0 7014299Sbbruce@ucdavis.edu assert time2.second == 0 7114299Sbbruce@ucdavis.edu assert time2.microsecond == 0 7214299Sbbruce@ucdavis.edu 7314299Sbbruce@ucdavis.edu 7414299Sbbruce@ucdavis.edudef test_chrono_system_clock_roundtrip_time(): 7514299Sbbruce@ucdavis.edu time1 = datetime.datetime.today().time() 7614299Sbbruce@ucdavis.edu 7714299Sbbruce@ucdavis.edu # Roundtrip the time 7814299Sbbruce@ucdavis.edu datetime2 = m.test_chrono2(time1) 7914299Sbbruce@ucdavis.edu date2 = datetime2.date() 8014299Sbbruce@ucdavis.edu time2 = datetime2.time() 8114299Sbbruce@ucdavis.edu 8214299Sbbruce@ucdavis.edu # The returned value should be a datetime 8314299Sbbruce@ucdavis.edu assert isinstance(datetime2, datetime.datetime) 8414299Sbbruce@ucdavis.edu assert isinstance(date2, datetime.date) 8514299Sbbruce@ucdavis.edu assert isinstance(time2, datetime.time) 8614299Sbbruce@ucdavis.edu 8714299Sbbruce@ucdavis.edu # Hour, Minute, Second & Microsecond should be the same after the round trip 8814299Sbbruce@ucdavis.edu assert time1.hour == time2.hour 8914299Sbbruce@ucdavis.edu assert time1.minute == time2.minute 9014299Sbbruce@ucdavis.edu assert time1.second == time2.second 9114299Sbbruce@ucdavis.edu assert time1.microsecond == time2.microsecond 9214299Sbbruce@ucdavis.edu 9314299Sbbruce@ucdavis.edu # There should be no date information (i.e. date = python base date) 9414299Sbbruce@ucdavis.edu assert date2.year == 1970 9514299Sbbruce@ucdavis.edu assert date2.month == 1 9614299Sbbruce@ucdavis.edu assert date2.day == 1 9714299Sbbruce@ucdavis.edu 9814299Sbbruce@ucdavis.edu 9911986Sandreas.sandberg@arm.comdef test_chrono_duration_roundtrip(): 10011986Sandreas.sandberg@arm.com 10111986Sandreas.sandberg@arm.com # Get the difference between two times (a timedelta) 10211986Sandreas.sandberg@arm.com date1 = datetime.datetime.today() 10311986Sandreas.sandberg@arm.com date2 = datetime.datetime.today() 10411986Sandreas.sandberg@arm.com diff = date2 - date1 10511986Sandreas.sandberg@arm.com 10611986Sandreas.sandberg@arm.com # Make sure this is a timedelta 10711986Sandreas.sandberg@arm.com assert isinstance(diff, datetime.timedelta) 10811986Sandreas.sandberg@arm.com 10912391Sjason@lowepower.com cpp_diff = m.test_chrono3(diff) 11011986Sandreas.sandberg@arm.com 11111986Sandreas.sandberg@arm.com assert cpp_diff.days == diff.days 11211986Sandreas.sandberg@arm.com assert cpp_diff.seconds == diff.seconds 11311986Sandreas.sandberg@arm.com assert cpp_diff.microseconds == diff.microseconds 11411986Sandreas.sandberg@arm.com 11511986Sandreas.sandberg@arm.com 11611986Sandreas.sandberg@arm.comdef test_chrono_duration_subtraction_equivalence(): 11711986Sandreas.sandberg@arm.com 11811986Sandreas.sandberg@arm.com date1 = datetime.datetime.today() 11911986Sandreas.sandberg@arm.com date2 = datetime.datetime.today() 12011986Sandreas.sandberg@arm.com 12111986Sandreas.sandberg@arm.com diff = date2 - date1 12212391Sjason@lowepower.com cpp_diff = m.test_chrono4(date2, date1) 12311986Sandreas.sandberg@arm.com 12411986Sandreas.sandberg@arm.com assert cpp_diff.days == diff.days 12511986Sandreas.sandberg@arm.com assert cpp_diff.seconds == diff.seconds 12611986Sandreas.sandberg@arm.com assert cpp_diff.microseconds == diff.microseconds 12711986Sandreas.sandberg@arm.com 12811986Sandreas.sandberg@arm.com 12914299Sbbruce@ucdavis.edudef test_chrono_duration_subtraction_equivalence_date(): 13014299Sbbruce@ucdavis.edu 13114299Sbbruce@ucdavis.edu date1 = datetime.date.today() 13214299Sbbruce@ucdavis.edu date2 = datetime.date.today() 13314299Sbbruce@ucdavis.edu 13414299Sbbruce@ucdavis.edu diff = date2 - date1 13514299Sbbruce@ucdavis.edu cpp_diff = m.test_chrono4(date2, date1) 13614299Sbbruce@ucdavis.edu 13714299Sbbruce@ucdavis.edu assert cpp_diff.days == diff.days 13814299Sbbruce@ucdavis.edu assert cpp_diff.seconds == diff.seconds 13914299Sbbruce@ucdavis.edu assert cpp_diff.microseconds == diff.microseconds 14014299Sbbruce@ucdavis.edu 14114299Sbbruce@ucdavis.edu 14211986Sandreas.sandberg@arm.comdef test_chrono_steady_clock(): 14312391Sjason@lowepower.com time1 = m.test_chrono5() 14411986Sandreas.sandberg@arm.com assert isinstance(time1, datetime.timedelta) 14511986Sandreas.sandberg@arm.com 14611986Sandreas.sandberg@arm.com 14711986Sandreas.sandberg@arm.comdef test_chrono_steady_clock_roundtrip(): 14811986Sandreas.sandberg@arm.com time1 = datetime.timedelta(days=10, seconds=10, microseconds=100) 14912391Sjason@lowepower.com time2 = m.test_chrono6(time1) 15011986Sandreas.sandberg@arm.com 15111986Sandreas.sandberg@arm.com assert isinstance(time2, datetime.timedelta) 15211986Sandreas.sandberg@arm.com 15311986Sandreas.sandberg@arm.com # They should be identical (no information lost on roundtrip) 15411986Sandreas.sandberg@arm.com assert time1.days == time2.days 15511986Sandreas.sandberg@arm.com assert time1.seconds == time2.seconds 15611986Sandreas.sandberg@arm.com assert time1.microseconds == time2.microseconds 15711986Sandreas.sandberg@arm.com 15811986Sandreas.sandberg@arm.com 15911986Sandreas.sandberg@arm.comdef test_floating_point_duration(): 16012391Sjason@lowepower.com # Test using a floating point number in seconds 16112391Sjason@lowepower.com time = m.test_chrono7(35.525123) 16211986Sandreas.sandberg@arm.com 16311986Sandreas.sandberg@arm.com assert isinstance(time, datetime.timedelta) 16411986Sandreas.sandberg@arm.com 16511986Sandreas.sandberg@arm.com assert time.seconds == 35 16611986Sandreas.sandberg@arm.com assert 525122 <= time.microseconds <= 525123 16712037Sandreas.sandberg@arm.com 16812391Sjason@lowepower.com diff = m.test_chrono_float_diff(43.789012, 1.123456) 16912037Sandreas.sandberg@arm.com assert diff.seconds == 42 17012037Sandreas.sandberg@arm.com assert 665556 <= diff.microseconds <= 665557 17114299Sbbruce@ucdavis.edu 17214299Sbbruce@ucdavis.edu 17314299Sbbruce@ucdavis.edudef test_nano_timepoint(): 17414299Sbbruce@ucdavis.edu time = datetime.datetime.now() 17514299Sbbruce@ucdavis.edu time1 = m.test_nano_timepoint(time, datetime.timedelta(seconds=60)) 17614299Sbbruce@ucdavis.edu assert(time1 == time + datetime.timedelta(seconds=60)) 177