summaryrefslogtreecommitdiff
path: root/tests/demo.apl
diff options
context:
space:
mode:
Diffstat (limited to 'tests/demo.apl')
-rw-r--r--tests/demo.apl31
1 files changed, 31 insertions, 0 deletions
diff --git a/tests/demo.apl b/tests/demo.apl
new file mode 100644
index 0000000..7a6ddca
--- /dev/null
+++ b/tests/demo.apl
@@ -0,0 +1,31 @@
+⍝ The following demonstrates message passing between an 'iota sever',
+⍝ and a client (the user of the iota function). The client always initiates
+⍝ communication, and the server must be running, but the client should not
+⍝ be able to notice a difference between monadic ⍳ and the iota function,
+⍝ even though one does the computation in a different thread.
+
+iotaServer←{
+ msg←1⍨⍇0
+ msg≡'stop': ⎕←'Bye bye from indexer'
+ (from num)←msg
+ _←(⍳num)⍈from
+ ∇⍵
+}
+
+id←0 ⍝ this is an invalid thread id, so it is a sane starting point
+
+start←{
+ id=0: iotaServer&⍬
+ id
+}
+
+stop←{
+ 'stop'⍈id
+}
+
+iota←{
+ ⍝ Sending messages to a nonexisting thread throws a domain error (11)
+ 11::'Sorry, the iota server is not running'
+ _←(⎕self ⍵)⍈id
+ 1⍨⍇0
+}