about summary refs log tree commit diff stats
path: root/027call_ingredient.cc
diff options
context:
space:
mode:
Diffstat (limited to '027call_ingredient.cc')
-rw-r--r--027call_ingredient.cc127
1 files changed, 77 insertions, 50 deletions
diff --git a/027call_ingredient.cc b/027call_ingredient.cc
index df7bba3e..659f644d 100644
--- a/027call_ingredient.cc
+++ b/027call_ingredient.cc
@@ -1,24 +1,34 @@
 //: Calls can take ingredients just like primitives. To access a recipe's
 //: ingredients, use 'next-ingredient'.
 
-:(scenario next_ingredient)
-def main [
-  f 2
-]
-def f [
-  12:num <- next-ingredient
-  13:num <- add 1, 12:num
-]
-+mem: storing 3 in location 13
+void test_next_ingredient() {
+  run(
+      "def main [\n"
+      "  f 2\n"
+      "]\n"
+      "def f [\n"
+      "  12:num <- next-ingredient\n"
+      "  13:num <- add 1, 12:num\n"
+      "]\n"
+  );
+  CHECK_TRACE_CONTENTS(
+      "mem: storing 3 in location 13\n"
+  );
+}
 
-:(scenario next_ingredient_missing)
-def main [
-  f
-]
-def f [
-  _, 12:num <- next-ingredient
-]
-+mem: storing 0 in location 12
+void test_next_ingredient_missing() {
+  run(
+      "def main [\n"
+      "  f\n"
+      "]\n"
+      "def f [\n"
+      "  _, 12:num <- next-ingredient\n"
+      "]\n"
+  );
+  CHECK_TRACE_CONTENTS(
+      "mem: storing 0 in location 12\n"
+  );
+}
 
 :(before "End call Fields")
 vector<vector<double> > ingredient_atoms;
@@ -84,30 +94,41 @@ case NEXT_INGREDIENT: {
   break;
 }
 
-:(scenario next_ingredient_fail_on_missing)
-% Hide_errors = true;
-def main [
-  f
-]
-def f [
-  11:num <- next-ingredient
-]
-+error: f: no ingredient to save in '11:num'
+:(code)
+void test_next_ingredient_fail_on_missing() {
+  Hide_errors = true;
+  run(
+      "def main [\n"
+      "  f\n"
+      "]\n"
+      "def f [\n"
+      "  11:num <- next-ingredient\n"
+      "]\n"
+  );
+  CHECK_TRACE_CONTENTS(
+      "error: f: no ingredient to save in '11:num'\n"
+  );
+}
 
-:(scenario rewind_ingredients)
-def main [
-  f 2
-]
-def f [
-  12:num <- next-ingredient  # consume ingredient
-  _, 1:bool <- next-ingredient  # will not find any ingredients
-  rewind-ingredients
-  13:num, 2:bool <- next-ingredient  # will find ingredient again
-]
-+mem: storing 2 in location 12
-+mem: storing 0 in location 1
-+mem: storing 2 in location 13
-+mem: storing 1 in location 2
+void test_rewind_ingredients() {
+  run(
+      "def main [\n"
+      "  f 2\n"
+      "]\n"
+      "def f [\n"
+      "  12:num <- next-ingredient\n"  // consume ingredient
+      "  _, 1:bool <- next-ingredient\n"  // will not find any ingredients
+      "  rewind-ingredients\n"
+      "  13:num, 2:bool <- next-ingredient\n"  // will find ingredient again
+      "]\n"
+  );
+  CHECK_TRACE_CONTENTS(
+      "mem: storing 2 in location 12\n"
+      "mem: storing 0 in location 1\n"
+      "mem: storing 2 in location 13\n"
+      "mem: storing 1 in location 2\n"
+  );
+}
 
 :(before "End Primitive Recipe Declarations")
 REWIND_INGREDIENTS,
@@ -126,16 +147,22 @@ case REWIND_INGREDIENTS: {
 
 //: another primitive: 'ingredient' for random access
 
-:(scenario ingredient)
-def main [
-  f 1, 2
-]
-def f [
-  12:num <- ingredient 1  # consume second ingredient first
-  13:num, 1:bool <- next-ingredient  # next-ingredient tries to scan past that
-]
-+mem: storing 2 in location 12
-+mem: storing 0 in location 1
+:(code)
+void test_ingredient() {
+  run(
+      "def main [\n"
+      "  f 1, 2\n"
+      "]\n"
+      "def f [\n"
+      "  12:num <- ingredient 1\n"  // consume second ingredient first
+      "  13:num, 1:bool <- next-ingredient\n"  // next-ingredient tries to scan past that
+      "]\n"
+  );
+  CHECK_TRACE_CONTENTS(
+      "mem: storing 2 in location 12\n"
+      "mem: storing 0 in location 1\n"
+  );
+}
 
 :(before "End Primitive Recipe Declarations")
 INGREDIENT,