From 709698574def8a35af8b70fdc794040cd9ca30ef Mon Sep 17 00:00:00 2001 From: Jackson Moore Date: Fri, 4 Sep 2026 11:08:04 +0200 Subject: Preserve timely repetition --- tests/run.lua | 42 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) (limited to 'tests/run.lua') diff --git a/tests/run.lua b/tests/run.lua index 76ac8bf..17d5b4b 100644 --- a/tests/run.lua +++ b/tests/run.lua @@ -3873,7 +3873,7 @@ test("Positive repeat timeout reads and stores the current clock", function() }) local decision, elapsed_ms = resolver:evaluate_timeout() - same(nil, decision) + same(repeat_resolver.Decision.REPEAT, decision) same(100, elapsed_ms) same(125.75, state.repeat_timestamp_ms) local reads = 0 @@ -3895,6 +3895,46 @@ test("Elapsed repeat milliseconds truncate toward zero", function() end, "finite") end) +test("Timely repeat keeps equality and restarts each interval", function() + local state, transitions = fresh_sequence_state() + transitions:SetRepeatTimestamp(100) + local host = MemoryHost.new({ + configuration = { repeat_timeout_ms = 100 }, + time_values_ms = { 200, 299.9 }, + }) + local resolver = repeat_resolver.new({ + clock = host, + policy = policy.new(host), + }) + + local first_decision, first_elapsed = resolver:evaluate_timeout() + same(repeat_resolver.Decision.REPEAT, first_decision) + same(100, first_elapsed) + same(200, state.repeat_timestamp_ms) + + local second_decision, second_elapsed = resolver:evaluate_timeout() + same(repeat_resolver.Decision.REPEAT, second_decision) + same(99, second_elapsed) + same(299.9, state.repeat_timestamp_ms) +end) + +test("Zero repeat timeout keeps repetition without reading time", function() + fresh_sequence_state() + local host = MemoryHost.new({ + configuration = { repeat_timeout_ms = 0 }, + time_values_ms = { 1000000 }, + }) + local resolver = repeat_resolver.new({ + clock = host, + policy = policy.new(host), + }) + + same(repeat_resolver.Decision.REPEAT, resolver:evaluate_timeout()) + for _, operation in ipairs(host:operations()) do + falsy(operation.operation == "read_time_ms") + end +end) + for _, item in ipairs(tests) do local ok, failure = xpcall(item.body, debug.traceback) if not ok then -- cgit v1.2.3