Fix instruction execution counting

This commit is contained in:
momo5502
2024-10-26 10:06:02 +02:00
parent b6a8f9793e
commit 1021009296
5 changed files with 56 additions and 23 deletions

View File

@@ -8,12 +8,12 @@ namespace test
emu.logger.disable_output(true);
emu.start();
ASSER_TERMINATED_SUCCESSFULLY(emu);
ASSERT_TERMINATED_SUCCESSFULLY(emu);
}
TEST(EmulationTest, CountedEmulationWorks)
{
constexpr auto count = 123;
constexpr auto count = 200000;
windows_emulator emu{ "./test-sample.exe" };
emu.logger.disable_output(true);
@@ -21,4 +21,31 @@ namespace test
ASSERT_EQ(emu.process().executed_instructions, count);
}
TEST(EmulationTest, CountedEmulationIsAccurate)
{
windows_emulator emu{ "./test-sample.exe" };
emu.logger.disable_output(true);
emu.start();
ASSERT_TERMINATED_SUCCESSFULLY(emu);
const auto executedInstructions = emu.process().executed_instructions;
windows_emulator new_emu{ "./test-sample.exe" };
new_emu.logger.disable_output(true);
constexpr auto offset = 1;
const auto instructionsToExecute = executedInstructions - offset;
new_emu.start({}, instructionsToExecute);
ASSERT_EQ(new_emu.process().executed_instructions, instructionsToExecute);
ASSERT_NOT_TERMINATED(new_emu);
new_emu.start({}, offset);
ASSERT_TERMINATED_SUCCESSFULLY(new_emu);
ASSERT_EQ(new_emu.process().executed_instructions, executedInstructions);
}
}

View File

@@ -3,11 +3,17 @@
#include <gtest/gtest.h>
#include <windows_emulator.hpp>
#define ASSER_TERMINATED_WITH_STATUS(win_emu, status) \
#define ASSERT_NOT_TERMINATED(win_emu) \
do { \
ASSERT_FALSE(win_emu.process().exit_status.has_value()); \
} while(false)
#define ASSERT_TERMINATED_WITH_STATUS(win_emu, status) \
do { \
ASSERT_TRUE(win_emu.process().exit_status.has_value()); \
ASSERT_EQ(*win_emu.process().exit_status, status); \
} while(false)
} while(false)
#define ASSER_TERMINATED_SUCCESSFULLY(win_emu) \
ASSER_TERMINATED_WITH_STATUS(win_emu, STATUS_SUCCESS)
#define ASSERT_TERMINATED_SUCCESSFULLY(win_emu) \
ASSERT_TERMINATED_WITH_STATUS(win_emu, STATUS_SUCCESS)

View File

@@ -8,7 +8,7 @@ namespace test
emu1.logger.disable_output(true);
emu1.start();
ASSER_TERMINATED_SUCCESSFULLY(emu1);
ASSERT_TERMINATED_SUCCESSFULLY(emu1);
utils::buffer_serializer serializer1{};
emu1.serialize(serializer1);
@@ -33,7 +33,7 @@ namespace test
emu1.logger.disable_output(true);
emu1.start();
ASSER_TERMINATED_SUCCESSFULLY(emu1);
ASSERT_TERMINATED_SUCCESSFULLY(emu1);
utils::buffer_serializer serializer1{};
emu1.serialize(serializer1);
@@ -42,7 +42,7 @@ namespace test
emu2.logger.disable_output(true);
emu2.start();
ASSER_TERMINATED_SUCCESSFULLY(emu2);
ASSERT_TERMINATED_SUCCESSFULLY(emu2);
utils::buffer_serializer serializer2{};
emu2.serialize(serializer2);
@@ -66,10 +66,10 @@ namespace test
new_emu.deserialize(deserializer);
new_emu.start();
ASSER_TERMINATED_SUCCESSFULLY(new_emu);
ASSERT_TERMINATED_SUCCESSFULLY(new_emu);
emu.start();
ASSER_TERMINATED_SUCCESSFULLY(emu);
ASSERT_TERMINATED_SUCCESSFULLY(emu);
// TODO: Fix that :(
/*utils::buffer_serializer serializer1{};