diff options
Diffstat (limited to 'tests/ehynes.lua')
-rw-r--r-- | tests/ehynes.lua | 52 |
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 | -- | ||
4 | require 'lanes' | ||
5 | |||
6 | local function PRINT_FMT( fmt, ... ) | ||
7 | io.stderr:write( string.format(fmt,...).."\n" ) | ||
8 | end | ||
9 | |||
10 | -- a linda for sending messages | ||
11 | local linda = lanes.linda() | ||
12 | |||
13 | -- a linda message receiver | ||
14 | local 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 | ||
26 | local 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 | -- | ||
34 | local receiver2 = receiver_gen('another message') | ||
35 | |||
36 | -- a function to pause and log the execution for debugging | ||
37 | local function logf(s, f, ...) | ||
38 | os.execute('sleep 1') | ||
39 | PRINT_FMT( "*** %s", s ) | ||
40 | f(...) | ||
41 | end | ||
42 | |||
43 | -- first message sent is received right away | ||
44 | logf('first message sent', linda.send, linda, 'message', true) | ||
45 | |||
46 | -- second message sent is not received immediatly | ||
47 | logf('second message sent', linda.send, linda, 'message', true) | ||
48 | |||
49 | -- third message sent triggers receipt of both second and third messages | ||
50 | logf('third message sent', linda.send, linda, 'message', true) | ||
51 | |||
52 | logf('all done', function() end) | ||