From 96f19e1e57c9d8508c7003aa4de4a87d0c7239c3 Mon Sep 17 00:00:00 2001 From: "Kartik K. Agaram" Date: Wed, 8 Apr 2015 01:02:42 -0700 Subject: 1038 - clean up layer organization a little Things are quite intricate to avoid reloading all recipes before every test. But mu wasn't really intended to sidestep intrinsic intricacy. --- cpp/010vm | 4 ++-- cpp/011load | 15 ++++++++++++++- cpp/013run | 21 ++++++--------------- cpp/024brace | 1 - cpp/025name | 6 +++--- 5 files changed, 25 insertions(+), 22 deletions(-) diff --git a/cpp/010vm b/cpp/010vm index 8d1c71df..aa75c6ae 100644 --- a/cpp/010vm +++ b/cpp/010vm @@ -138,10 +138,10 @@ void setup_recipes() { //: startup, and carefully undo each test's additions after itself. :(before "End One-time Setup") setup_recipes(); - load("core.mu"); + // End Load Recipes + // give tests a consistent starting point assert(Next_recipe_number < 100); Next_recipe_number = 100; - recipes_added_by_test.clear(); // Freeze everything added so far. delete Trace_stream; Trace_stream = new trace_stream; :(before "End Setup") Next_recipe_number = 100; // consistent new numbers for each test diff --git a/cpp/011load b/cpp/011load index c111ba42..3ef1a409 100644 --- a/cpp/011load +++ b/cpp/011load @@ -24,7 +24,6 @@ vector add_recipes(istream& in) { // Command Handlers if (command == "recipe") { result.push_back(add_recipe(in)); - recipes_added_by_test.push_back(result.back()); } // End Command Handlers else { @@ -65,6 +64,8 @@ recipe_number add_recipe(istream& in) { } Recipe[r].name = recipe_name; //? cout << "recipe " << recipe_name << " has " << Recipe[r].steps.size() << " steps.\n"; //? 1 + // track added recipes because we may need to undo them in tests; see below + recently_added_recipes.push_back(r); return r; } @@ -187,6 +188,18 @@ void skip_comma(istream& in) { skip_whitespace(in); } +//: Recipes added for tests should be easy to remove as well. +:(before "End Globals") +vector recently_added_recipes; +:(before "End Setup") +for (size_t i = 0; i < recently_added_recipes.size(); ++i) { +//? cout << "AAA clearing " << Recipe[recently_added_recipes[i]].name << '\n'; //? 2 + Recipe_number.erase(Recipe[recently_added_recipes[i]].name); + Recipe.erase(recently_added_recipes[i]); +} +// Clear state for recently_added_recipes +recently_added_recipes.clear(); + :(scenario parse_comment_outside_recipe) # comment recipe main [ diff --git a/cpp/013run b/cpp/013run index 1ccbb3b3..134df75a 100644 --- a/cpp/013run +++ b/cpp/013run @@ -108,28 +108,19 @@ void load(string filename) { fin.close(); } -//: helper for tests +//: On startup, load everything in core.mu +:(before "End Load Recipes") +load("core.mu"); +recently_added_recipes.clear(); // Freeze everything so it doesn't get cleared by tests. -:(before "End Globals") -// track recipes added so that we can cleanup after each test -vector recipes_added_by_test; +//: helper for tests :(code) void run(string form) { vector tmp = add_recipes(form); - recipes_added_by_test.insert(recipes_added_by_test.end(), tmp.begin(), tmp.end()); transform_all(); - run(recipes_added_by_test.front()); -} - -:(before "End Setup") -for (size_t i = 0; i < recipes_added_by_test.size(); ++i) { -//? cout << "AAA clearing " << Recipe[recipes_added_by_test[i]].name << '\n'; //? 2 - Recipe_number.erase(Recipe[recipes_added_by_test[i]].name); - Recipe.erase(recipes_added_by_test[i]); + run(tmp.front()); } -// Clear state for recipes_added_by_test -recipes_added_by_test.clear(); :(code) vector read_memory(reagent x) { diff --git a/cpp/024brace b/cpp/024brace index 47dd5596..a0f4aa29 100644 --- a/cpp/024brace +++ b/cpp/024brace @@ -164,7 +164,6 @@ void transform_test(string form) { //? cout << "AAA transform_test {\n"; //? 1 vector tmp = add_recipes(form); //? cout << "AAA done adding recipes\n"; //? 1 - recipes_added_by_test.insert(recipes_added_by_test.end(), tmp.begin(), tmp.end()); transform_all(); //? cout << "AAA }\n"; //? 1 } diff --git a/cpp/025name b/cpp/025name index 0c36d5ca..62c07c85 100644 --- a/cpp/025name +++ b/cpp/025name @@ -25,9 +25,9 @@ Transform.push_back(transform_names); unordered_map > Name; :(before "End One-time Setup") Name.clear(); -:(before "Clear state for recipes_added_by_test") -for (size_t i = 0; i < recipes_added_by_test.size(); ++i) { - Name.erase(recipes_added_by_test[i]); +:(before "Clear state for recently_added_recipes") +for (size_t i = 0; i < recently_added_recipes.size(); ++i) { + Name.erase(recently_added_recipes[i]); } :(code) -- cgit 1.4.1-2-gfad0