diff --git a/crates/lb/tests/task.lua b/crates/lb/tests/task.lua new file mode 100644 index 0000000..89d7f75 --- /dev/null +++ b/crates/lb/tests/task.lua @@ -0,0 +1,56 @@ +local ok, task = pcall(require, "lb:task") +if not ok then return end + +describe("spawn", function() + test("callback receives args", function() + spawn(function(...) + assert(select("#", ...) == 0) + end):await() + + spawn(function(...) + assert(select("#", ...) == 1) + assert((...) == nil) + end, nil):await() + + spawn(function(...) + assert(select("#", ...) == 4) + local args = table.pack(...) + assert(args[1] == 1 and args[2] == 2 and args[3] == nil and args[4] == 3) + end, 1, 2, nil, 3):await() + end) + + test("await returns callback results", function() + local res = table.pack(task + :spawn(function() + -- no returns + end) + :await()) + assert(res.n == 0) + + local res = table.pack(task + :spawn(function() + return nil + end) + :await()) + assert(res.n == 1 and res[1] == nil) + + local res = table.pack(task + :spawn(function() + return 1, 2, nil, 3 + end) + :await()) + assert(res.n == 4 and res[1] == 1 and res[2] == 2 and res[3] == nil and res[4] == 3) + end) + + test("callback args and results", function() + local res = table.pack(task + :spawn(function(...) + assert(select("#", ...) == 5) + local args = table.pack(...) + assert(args[1] == 5 and args[2] == 4 and args[3] == nil and args[4] == 3, args[5] == nil) + return 1, 3, nil + end, 5, 4, nil, 3, nil) + :await()) + assert(res.n == 3 and res[1] == 1 and res[2] == 3 and res[3] == nil) + end) +end)