summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorbd <bdunahu@operationnull.com>2025-03-30 19:55:57 -0400
committerbd <bdunahu@operationnull.com>2025-03-30 19:55:57 -0400
commitea5ce07be45c1a2d953e44ac122fbc96d18fc658 (patch)
treecf9833dbdcb5c50d72076cb6f8e4a9bdb3994c83 /tests
parentebeb29d1b87c533c1e80e86ceed9ddc40e4d2cb2 (diff)
All I-type instructions
Diffstat (limited to 'tests')
-rw-r--r--tests/ex.cc198
1 files changed, 193 insertions, 5 deletions
diff --git a/tests/ex.cc b/tests/ex.cc
index d5920d2..29c5fbc 100644
--- a/tests/ex.cc
+++ b/tests/ex.cc
@@ -45,11 +45,6 @@ class EXFixture
Controller *ct;
};
-std::unordered_map<Mnemonic, signed int> results = {
- {ADD, 42},
- {SUB, 83958},
-};
-
TEST_CASE_METHOD(EXFixture, "ADD within bounds", "[ex]")
{
signed int s1 = 0, s2 = 0;
@@ -423,3 +418,196 @@ TEST_CASE_METHOD(EXFixture, "CMP greater", "[ex]")
// TEST_CASE_METHOD(EXFixture, "CEQ greater", "[ex]")
// {
// }
+
+TEST_CASE_METHOD(EXFixture, "LOAD", "[ex]")
+{
+ signed int s1 = 0, s2 = 0;
+ Mnemonic m;
+ InstrDTO *i;
+
+ m = LOAD;
+ s1 = 42000, s2 = -41958;
+ i = execute_instr(s1, s2, m);
+
+ CHECK(i->get_s1() == 42);
+ CHECK(!ct->get_condition(OF));
+ CHECK(!ct->get_condition(UF));
+
+ delete i;
+}
+
+// TEST_CASE_METHOD(EXFixture, "LOADV", "[ex]")
+// {
+// }
+
+TEST_CASE_METHOD(EXFixture, "ADDI within bounds", "[ex]")
+{
+ signed int s1 = 0, s2 = 0;
+ Mnemonic m;
+ InstrDTO *i;
+
+ m = ADDI;
+ s1 = 42000, s2 = -41958;
+ i = execute_instr(s1, s2, m);
+
+ CHECK(i->get_s1() == 42);
+ CHECK(!ct->get_condition(OF));
+ CHECK(!ct->get_condition(UF));
+
+ delete i;
+}
+
+// TEST_CASE_METHOD(EXFixture, "ADDI overflow", "[ex]")
+// {
+// }
+
+// TEST_CASE_METHOD(EXFixture, "ADDI underflow", "[ex]")
+// {
+// }
+
+TEST_CASE_METHOD(EXFixture, "SUBI within bounds", "[ex]")
+{
+ signed int s1 = 0, s2 = 0;
+ Mnemonic m;
+ InstrDTO *i;
+
+ m = SUBI;
+ s1 = 200, s2 = 131;
+ i = execute_instr(s1, s2, m);
+
+ CHECK(i->get_s1() == 69);
+ CHECK(!ct->get_condition(OF));
+ CHECK(!ct->get_condition(UF));
+
+ delete i;
+}
+
+// TEST_CASE_METHOD(EXFixture, "SUBI overflow", "[ex]")
+// {
+// }
+
+// TEST_CASE_METHOD(EXFixture, "SUBI underflow", "[ex]")
+// {
+// }
+
+TEST_CASE_METHOD(EXFixture, "SFTRI within bounds", "[ex]")
+{
+ signed int s1 = 0, s2 = 0;
+ Mnemonic m;
+ InstrDTO *i;
+
+ m = SFTRI;
+ s1 = 1300, s2 = 6;
+ i = execute_instr(s1, s2, m);
+
+ CHECK(i->get_s1() == 20);
+ CHECK(!ct->get_condition(OF));
+ CHECK(!ct->get_condition(UF));
+
+ delete i;
+}
+
+// TEST_CASE_METHOD(EXFixture, "SFTRI overflow", "[ex]")
+// {
+// }
+
+// TEST_CASE_METHOD(EXFixture, "SFTRI underflow", "[ex]")
+// {
+// }
+
+TEST_CASE_METHOD(EXFixture, "SFTLI within bounds", "[ex]")
+{
+ signed int s1 = 0, s2 = 0;
+ Mnemonic m;
+ InstrDTO *i;
+
+ m = SFTLI;
+ s1 = 13, s2 = 6;
+ i = execute_instr(s1, s2, m);
+
+ CHECK(i->get_s1() == 832);
+ CHECK(!ct->get_condition(OF));
+ CHECK(!ct->get_condition(UF));
+
+ delete i;
+}
+
+// TEST_CASE_METHOD(EXFixture, "SFTLI overflow", "[ex]")
+// {
+// }
+
+// TEST_CASE_METHOD(EXFixture, "SFTLI underflow", "[ex]")
+// {
+// }
+
+TEST_CASE_METHOD(EXFixture, "ANDI", "[ex]")
+{
+ signed int s1 = 0, s2 = 0;
+ Mnemonic m;
+ InstrDTO *i;
+
+ m = ANDI;
+ s1 = 1234, s2 = 5678;
+ i = execute_instr(s1, s2, m);
+
+ CHECK(i->get_s1() == 1026);
+ CHECK(!ct->get_condition(OF));
+ CHECK(!ct->get_condition(UF));
+
+ delete i;
+}
+
+TEST_CASE_METHOD(EXFixture, "ORI", "[ex]")
+{
+ signed int s1 = 0, s2 = 0;
+ Mnemonic m;
+ InstrDTO *i;
+
+ m = ORI;
+ s1 = 1234, s2 = 5678;
+ i = execute_instr(s1, s2, m);
+
+ CHECK(i->get_s1() == 5886);
+ CHECK(!ct->get_condition(OF));
+ CHECK(!ct->get_condition(UF));
+
+ delete i;
+}
+
+TEST_CASE_METHOD(EXFixture, "XORI", "[ex]")
+{
+ signed int s1 = 0, s2 = 0;
+ Mnemonic m;
+ InstrDTO *i;
+
+ m = XORI;
+ s1 = 1234, s2 = 5678;
+ i = execute_instr(s1, s2, m);
+
+ CHECK(i->get_s1() == 4860);
+ CHECK(!ct->get_condition(OF));
+ CHECK(!ct->get_condition(UF));
+
+ delete i;
+}
+
+TEST_CASE_METHOD(EXFixture, "STORE", "[ex]")
+{
+ signed int s1 = 0, s2 = 0;
+ Mnemonic m;
+ InstrDTO *i;
+
+ m = LOAD;
+ s1 = 42000, s2 = -41958;
+ i = execute_instr(s1, s2, m);
+
+ CHECK(i->get_s1() == 42);
+ CHECK(!ct->get_condition(OF));
+ CHECK(!ct->get_condition(UF));
+
+ delete i;
+}
+
+// TEST_CASE_METHOD(EXFixture, "STOREV", "[ex]")
+// {
+// }