about summary refs log tree commit diff stats
path: root/044space_surround.cc
diff options
context:
space:
mode:
Diffstat (limited to '044space_surround.cc')
-rw-r--r--044space_surround.cc77
1 files changed, 43 insertions, 34 deletions
diff --git a/044space_surround.cc b/044space_surround.cc
index 9957630d..5a4afb5e 100644
--- a/044space_surround.cc
+++ b/044space_surround.cc
@@ -4,36 +4,41 @@
 //:
 //: (Surrounding spaces are like lexical scopes in other languages.)
 
-:(scenario surrounding_space)
-# location 2 in space 1 (remember that locations 0 and 1 are reserved in all
-# spaces) refers to the space surrounding the default space, here 20.
-def main [
-  # prepare default-space address
-  10:num/alloc-id, 11:num <- copy 0, 1000
-  # prepare default-space payload
-  1000:num <- copy 0  # alloc id of payload
-  1001:num <- copy 5  # length
-  # prepare address of chained space
-  20:num/alloc-id, 21:num <- copy 0, 2000
-  # prepare payload of chained space
-  2000:num <- copy 0  # alloc id of payload
-  2001:num <- copy 5  # length
-  # actual start of this recipe
-  default-space:space <- copy 10:space
-  #: later layers will explain the /names: property
-  0:space/names:dummy <- copy 20:space/raw
-  2:num <- copy 94
-  2:num/space:1 <- copy 95
-]
-def dummy [  # just for the /names: property above
-]
-# chain space: 1000 + (alloc id) 1 + (length) 1
-+mem: storing 0 in location 1002
-+mem: storing 2000 in location 1003
-# store to default space: 1000 + (alloc id) 1 + (length) 1 + (index) 2
-+mem: storing 94 in location 1004
-# store to chained space: (contents of location 1003) 2000 + (alloc id) 1 + (length) 1 + (index) 2
-+mem: storing 95 in location 2004
+void test_surrounding_space() {
+  run(
+      // location 2 in space 1 (remember that locations 0 and 1 are reserved in all
+      // spaces) refers to the space surrounding the default space, here 20.
+      "def main [\n"
+         // prepare default-space address
+      "  10:num/alloc-id, 11:num <- copy 0, 1000\n"
+         // prepare default-space payload
+      "  1000:num <- copy 0\n"  // alloc id of payload
+      "  1001:num <- copy 5\n"  // length
+         // prepare address of chained space
+      "  20:num/alloc-id, 21:num <- copy 0, 2000\n"
+         // prepare payload of chained space
+      "  2000:num <- copy 0\n"  // alloc id of payload
+      "  2001:num <- copy 5\n"  // length
+         // actual start of this recipe
+      "  default-space:space <- copy 10:space\n"
+         // later layers will explain the /names: property
+      "  0:space/names:dummy <- copy 20:space/raw\n"
+      "  2:num <- copy 94\n"
+      "  2:num/space:1 <- copy 95\n"
+      "]\n"
+      "def dummy [\n"  // just for the /names: property above
+      "]\n"
+  );
+  CHECK_TRACE_CONTENTS(
+      // chain space: 1000 + (alloc id) 1 + (length) 1
+      "mem: storing 0 in location 1002\n"
+      "mem: storing 2000 in location 1003\n"
+      // store to default space: 1000 + (alloc id) 1 + (length) 1 + (index) 2
+      "mem: storing 94 in location 1004\n"
+      // store to chained space: (contents of location 1003) 2000 + (alloc id) 1 + (length) 1 + (index) 2
+      "mem: storing 95 in location 2004\n"
+  );
+}
 
 //: If you think of a space as a collection of variables with a common
 //: lifetime, surrounding allows managing shorter lifetimes inside a longer
@@ -64,7 +69,11 @@ int space_index(const reagent& x) {
   return 0;
 }
 
-:(scenario permit_space_as_variable_name)
-def main [
-  space:num <- copy 0
-]
+:(code)
+void test_permit_space_as_variable_name() {
+  run(
+      "def main [\n"
+      "  space:num <- copy 0\n"
+      "]\n"
+  );
+}