From 5feb36ff8f189f5aeedd9ec3c436a3c5d90972ca Mon Sep 17 00:00:00 2001 From: "Kartik K. Agaram" Date: Thu, 21 May 2015 18:10:17 -0700 Subject: 1416 --- 003trace.cc | 37 ++++++++++++++++++++++--------------- 010vm.cc | 2 ++ 050scenario.cc | 24 ++++++++++++------------ 3 files changed, 36 insertions(+), 27 deletions(-) diff --git a/003trace.cc b/003trace.cc index a208f21d..5fd156b3 100644 --- a/003trace.cc +++ b/003trace.cc @@ -86,9 +86,16 @@ bool Hide_warnings = false; //? cerr << "AAA setup\n"; //? 2 Hide_warnings = false; +:(before "End Types") +struct trace_line { + string label; + string contents; + trace_line(string l, string c) :label(l), contents(c) {} +}; + :(before "End Tracing") struct trace_stream { - vector > past_lines; // [(layer label, line)] + vector past_lines; // accumulator for current line ostringstream* curr_stream; string curr_layer; @@ -107,7 +114,7 @@ struct trace_stream { void newline() { if (!curr_stream) return; string curr_contents = curr_stream->str(); - past_lines.push_back(pair(trim(curr_layer), curr_contents)); // preserve indent in contents + past_lines.push_back(trace_line(trim(curr_layer), curr_contents)); // preserve indent in contents if (curr_layer == dump_layer || curr_layer == "dump" || dump_layer == "all" || (!Hide_warnings && curr_layer == "warn")) //? if (dump_layer == "all" && (Current_routine->id == 3 || curr_layer == "schedule")) //? 1 @@ -121,9 +128,10 @@ struct trace_stream { newline(); ostringstream output; layer = trim(layer); - for (vector >::iterator p = past_lines.begin(); p != past_lines.end(); ++p) - if (layer.empty() || layer == p->first) - output << p->first << ": " << p->second << '\n'; + for (vector::iterator p = past_lines.begin(); p != past_lines.end(); ++p) + if (layer.empty() || layer == p->label) { + output << p->label << ": " << p->contents << '\n'; + } return output.str(); } }; @@ -196,13 +204,13 @@ bool check_trace_contents(string FUNCTION, string FILE, int LINE, string expecte Trace_stream->newline(); string layer, contents; split_layer_contents(expected_lines.at(curr_expected_line), &layer, &contents); - for (vector >::iterator p = Trace_stream->past_lines.begin(); p != Trace_stream->past_lines.end(); ++p) { -//? cerr << "AAA " << layer << ' ' << p->first << '\n'; //? 1 - if (layer != p->first) + for (vector::iterator p = Trace_stream->past_lines.begin(); p != Trace_stream->past_lines.end(); ++p) { +//? cerr << "AAA " << layer << ' ' << p->label << '\n'; //? 1 + if (layer != p->label) continue; -//? cerr << "BBB ^" << contents << "$ ^" << p->second << "$\n"; //? 1 - if (contents != trim(p->second)) +//? cerr << "BBB ^" << contents << "$ ^" << p->contents << "$\n"; //? 1 + if (contents != trim(p->contents)) continue; //? cerr << "CCC\n"; //? 1 @@ -243,9 +251,9 @@ int trace_count(string layer) { int trace_count(string layer, string line) { Trace_stream->newline(); long result = 0; - for (vector >::iterator p = Trace_stream->past_lines.begin(); p != Trace_stream->past_lines.end(); ++p) { - if (p->first == layer) - if (line == "" || p->second == line) + for (vector::iterator p = Trace_stream->past_lines.begin(); p != Trace_stream->past_lines.end(); ++p) { + if (layer == p->label) + if (line == "" || line == p->contents) ++result; } return result; @@ -307,8 +315,6 @@ string trim(const string& s) { using std::vector; #include using std::list; -#include -using std::pair; #include using std::map; #include @@ -321,6 +327,7 @@ using std::ostream; using std::cin; using std::cout; using std::cerr; +#include #include using std::istringstream; diff --git a/010vm.cc b/010vm.cc index 3cb3f413..ffc92c60 100644 --- a/010vm.cc +++ b/010vm.cc @@ -258,3 +258,5 @@ void dump_memory() { :(before "End Includes") #include using std::map; +#include +using std::pair; diff --git a/050scenario.cc b/050scenario.cc index 86e43a85..ba5aa755 100644 --- a/050scenario.cc +++ b/050scenario.cc @@ -336,13 +336,13 @@ case TRACE_SHOULD_CONTAIN: { bool check_trace(const string& expected) { //? cerr << "AAA " << expected << '\n'; //? 1 Trace_stream->newline(); - vector > expected_lines = parse_trace(expected); + vector expected_lines = parse_trace(expected); //? cerr << "BBB " << SIZE(expected_lines) << '\n'; //? 1 if (expected_lines.empty()) return true; long long int curr_expected_line = 0; - for (vector >::iterator p = Trace_stream->past_lines.begin(); p != Trace_stream->past_lines.end(); ++p) { - if (expected_lines.at(curr_expected_line).first != p->first) continue; - if (expected_lines.at(curr_expected_line).second != p->second) continue; + for (vector::iterator p = Trace_stream->past_lines.begin(); p != Trace_stream->past_lines.end(); ++p) { + if (expected_lines.at(curr_expected_line).label != p->label) continue; + if (expected_lines.at(curr_expected_line).contents != trim(p->contents)) continue; // match ++curr_expected_line; if (curr_expected_line == SIZE(expected_lines)) { @@ -351,20 +351,20 @@ bool check_trace(const string& expected) { } } - raise << "missing [" << expected_lines.at(curr_expected_line).second << "] " - << "in trace layer " << expected_lines.at(curr_expected_line).first << '\n'; + raise << "missing [" << expected_lines.at(curr_expected_line).contents << "] " + << "in trace layer " << expected_lines.at(curr_expected_line).label << '\n'; Passed = false; return false; } -vector > parse_trace(const string& expected) { +vector parse_trace(const string& expected) { vector buf = split(expected, "\n"); - vector > result; + vector result; for (long long int i = 0; i < SIZE(buf); ++i) { buf.at(i) = trim(buf.at(i)); if (buf.at(i).empty()) continue; long long int delim = buf.at(i).find(": "); - result.push_back(pair(buf.at(i).substr(0, delim), buf.at(i).substr(delim+2))); + result.push_back(trace_line(trim(buf.at(i).substr(0, delim)), trim(buf.at(i).substr(delim+2)))); } return result; } @@ -425,10 +425,10 @@ case TRACE_SHOULD_NOT_CONTAIN: { // than just printing to stderr bool check_trace_missing(const string& in) { Trace_stream->newline(); - vector > lines = parse_trace(in); + vector lines = parse_trace(in); for (long long int i = 0; i < SIZE(lines); ++i) { - if (trace_count(lines.at(i).first, lines.at(i).second) != 0) { - raise << "unexpected [" << lines.at(i).second << "] in trace layer " << lines.at(i).first << '\n'; + if (trace_count(lines.at(i).label, lines.at(i).contents) != 0) { + raise << "unexpected [" << lines.at(i).contents << "] in trace layer " << lines.at(i).label << '\n'; Passed = false; return false; } -- cgit 1.4.1-2-gfad0