[PPC] Prettier printing for failed memory checks.

[PPC] Prettier printing for failed memory checks in tests.
This commit is contained in:
gibbed 2020-02-24 18:08:06 -06:00 committed by Rick Gibbed
parent a48bb71c2f
commit 37e576e648
1 changed files with 16 additions and 3 deletions

View File

@ -12,6 +12,7 @@
#include "xenia/base/main.h" #include "xenia/base/main.h"
#include "xenia/base/math.h" #include "xenia/base/math.h"
#include "xenia/base/platform.h" #include "xenia/base/platform.h"
#include "xenia/base/string_buffer.h"
#include "xenia/cpu/backend/x64/x64_backend.h" #include "xenia/cpu/backend/x64/x64_backend.h"
#include "xenia/cpu/cpu_flags.h" #include "xenia/cpu/cpu_flags.h"
#include "xenia/cpu/ppc/ppc_context.h" #include "xenia/cpu/ppc/ppc_context.h"
@ -325,6 +326,10 @@ class TestRunner {
auto base_address = memory_->TranslateVirtual(address); auto base_address = memory_->TranslateVirtual(address);
auto p = base_address; auto p = base_address;
const char* c = bytes_str.c_str(); const char* c = bytes_str.c_str();
bool failed = false;
size_t count = 0;
StringBuffer expecteds;
StringBuffer actuals;
while (*c) { while (*c) {
while (*c == ' ') ++c; while (*c == ' ') ++c;
if (!*c) { if (!*c) {
@ -332,18 +337,26 @@ class TestRunner {
} }
char ccs[3] = {c[0], c[1], 0}; char ccs[3] = {c[0], c[1], 0};
c += 2; c += 2;
count++;
uint32_t current_address = uint32_t current_address =
address + static_cast<uint32_t>(p - base_address); address + static_cast<uint32_t>(p - base_address);
uint32_t expected = std::strtoul(ccs, nullptr, 16); uint32_t expected = std::strtoul(ccs, nullptr, 16);
uint8_t actual = *p; uint8_t actual = *p;
expecteds.AppendFormat(" %02X", expected);
actuals.AppendFormat(" %02X", actual);
if (expected != actual) { if (expected != actual) {
any_failed = true; any_failed = true;
XELOGE("Memory {} assert failed:\n", address_str); failed = true;
XELOGE(" Expected: {:08X} {:02X}\n", current_address, expected);
XELOGE(" Actual: {:08X} {:02X}\n", current_address, actual);
} }
++p; ++p;
} }
if (failed) {
XELOGE("Memory {} assert failed:\n", address_str);
XELOGE(" Expected:{}\n", expecteds.to_string());
XELOGE(" Actual:{}\n", actuals.to_string());
}
} }
} }
return !any_failed; return !any_failed;