diff options
author | Kartik K. Agaram <vc@akkartik.com> | 2015-06-22 21:16:31 -0700 |
---|---|---|
committer | Kartik K. Agaram <vc@akkartik.com> | 2015-06-22 21:16:31 -0700 |
commit | 2c7e84c2bc3abd87090bd8f73ce5d6ec8ce19c9e (patch) | |
tree | c97203f0d8a64a38293f4b06c35970c30d6f98fa | |
parent | c49efefc235e2cf91a44f4459b67ad780dd3bb1f (diff) | |
download | mu-2c7e84c2bc3abd87090bd8f73ce5d6ec8ce19c9e.tar.gz |
1620
chessboard finally passing all its tests. What made this hard was that for some reason one of the background routines in the main chessboard test wasn't terminating like it used to. And so it was polluting *later* tests. Just clean up that source of contamination for now. Later we'll think about routine termination.
-rw-r--r-- | 020run.cc | 11 | ||||
-rw-r--r-- | 038scheduler.cc | 1 | ||||
-rw-r--r-- | 050scenario.cc | 4 | ||||
-rw-r--r-- | chessboard.mu | 23 |
4 files changed, 28 insertions, 11 deletions
diff --git a/020run.cc b/020run.cc index cf4cab0c..2c069576 100644 --- a/020run.cc +++ b/020run.cc @@ -54,7 +54,7 @@ void run(recipe_number r) { void run_current_routine() { // curly on a separate line, because later layers will modify header -//? cerr << "AAA 6\n"; //? 2 +//? cerr << "AAA 6\n"; //? 3 while (!Current_routine->completed()) // later layers will modify condition { //? cerr << "AAA 7: " << current_step_index() << '\n'; //? 1 @@ -92,7 +92,7 @@ void run_current_routine() // End of Instruction ++current_step_index(); } -//? cerr << "AAA 9\n"; //? 1 +//? cerr << "AAA 9\n"; //? 2 stop_running_current_routine:; } @@ -164,13 +164,14 @@ load_permanently("core.mu"); :(code) // helper for tests void run(string form) { -//? cerr << "AAA 2\n"; //? 1 +//? cerr << "AAA 2\n"; //? 2 +//? cerr << form << '\n'; //? 1 vector<recipe_number> tmp = load(form); if (tmp.empty()) return; transform_all(); -//? cerr << "AAA 3\n"; //? 1 +//? cerr << "AAA 3\n"; //? 2 run(tmp.front()); -//? cerr << "YYY\n"; //? 1 +//? cerr << "YYY\n"; //? 2 } //:: Reading from memory, writing to memory. diff --git a/038scheduler.cc b/038scheduler.cc index 01eeb27b..0857fe58 100644 --- a/038scheduler.cc +++ b/038scheduler.cc @@ -44,6 +44,7 @@ long long int Current_routine_index = 0; long long int Scheduling_interval = 500; :(before "End Setup") Scheduling_interval = 500; +Routines.clear(); :(replace{} "void run(recipe_number r)") void run(recipe_number r) { //? cerr << "AAA 4\n"; //? 1 diff --git a/050scenario.cc b/050scenario.cc index fd59bf44..4a2384bf 100644 --- a/050scenario.cc +++ b/050scenario.cc @@ -132,14 +132,16 @@ const scenario* Current_scenario = NULL; void run_mu_scenario(const scenario& s) { Current_scenario = &s; bool not_already_inside_test = !Trace_stream; -//? cerr << s.name << '\n'; //? 1 +//? cerr << s.name << '\n'; //? 3 if (not_already_inside_test) { Trace_file = s.name; Trace_stream = new trace_stream; setup(); } //? cerr << '^' << s.to_run << "$\n"; //? 4 + assert(Routines.empty()); run("recipe "+s.name+" [ " + s.to_run + " ]"); +//? cerr << s.name << " done\n"; //? 1 if (not_already_inside_test && Trace_stream) { teardown(); ofstream fout((Trace_dir+Trace_file).c_str()); diff --git a/chessboard.mu b/chessboard.mu index c5f7ed4f..da0cd93f 100644 --- a/chessboard.mu +++ b/chessboard.mu @@ -29,10 +29,12 @@ scenario print-board-and-read-move [ # we'll make the screen really wide because the program currently prints out a long line assume-screen 120:literal/width, 20:literal/height # initialize keyboard to type in a move - assume-keyboard [a2-a4 + assume-console [ + type [a2-a4 ] + ] run [ - screen:address, keyboard:address <- chessboard screen:address, keyboard:address + screen:address, console:address <- chessboard screen:address, console:address #? $browse-trace #? 1 #? $close-trace #? 1 # icon for the cursor @@ -64,6 +66,17 @@ scenario print-board-and-read-move [ ] ] +#? scenario foo [ #? 1 +#? $print [aaa] #? 1 +#? run [ #? 1 +#? 1:number <- copy 34:literal #? 1 +#? ] #? 1 +#? memory-should-contain [ #? 1 +#? 1 <- 34 #? 1 +#? ] #? 1 +#? $print [zzz] #? 1 +#? ] #? 1 + ## Here's how 'chessboard' is implemented. recipe chessboard [ @@ -71,13 +84,13 @@ recipe chessboard [ #? $start-tracing #? 1 default-space:address:array:location <- new location:type, 30:literal screen:address <- next-ingredient - keyboard:address <- next-ingredient -#? $print [screen: ], screen:address, [, keyboard: ], keyboard:address, [ + console:address <- next-ingredient +#? $print [screen: ], screen:address, [, console: ], console:address, [ #? ] #? 1 board:address:array:address:array:character <- initial-position # hook up stdin stdin:address:channel <- new-channel 10:literal/capacity - start-running send-keys-to-channel:recipe, keyboard:address, stdin:address:channel, screen:address + start-running send-keys-to-channel:recipe, console:address, stdin:address:channel, screen:address # buffer lines in stdin buffered-stdin:address:channel <- new-channel 10:literal/capacity start-running buffer-lines:recipe, stdin:address:channel, buffered-stdin:address:channel |