diff options
Diffstat (limited to '')
-rw-r--r-- | unit_tests/scripts/lane/tasking_basic.lua | 74 |
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 @@ | |||
1 | local require_lanes_result_1, require_lanes_result_2 = require "lanes".configure(config).configure() | ||
2 | print("require_lanes_result:", require_lanes_result_1, require_lanes_result_2) | ||
3 | local lanes = require_lanes_result_1 | ||
4 | |||
5 | local require_assert_result_1, require_assert_result_2 = require "_assert" | ||
6 | print("require_assert_result:", require_assert_result_1, require_assert_result_2) | ||
7 | |||
8 | local utils = lanes.require "_utils" | ||
9 | local PRINT = utils.MAKE_PRINT() | ||
10 | |||
11 | local lanes_gen = assert(lanes.gen) | ||
12 | local lanes_linda = assert(lanes.linda) | ||
13 | |||
14 | -- ################################################################################################## | ||
15 | -- ################################################################################################## | ||
16 | -- ################################################################################################## | ||
17 | |||
18 | local 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 | ||
30 | end | ||
31 | |||
32 | local gc_cb = function(name_, status_) | ||
33 | PRINT(" ---> lane '" .. name_ .. "' collected with status '" .. status_ .. "'") | ||
34 | end | ||
35 | |||
36 | -- ################################################################################################## | ||
37 | -- ################################################################################################## | ||
38 | -- ################################################################################################## | ||
39 | |||
40 | PRINT("\n\n", "---=== Tasking (basic) ===---", "\n\n") | ||
41 | |||
42 | local 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 | |||
47 | local lane1 = task_launch(100,200,3) | ||
48 | assert.fails(function() print(lane1[lane1]) end) -- indexing the lane with anything other than a string or a number should fail | ||
49 | lanes.sleep(0.1) -- give some time so that the lane can set its name | ||
50 | assert(lane1:get_threadname() == "task(100,200,3)", "Lane name is " .. lane1:get_threadname()) | ||
51 | |||
52 | local lane2= task_launch(200,300,4) | ||
53 | |||
54 | -- At this stage, states may be "pending", "running" or "done" | ||
55 | |||
56 | local st1,st2= lane1.status, lane2.status | ||
57 | PRINT(st1,st2) | ||
58 | assert(st1=="pending" or st1=="running" or st1=="done") | ||
59 | assert(st2=="pending" or st2=="running" or st2=="done") | ||
60 | |||
61 | -- Accessing results ([1..N]) pends until they are available | ||
62 | -- | ||
63 | PRINT("waiting...") | ||
64 | local v1, v1_hey= lane1[1], lane1[2] | ||
65 | local v2, v2_hey= lane2[1], lane2[2] | ||
66 | |||
67 | PRINT(v1, v1_hey) | ||
68 | assert(v1_hey == true) | ||
69 | |||
70 | PRINT(v2, v2_hey) | ||
71 | assert(v2_hey == true) | ||
72 | |||
73 | assert(lane1.status == "done") | ||
74 | assert(lane1.status == "done") | ||