From dc7a2bc3a9c8316e17902493b832ca117805d29f Mon Sep 17 00:00:00 2001 From: Benoit Germain Date: Fri, 13 Dec 2024 17:22:17 +0100 Subject: Append all unit tests to depot --- unit_tests/scripts/lane/tasking_basic.lua | 74 +++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 unit_tests/scripts/lane/tasking_basic.lua (limited to 'unit_tests/scripts/lane/tasking_basic.lua') diff --git a/unit_tests/scripts/lane/tasking_basic.lua b/unit_tests/scripts/lane/tasking_basic.lua new file mode 100644 index 0000000..99be321 --- /dev/null +++ b/unit_tests/scripts/lane/tasking_basic.lua @@ -0,0 +1,74 @@ +local require_lanes_result_1, require_lanes_result_2 = require "lanes".configure(config).configure() +print("require_lanes_result:", require_lanes_result_1, require_lanes_result_2) +local lanes = require_lanes_result_1 + +local require_assert_result_1, require_assert_result_2 = require "_assert" +print("require_assert_result:", require_assert_result_1, require_assert_result_2) + +local utils = lanes.require "_utils" +local PRINT = utils.MAKE_PRINT() + +local lanes_gen = assert(lanes.gen) +local lanes_linda = assert(lanes.linda) + +-- ################################################################################################## +-- ################################################################################################## +-- ################################################################################################## + +local function task(a, b, c) + local new_name = "task("..a..","..b..","..c..")" + -- test lane naming change + lane_threadname(new_name) + assert(lane_threadname() == new_name) + --error "111" -- testing error messages + assert(hey) + local v=0 + for i=a,b,c do + v= v+i + end + return v, hey +end + +local gc_cb = function(name_, status_) + PRINT(" ---> lane '" .. name_ .. "' collected with status '" .. status_ .. "'") +end + +-- ################################################################################################## +-- ################################################################################################## +-- ################################################################################################## + +PRINT("\n\n", "---=== Tasking (basic) ===---", "\n\n") + +local task_launch = lanes_gen("", { globals={hey=true}, gc_cb = gc_cb}, task) + -- base stdlibs, normal priority + +-- 'task_launch' is a factory of multithreaded tasks, we can launch several: + +local lane1 = task_launch(100,200,3) +assert.fails(function() print(lane1[lane1]) end) -- indexing the lane with anything other than a string or a number should fail +lanes.sleep(0.1) -- give some time so that the lane can set its name +assert(lane1:get_threadname() == "task(100,200,3)", "Lane name is " .. lane1:get_threadname()) + +local lane2= task_launch(200,300,4) + +-- At this stage, states may be "pending", "running" or "done" + +local st1,st2= lane1.status, lane2.status +PRINT(st1,st2) +assert(st1=="pending" or st1=="running" or st1=="done") +assert(st2=="pending" or st2=="running" or st2=="done") + +-- Accessing results ([1..N]) pends until they are available +-- +PRINT("waiting...") +local v1, v1_hey= lane1[1], lane1[2] +local v2, v2_hey= lane2[1], lane2[2] + +PRINT(v1, v1_hey) +assert(v1_hey == true) + +PRINT(v2, v2_hey) +assert(v2_hey == true) + +assert(lane1.status == "done") +assert(lane1.status == "done") -- cgit v1.2.3-55-g6feb