diff options
author | Kartik K. Agaram <vc@akkartik.com> | 2015-04-20 22:20:39 -0700 |
---|---|---|
committer | Kartik K. Agaram <vc@akkartik.com> | 2015-04-20 22:20:39 -0700 |
commit | d9cd13ad40db3f7cdf5dbb8c55af7b5aafc9c32f (patch) | |
tree | 898fd0ae01e6bd0990921da7cea680e2ad87dfe0 /cpp/050scenario | |
parent | ec961781d0dd952384d08639b74f4b5a14942259 (diff) | |
download | mu-d9cd13ad40db3f7cdf5dbb8c55af7b5aafc9c32f.tar.gz |
1116 - simpler memory checks
Diffstat (limited to 'cpp/050scenario')
-rw-r--r-- | cpp/050scenario | 33 |
1 files changed, 32 insertions, 1 deletions
diff --git a/cpp/050scenario b/cpp/050scenario index ff2a43dc..16949048 100644 --- a/cpp/050scenario +++ b/cpp/050scenario @@ -31,6 +31,7 @@ for (size_t i = 0; i < Scenarios.size(); ++i) { p != Scenarios[i].memory_expectations.end(); ++p) { if (Memory[p->first] != p->second) { + // todo: unit tests for the test parsing infrastructure; use raise? cerr << Scenarios[i].name << ": Expected location " << p->first << " to contain " << p->second << " but saw " << Memory[p->first] << '\n'; Passed = false; } @@ -129,7 +130,12 @@ void handle_scenario_memory_directive(istream& in, scenario& out) { if (in.eof()) break; //? cout << "a: " << in.peek() << '\n'; //? 1 if (in.peek() == ']') break; - int address = 0; in >> address; + string lhs = next_word(in); + if (!is_number(lhs)) { + handle_type(lhs, in, out); + continue; + } + int address = to_int(lhs); //? cout << "address: " << address << '\n'; //? 2 //? cout << "b: " << in.peek() << '\n'; //? 1 skip_whitespace_and_comments(in); @@ -146,6 +152,31 @@ void handle_scenario_memory_directive(istream& in, scenario& out) { assert(in.get() == ']'); } +void handle_type(const string& lhs, istream& in, scenario& out) { + reagent x(lhs); + if (x.properties[0].second[0] == "string") { + x.set_value(to_int(x.name)); +//? cerr << x.name << ' ' << x.value << '\n'; //? 1 + skip_whitespace_and_comments(in); + string _assign = next_word(in); +//? cerr << _assign << '\n'; //? 1 + assert(_assign == "<-"); + skip_whitespace_and_comments(in); + string literal = next_word(in); +//? cerr << literal << '\n'; //? 1 + size_t address = x.value; + out.memory_expectations[address] = literal.size()-2; // exclude quoting brackets + ++address; + for (size_t i = 1; i < literal.size()-1; ++i) { +//? cerr << "checking " << address << ": " << literal[i] << '\n'; //? 1 + out.memory_expectations[address] = literal[i]; + ++address; + } + return; + } + raise << "scenario doesn't know how to parse memory expectation on " << lhs << '\n'; +} + void slurp_until_matching_bracket(istream& in, ostream& out) { int brace_depth = 1; // just scanned '[' char c; |