aboutsummaryrefslogtreecommitdiff
path: root/unit_tests/scripts/lane/tasking_basic.lua
diff options
context:
space:
mode:
authorBenoit Germain <benoit.germain@ubisoft.com>2024-12-13 17:22:17 +0100
committerBenoit Germain <benoit.germain@ubisoft.com>2024-12-13 17:22:17 +0100
commitdc7a2bc3a9c8316e17902493b832ca117805d29f (patch)
tree3c1a03edf586869119ef0de03631f6f603650720 /unit_tests/scripts/lane/tasking_basic.lua
parent7500a80fc06c5311c46df8f1761f25ae67277fc4 (diff)
downloadlanes-dc7a2bc3a9c8316e17902493b832ca117805d29f.tar.gz
lanes-dc7a2bc3a9c8316e17902493b832ca117805d29f.tar.bz2
lanes-dc7a2bc3a9c8316e17902493b832ca117805d29f.zip
Append all unit tests to depot
Diffstat (limited to 'unit_tests/scripts/lane/tasking_basic.lua')
-rw-r--r--unit_tests/scripts/lane/tasking_basic.lua74
1 files changed, 74 insertions, 0 deletions
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 @@
1local require_lanes_result_1, require_lanes_result_2 = require "lanes".configure(config).configure()
2print("require_lanes_result:", require_lanes_result_1, require_lanes_result_2)
3local lanes = require_lanes_result_1
4
5local require_assert_result_1, require_assert_result_2 = require "_assert"
6print("require_assert_result:", require_assert_result_1, require_assert_result_2)
7
8local utils = lanes.require "_utils"
9local PRINT = utils.MAKE_PRINT()
10
11local lanes_gen = assert(lanes.gen)
12local lanes_linda = assert(lanes.linda)
13
14-- ##################################################################################################
15-- ##################################################################################################
16-- ##################################################################################################
17
18local function task(a, b, c)
19 local new_name = "task("..a..","..b..","..c..")"
20 -- test lane naming change
21 lane_threadname(new_name)
22 assert(lane_threadname() == new_name)
23 --error "111" -- testing error messages
24 assert(hey)
25 local v=0
26 for i=a,b,c do
27 v= v+i
28 end
29 return v, hey
30end
31
32local gc_cb = function(name_, status_)
33 PRINT(" ---> lane '" .. name_ .. "' collected with status '" .. status_ .. "'")
34end
35
36-- ##################################################################################################
37-- ##################################################################################################
38-- ##################################################################################################
39
40PRINT("\n\n", "---=== Tasking (basic) ===---", "\n\n")
41
42local task_launch = lanes_gen("", { globals={hey=true}, gc_cb = gc_cb}, task)
43 -- base stdlibs, normal priority
44
45-- 'task_launch' is a factory of multithreaded tasks, we can launch several:
46
47local lane1 = task_launch(100,200,3)
48assert.fails(function() print(lane1[lane1]) end) -- indexing the lane with anything other than a string or a number should fail
49lanes.sleep(0.1) -- give some time so that the lane can set its name
50assert(lane1:get_threadname() == "task(100,200,3)", "Lane name is " .. lane1:get_threadname())
51
52local lane2= task_launch(200,300,4)
53
54-- At this stage, states may be "pending", "running" or "done"
55
56local st1,st2= lane1.status, lane2.status
57PRINT(st1,st2)
58assert(st1=="pending" or st1=="running" or st1=="done")
59assert(st2=="pending" or st2=="running" or st2=="done")
60
61-- Accessing results ([1..N]) pends until they are available
62--
63PRINT("waiting...")
64local v1, v1_hey= lane1[1], lane1[2]
65local v2, v2_hey= lane2[1], lane2[2]
66
67PRINT(v1, v1_hey)
68assert(v1_hey == true)
69
70PRINT(v2, v2_hey)
71assert(v2_hey == true)
72
73assert(lane1.status == "done")
74assert(lane1.status == "done")