mirror of
https://github.com/MoleskiCoder/EightBit.git
synced 2024-12-23 00:29:47 +00:00
Performance: speed up message handling in TestRunner.
Signed-off-by: Adrian Conlon <adrian.conlon@gmail.com>
This commit is contained in:
parent
5686906583
commit
db106b1719
@ -39,35 +39,49 @@ void TestRunner::initialise() {
|
|||||||
WrittenByte.connect([this](EightBit::EventArgs&) {
|
WrittenByte.connect([this](EightBit::EventArgs&) {
|
||||||
addActualEvent(test_t::action::write, ADDRESS().word, DATA());
|
addActualEvent(test_t::action::write, ADDRESS().word, DATA());
|
||||||
});
|
});
|
||||||
|
|
||||||
|
os() << std::hex << std::uppercase << std::setfill('0');
|
||||||
}
|
}
|
||||||
|
|
||||||
void TestRunner::raise(std::string what, uint16_t expected, uint16_t actual) {
|
void TestRunner::raise(std::string what, uint16_t expected, uint16_t actual) {
|
||||||
std::ostringstream os;
|
os()
|
||||||
os
|
<< std::setw(4)
|
||||||
<< what
|
<< what
|
||||||
<< ": expected: " << EightBit::Disassembly::dump_WordValue(expected)
|
<< ": expected: " << (int)expected
|
||||||
<< ", actual: " << EightBit::Disassembly::dump_WordValue(actual);
|
<< ", actual: " << (int)actual;
|
||||||
m_messages.push_back(os.str());
|
m_messages.push_back(os().str());
|
||||||
|
os().str("");
|
||||||
}
|
}
|
||||||
|
|
||||||
void TestRunner::raise(std::string what, uint8_t expected, uint8_t actual) {
|
void TestRunner::raise(std::string what, uint8_t expected, uint8_t actual) {
|
||||||
std::ostringstream os;
|
os()
|
||||||
os
|
<< std::setw(2)
|
||||||
<< what
|
<< what
|
||||||
<< ": expected: " << EightBit::Disassembly::dump_ByteValue(expected)
|
<< ": expected: " << (int)expected
|
||||||
<< "(" << EightBit::Disassembly::dump_Flags(expected) << ")"
|
<< "(" << EightBit::Disassembly::dump_Flags(expected) << ")"
|
||||||
<< ", actual: " << EightBit::Disassembly::dump_ByteValue(actual)
|
<< ", actual: " << (int)actual
|
||||||
<< "(" << EightBit::Disassembly::dump_Flags(actual) << ")";
|
<< "(" << EightBit::Disassembly::dump_Flags(actual) << ")";
|
||||||
m_messages.push_back(os.str());
|
m_messages.push_back(os().str());
|
||||||
|
os().str("");
|
||||||
}
|
}
|
||||||
|
|
||||||
void TestRunner::raise(std::string what, test_t::action expected, test_t::action actual) {
|
void TestRunner::raise(std::string what, test_t::action expected, test_t::action actual) {
|
||||||
std::ostringstream os;
|
os()
|
||||||
os
|
|
||||||
<< what
|
<< what
|
||||||
<< ": expected: " << test_t::to_string(expected)
|
<< ": expected: " << test_t::to_string(expected)
|
||||||
<< ", actual: " << test_t::to_string(actual);
|
<< ", actual: " << test_t::to_string(actual);
|
||||||
m_messages.push_back(os.str());
|
m_messages.push_back(os().str());
|
||||||
|
os().str("");
|
||||||
|
}
|
||||||
|
|
||||||
|
bool TestRunner::check(std::string what, uint16_t address, uint8_t expected, uint8_t actual) {
|
||||||
|
const auto success = actual == expected;
|
||||||
|
if (!success) {
|
||||||
|
os() << what << ": " << std::setw(4) << (int)address;
|
||||||
|
raise(os().str(), expected, actual);
|
||||||
|
os().str("");
|
||||||
|
}
|
||||||
|
return success;
|
||||||
}
|
}
|
||||||
|
|
||||||
void TestRunner::initialiseState() {
|
void TestRunner::initialiseState() {
|
||||||
@ -120,7 +134,7 @@ bool TestRunner::checkState() {
|
|||||||
bool ram_problem = false;
|
bool ram_problem = false;
|
||||||
for (const auto& entry : ram) {
|
for (const auto& entry : ram) {
|
||||||
const auto [address, value] = entry;
|
const auto [address, value] = entry;
|
||||||
const auto ram_good = check("RAM: " + EightBit::Disassembly::dump_WordValue(address), value, RAM().peek(address));
|
const auto ram_good = check("RAM", address, value, RAM().peek(address));
|
||||||
if (!ram_good && !ram_problem)
|
if (!ram_good && !ram_problem)
|
||||||
ram_problem = true;
|
ram_problem = true;
|
||||||
}
|
}
|
||||||
|
@ -15,6 +15,8 @@ private:
|
|||||||
EightBit::Ram m_ram = 0x10000;
|
EightBit::Ram m_ram = 0x10000;
|
||||||
EightBit::MOS6502 m_cpu = { *this };
|
EightBit::MOS6502 m_cpu = { *this };
|
||||||
const test_t& m_test;
|
const test_t& m_test;
|
||||||
|
|
||||||
|
std::ostringstream m_os;
|
||||||
std::vector<std::string> m_messages;
|
std::vector<std::string> m_messages;
|
||||||
|
|
||||||
test_t::events_t m_actualEvents;
|
test_t::events_t m_actualEvents;
|
||||||
@ -28,15 +30,20 @@ private:
|
|||||||
void raise(std::string what, test_t::action expected, test_t::action actual);
|
void raise(std::string what, test_t::action expected, test_t::action actual);
|
||||||
|
|
||||||
template<class T>
|
template<class T>
|
||||||
[[nodiscard]] bool check(std::string what, T expected, T actual) {
|
bool check(std::string what, T expected, T actual) {
|
||||||
const auto success = actual == expected;
|
const auto success = actual == expected;
|
||||||
if (!success)
|
if (!success)
|
||||||
raise(what, expected, actual);
|
raise(what, expected, actual);
|
||||||
return success;
|
return success;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool check(std::string what, uint16_t address, uint8_t expected, uint8_t actual);
|
||||||
|
|
||||||
|
|
||||||
void addActualEvent(test_t::action action, uint16_t address, uint8_t value);
|
void addActualEvent(test_t::action action, uint16_t address, uint8_t value);
|
||||||
|
|
||||||
|
[[nodiscard]] auto& os() { return m_os; }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual EightBit::MemoryMapping mapping(uint16_t address) noexcept final;
|
virtual EightBit::MemoryMapping mapping(uint16_t address) noexcept final;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user