diff --git a/codetiming/_timer.py b/codetiming/_timer.py index e0b8f15..0eeaa86 100644 --- a/codetiming/_timer.py +++ b/codetiming/_timer.py @@ -5,9 +5,10 @@ """ # Standard library imports +import time from contextlib import ContextDecorator from dataclasses import dataclass, field -import time +from math import nan from typing import Any, Callable, ClassVar, Dict, Optional @@ -24,6 +25,7 @@ class Timer(ContextDecorator): text: str = "Elapsed time: {:0.4f} seconds" logger: Optional[Callable[[str], None]] = print _start_time: Optional[float] = field(default=None, init=False, repr=False) + last: float = field(default=nan, init=False, repr=False) def __post_init__(self) -> None: """Initialization: add timer to dict of timers""" @@ -43,16 +45,16 @@ def stop(self) -> float: raise TimerError(f"Timer is not running. Use .start() to start it") # Calculate elapsed time - elapsed_time = time.perf_counter() - self._start_time + self.last = time.perf_counter() - self._start_time self._start_time = None # Report elapsed time if self.logger: - self.logger(self.text.format(elapsed_time)) + self.logger(self.text.format(self.last)) if self.name: - self.timers[self.name] += elapsed_time + self.timers[self.name] += self.last - return elapsed_time + return self.last def __enter__(self) -> "Timer": """Start a new timer as a context manager""" diff --git a/tests/test_codetiming.py b/tests/test_codetiming.py index 6842c93..8497cb0 100644 --- a/tests/test_codetiming.py +++ b/tests/test_codetiming.py @@ -4,6 +4,8 @@ """ # Standard library imports import re +import time +from math import isnan # Third party imports import pytest @@ -11,7 +13,6 @@ # Codetiming imports from codetiming import Timer, TimerError - # # Test functions # @@ -164,3 +165,13 @@ def test_error_if_restarting_running_timer(): t.start() with pytest.raises(TimerError): t.start() + + +def test_timer_sets_last(): + t = Timer() + assert isnan(t.last) + t.start() + time.sleep(0.1) + t.stop() + + assert 0.1 <= t.last