"""Test functions dedicated to time measurement and conversion.""" from datetime import timedelta from lib import timer def test_time_conversion() -> None: """Test conversion of time units.""" assert timer.msec(1000) == timedelta(milliseconds=1000) assert timer.to_msec(timedelta(milliseconds=1000)) == 1000 assert timer.msec_str(timedelta(milliseconds=1000)) == "1000" assert timer.seconds(1) == timedelta(seconds=1) assert timer.to_seconds(timedelta(seconds=1)) == 1 assert timer.sec_str(timedelta(seconds=1)) == "1" assert timer.minutes(1) == timedelta(minutes=1) assert timer.hours(1) == timedelta(hours=1) assert timer.days(1) == timedelta(days=1) assert timer.years(1) == timedelta(days=365) assert timer.to_msec(timer.seconds(1)) == 1000 assert timer.to_seconds(timer.minutes(1)) == 60 assert timer.to_seconds(timer.hours(1)) == 60*60 assert timer.to_seconds(timer.days(1)) == 24*60*60 assert timer.to_seconds(timer.years(1)) == 365*24*60*60 def test_init() -> None: """Test Timer class init.""" t = timer.Timer() assert t.duration == timedelta(0) assert t.starting_time is not None duration = timedelta(seconds=10) t = timer.Timer(duration) assert t.duration == duration assert t.starting_time is not None def test_is_expired() -> None: """Test timer expiration.""" t = timer.Timer(timedelta(seconds=10)) assert not t.is_expired() t = timer.Timer(timedelta(seconds=0)) assert t.is_expired() t = timer.Timer(timedelta(seconds=10)) t.reset() t.starting_time -= 10 assert t.is_expired() def test_reset() -> None: """Test timer reset.""" t = timer.Timer(timedelta(seconds=10)) t.reset() assert t.starting_time is not None assert timer.sec_str(t.time_since_reset()) == timer.sec_str(timedelta(0)) def test_time() -> None: """Test time measurement, expiration, and time until expiration.""" t = timer.Timer(timedelta(seconds=10)) t.starting_time -= 5 assert timer.sec_str(t.time_since_reset()) == timer.sec_str(timedelta(seconds=5)) t = timer.Timer(timedelta(seconds=10)) t.starting_time -= 5 assert timer.sec_str(t.time_until_expiration()) == timer.sec_str(timedelta(seconds=5)) t = timer.Timer(timedelta(seconds=10)) t.starting_time -= 15 # Simulate time passing assert t.time_until_expiration() == timedelta(0) t = timer.Timer(timedelta(seconds=10)) t.starting_time -= 15 assert t.time_until_expiration() == timedelta(0) t = timer.Timer(timedelta(seconds=10)) t.starting_time -= 5 assert timer.sec_str(t.time_until_expiration()) == timer.sec_str(timedelta(seconds=5))