summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lua/clever_f/repeat_resolver.lua12
-rw-r--r--tests/run.lua12
2 files changed, 22 insertions, 2 deletions
diff --git a/lua/clever_f/repeat_resolver.lua b/lua/clever_f/repeat_resolver.lua
index c62a86f..4155df9 100644
--- a/lua/clever_f/repeat_resolver.lua
+++ b/lua/clever_f/repeat_resolver.lua
@@ -50,6 +50,16 @@ local function finite_time(value)
and value < math.huge
end
+function M.truncate_elapsed_ms(elapsed_ms)
+ if not finite_time(elapsed_ms) then
+ fail("elapsed milliseconds must be finite", 2)
+ end
+ local integer_part = math.modf(elapsed_ms)
+ return integer_part
+end
+
+M.truncate_milliseconds = M.truncate_elapsed_ms
+
local resolver_metatable = {
__index = RepeatResolver,
__newindex = function()
@@ -141,7 +151,7 @@ function RepeatResolver:evaluate_timeout()
fail("repeat clock must return finite milliseconds", 2)
end
local elapsed_ms = current_time - resolver_records[self].state.repeat_timestamp_ms
- return nil, elapsed_ms
+ return nil, M.truncate_elapsed_ms(elapsed_ms)
end
RepeatResolver.check_timeout = RepeatResolver.evaluate_timeout
diff --git a/tests/run.lua b/tests/run.lua
index 437a3ba..d024c8d 100644
--- a/tests/run.lua
+++ b/tests/run.lua
@@ -3874,7 +3874,7 @@ test("Positive repeat timeout reads the current clock", function()
local decision, elapsed_ms = resolver:evaluate_timeout()
same(nil, decision)
- same(100.5, elapsed_ms)
+ same(100, elapsed_ms)
local reads = 0
for _, operation in ipairs(host:operations()) do
if operation.operation == "read_time_ms" then
@@ -3884,6 +3884,16 @@ test("Positive repeat timeout reads the current clock", function()
same(1, reads)
end)
+test("Elapsed repeat milliseconds truncate toward zero", function()
+ same(99, repeat_resolver.truncate_elapsed_ms(99.999))
+ same(-99, repeat_resolver.truncate_elapsed_ms(-99.999))
+ same(100, repeat_resolver.truncate_elapsed_ms(100))
+ same(0, repeat_resolver.truncate_elapsed_ms(-0.75))
+ fails(function()
+ repeat_resolver.truncate_elapsed_ms(0 / 0)
+ end, "finite")
+end)
+
for _, item in ipairs(tests) do
local ok, failure = xpcall(item.body, debug.traceback)
if not ok then