diff --git a/retry_mechanism/tests/test_core.py b/retry_mechanism/tests/test_core.py new file mode 100644 index 0000000..aca9a43 --- /dev/null +++ b/retry_mechanism/tests/test_core.py @@ -0,0 +1,55 @@ +import pytest +import time +from types import SimpleNamespace + +from src.retry_mechanism import core + + +@pytest.fixture(autouse=True) +def patch_sleep(monkeypatch): + # Patch time.sleep to avoid delay + monkeypatch.setattr(time, 'sleep', lambda s: None) + + +def test_retry_if_negative_dt_no_retry(): + dt = 0.5 + result = core.retry_if_negative_dt(dt) + assert isinstance(result, float) + assert result == pytest.approx(0.5) + + +def test_retry_if_negative_dt_with_retry(monkeypatch): + calls = SimpleNamespace(count=0) + + def fake_measure(): + calls.count += 1 + # First call negative, second call positive + return -1.0 if calls.count == 1 else 0.2 + + monkeypatch.setattr(core, '_measure_dt', fake_measure) + + val = core.retry_if_negative_dt(-0.5) + assert isinstance(val, float) + assert val >= 0.0 + assert calls.count == 2 + + +def test_retry_if_negative_dt_second_negative(monkeypatch): + calls = SimpleNamespace(count=0) + + def always_negative(): + calls.count += 1 + return -0.5 + + monkeypatch.setattr(core, '_measure_dt', always_negative) + + val = core.retry_if_negative_dt(-1.0) + assert isinstance(val, float) + # even if still negative after retry, returns that value + assert val < 0 + assert calls.count == 2 + + +def test_input_type_validation(): + with pytest.raises(TypeError): + _ = core.retry_if_negative_dt('invalid')