Archived
1
Fork 0
This repository has been archived on 2025-04-12. You can view files and clone it, but cannot push or open issues or pull requests.
chip8/tests/test.cpp
2020-04-29 14:47:33 -04:00

178 lines
3.3 KiB
C++

#define DOCTEST_CONFIG_COLORS_NONE
#define DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN
#include "doctest.h"
#include "emu.hpp"
TEST_CASE("Test 0x1") {
state.reset();
process_opcode(0x1100);
CHECK(state.PC == 0x100);
}
TEST_CASE("Test 0x3") {
state.reset();
// set v[1] to 1
process_opcode(0x6101);
// should skip if v[1] == 1
process_opcode(0x3101);
CHECK(state.PC == 0x206);
// should not skip since v[1] != 2
process_opcode(0x3102);
CHECK(state.PC == 0x208);
}
TEST_CASE("Test 0x4") {
state.reset();
// set v[1] to 1
process_opcode(0x6101);
// should not skip since v[1] == 1
process_opcode(0x4101);
CHECK(state.PC == 0x204);
// should skip since v[1] != 2
process_opcode(0x4102);
CHECK(state.PC == 0x208);
}
TEST_CASE("Test 0x6") {
state.reset();
process_opcode(0x6199);
CHECK(state.v[1] == 0x99);
CHECK(state.PC == 0x202);
}
TEST_CASE("Test 0x7") {
state.reset();
// add 1 + 1
process_opcode(0x7101);
process_opcode(0x7101);
CHECK(state.v[1] == 0x02);
CHECK(state.PC == 0x204);
}
TEST_CASE("Test 0x8XY0") {
state.reset();
// set v[1] to 3
process_opcode(0x6103);
// set v[2] = 4
process_opcode(0x6204);
// set v[1] to v[2]
process_opcode(0x8120);
CHECK(state.v[1] == 0x04);
CHECK(state.PC == 0x206);
}
TEST_CASE("Test 0xA") {
state.reset();
process_opcode(0xABCD);
CHECK(state.I == 0xBCD);
CHECK(state.PC == 0x202);
}
// TODO: find a way to test this!!
TEST_CASE("Test 0xC") {
state.reset();
process_opcode(0xC122);
CHECK(state.PC == 0x202);
}
TEST_CASE("Test 0xFX07") {
state.reset();
state.delay_timer = 5;
process_opcode(0xF107);
CHECK(state.v[1] == 0x5);
CHECK(state.PC == 0x202);
}
TEST_CASE("Test 0xFX1E") {
SUBCASE("") {
state.reset();
state.I = 5;
// set v[1] to 5
process_opcode(0x6105);
process_opcode(0xF11E);
CHECK(state.I == 10);
CHECK(state.PC == 0x204);
}
SUBCASE("Overflow") {
state.reset();
state.I = 4095;
// set v[1] to 5
process_opcode(0x6125);
process_opcode(0xF11E);
CHECK(state.v[0xF] == 1);
CHECK(state.PC == 0x204);
}
}
TEST_CASE("Test 0x33") {
SUBCASE("Zero") {
state.reset();
process_opcode(0xF133);
CHECK(state.memory[state.I] == 0);
CHECK(state.PC == 0x202);
}
SUBCASE("Larger than Zero") {
state.reset();
// store 0x65 == 101
process_opcode(0x6165);
process_opcode(0xF133);
CHECK(state.memory[state.I] == 1);
CHECK(state.memory[state.I + 1] == 0);
CHECK(state.memory[state.I + 2] == 1);
CHECK(state.PC == 0x204);
}
}
TEST_CASE("Test 0x65") {
state.reset();
state.memory[state.I] = 0x1;
state.memory[state.I + 1] = 0x2;
state.memory[state.I + 2] = 0x3;
process_opcode(0xF265);
CHECK(state.v[0] == 0x1);
CHECK(state.v[1] == 0x2);
CHECK(state.v[2] == 0x3);
CHECK(state.PC == 0x202);
}