diff --git a/scripts/test b/scripts/test new file mode 100755 index 0000000..4fc9525 --- /dev/null +++ b/scripts/test @@ -0,0 +1,6 @@ +#!/usr/bin/env bash +set -euo pipefail + +echo "Running regression tests..." + +lua test/regression/uncurried.lua diff --git a/src/Effect/Uncurried.lua b/src/Effect/Uncurried.lua index 11de067..01acec5 100644 --- a/src/Effect/Uncurried.lua +++ b/src/Effect/Uncurried.lua @@ -196,7 +196,7 @@ return { return function(i) return function(j) return function() - return fn(a, b, c, d, e, f, g, h, i) + return fn(a, b, c, d, e, f, g, h, i, j) end end end diff --git a/test/regression/uncurried.lua b/test/regression/uncurried.lua new file mode 100644 index 0000000..3e0eb09 --- /dev/null +++ b/test/regression/uncurried.lua @@ -0,0 +1,25 @@ +-- Regression guard: runEffectFn10 must forward all ten arguments. +-- +-- The FFI bound ten curried parameters a..j but called the underlying +-- function with only nine (a..i), silently dropping j. This loads the +-- FFI table directly and checks that every argument reaches `fn`. + +local M = assert(dofile("src/Effect/Uncurried.lua")) + +local seen +local recorder = function(...) + seen = { ... } + return nil +end + +-- runEffectFn10(fn)(a)(b)...(j)() applies fn to all ten arguments. +M.runEffectFn10(recorder)(1)(2)(3)(4)(5)(6)(7)(8)(9)(10)() + +assert(seen ~= nil, "fn was never called") +assert(#seen == 10, "expected 10 forwarded arguments, got " .. #seen) +for k = 1, 10 do + assert(seen[k] == k, + "argument #" .. k .. " not forwarded (got " .. tostring(seen[k]) .. ")") +end + +print("OK runEffectFn10 forwards all ten arguments")