aboutsummaryrefslogtreecommitdiff
path: root/tests/ehynes.lua
diff options
context:
space:
mode:
Diffstat (limited to 'tests/ehynes.lua')
-rw-r--r--tests/ehynes.lua52
1 files changed, 52 insertions, 0 deletions
diff --git a/tests/ehynes.lua b/tests/ehynes.lua
new file mode 100644
index 0000000..4cc370e
--- /dev/null
+++ b/tests/ehynes.lua
@@ -0,0 +1,52 @@
1--
2-- Test from <ehynes at dharmagaia.com>
3--
4require 'lanes'
5
6local function PRINT_FMT( fmt, ... )
7 io.stderr:write( string.format(fmt,...).."\n" )
8end
9
10-- a linda for sending messages
11local linda = lanes.linda()
12
13-- a linda message receiver
14local receiver_gen = lanes.gen( 'base', 'os', 'string', 'io',
15 function (message_name)
16 PRINT_FMT( 'receiver for message %s entered', message_name )
17 local n = 1
18 while linda:receive(message_name) do
19 PRINT_FMT( '%s %d receieved', message_name, n )
20 n = n + 1
21 end
22 end
23)
24
25-- create a receiver
26local receiver1 = receiver_gen('message')
27
28-- create a second receiver (a second receiver in the same linda
29-- appears to be needed to trigger the delays)
30--
31-- AKa 4-Aug-2008: No, with svn version it isn't. But it causes the 2nd
32-- message to be hanging...
33--
34local receiver2 = receiver_gen('another message')
35
36-- a function to pause and log the execution for debugging
37local function logf(s, f, ...)
38 os.execute('sleep 1')
39 PRINT_FMT( "*** %s", s )
40 f(...)
41end
42
43-- first message sent is received right away
44logf('first message sent', linda.send, linda, 'message', true)
45
46-- second message sent is not received immediatly
47logf('second message sent', linda.send, linda, 'message', true)
48
49-- third message sent triggers receipt of both second and third messages
50logf('third message sent', linda.send, linda, 'message', true)
51
52logf('all done', function() end)