aboutsummaryrefslogtreecommitdiff
path: root/tests/hold/accept/isolated_globals.zc
diff options
context:
space:
mode:
Diffstat (limited to 'tests/hold/accept/isolated_globals.zc')
-rw-r--r--tests/hold/accept/isolated_globals.zc18
1 files changed, 18 insertions, 0 deletions
diff --git a/tests/hold/accept/isolated_globals.zc b/tests/hold/accept/isolated_globals.zc
new file mode 100644
index 0000000..08a3e5c
--- /dev/null
+++ b/tests/hold/accept/isolated_globals.zc
@@ -0,0 +1,18 @@
+// expect: 0 3
+// a plain global is each actor's own; only a shared variable of a hold block is seen by all
+namespace;
+include rt, actor;
+typecheck on;
+let plain = 0;
+hold { shared let seen = 0; fn note() { seen++; return seen; } fn seen_now() { return seen; } }
+int work(int n) { plain = plain + n; note(); return plain; }
+fn main() {
+ actor.Actor<int,int>* a = rt.new(actor.Actor<int,int>), b = rt.new(actor.Actor<int,int>), c = rt.new(actor.Actor<int,int>);
+ a.spawn(work); b.spawn(work); c.spawn(work);
+ a.send(5); b.send(6); c.send(7);
+ a.recv(fn(int n) { return 0; }); b.recv(fn(int n) { return 0; }); c.recv(fn(int n) { return 0; });
+ a.await(); b.await(); c.await();
+ rt.put_n(plain); rt.put_c(' '); rt.put_n(seen_now()); rt.put_c(10);
+ a.close(); b.close(); c.close();
+ return 0;
+}