summaryrefslogtreecommitdiff
path: root/tests/ex.cc
diff options
context:
space:
mode:
authorbd <bdunaisky@umass.edu>2025-04-02 04:05:18 +0000
committerGitHub <noreply@github.com>2025-04-02 04:05:18 +0000
commit9fb95d655393777dde5929182f94de36f903821d (patch)
tree4462f35895737460a01fab891a15f87aba2efb70 /tests/ex.cc
parent24f0bd8af57381ab3112b5774d4ad23ac80f0718 (diff)
parent3eeb345d673bee6d62b04fc8a8a95ab822dc1e45 (diff)
Merge pull request #46 from bdunahu/bdunahu
Ensure all stages only do work if they are not 'OK'
Diffstat (limited to 'tests/ex.cc')
-rw-r--r--tests/ex.cc95
1 files changed, 73 insertions, 22 deletions
diff --git a/tests/ex.cc b/tests/ex.cc
index 9543c66..13437f7 100644
--- a/tests/ex.cc
+++ b/tests/ex.cc
@@ -33,9 +33,9 @@ class EXFixture
i->set_mnemonic(m);
this->dum->set_curr_instr(i);
- i = this->ct->advance(OK);
+ i = this->ct->advance(WAIT);
REQUIRE(i == nullptr);
- i = this->ct->advance(OK);
+ i = this->ct->advance(WAIT);
REQUIRE(i != nullptr);
return i;
@@ -640,8 +640,7 @@ TEST_CASE_METHOD(EXFixture, "JRL", "[ex]")
InstrDTO *i;
m = JRL;
- s1 = 100, s2 = -42027, s3 = 0;
- this->ct->set_pc(42096);
+ s1 = 100, s2 = 69, s3 = 0;
i = execute_instr(s1, s2, s3, m);
CHECK(i->get_s1() == 69);
@@ -668,6 +667,21 @@ TEST_CASE_METHOD(EXFixture, "JAL", "[ex]")
delete i;
}
+TEST_CASE_METHOD(EXFixture, "BEQ no cond", "[ex]")
+{
+ signed int s1, s2, s3;
+ Mnemonic m;
+ InstrDTO *i;
+
+ m = BEQ;
+ s1 = 100, s2 = 50, s3 = 0;
+ i = execute_instr(s1, s2, s3, m);
+
+ CHECK(i->get_s1() == -1);
+
+ delete i;
+}
+
TEST_CASE_METHOD(EXFixture, "BEQ", "[ex]")
{
signed int s1, s2, s3;
@@ -675,13 +689,26 @@ TEST_CASE_METHOD(EXFixture, "BEQ", "[ex]")
InstrDTO *i;
m = BEQ;
- s1 = 100, s2 = -42027, s3 = 0;
- this->ct->set_pc(42096);
+ s1 = 100, s2 = 50, s3 = 0;
+ this->ct->set_condition(EQ, true);
i = execute_instr(s1, s2, s3, m);
- CHECK(i->get_s1() == 69);
- CHECK(!ct->get_condition(OF));
- CHECK(!ct->get_condition(UF));
+ CHECK(i->get_s1() == 50);
+
+ delete i;
+}
+
+TEST_CASE_METHOD(EXFixture, "BGT no cond", "[ex]")
+{
+ signed int s1, s2, s3;
+ Mnemonic m;
+ InstrDTO *i;
+
+ m = BGT;
+ s1 = 100, s2 = 50, s3 = 0;
+ i = execute_instr(s1, s2, s3, m);
+
+ CHECK(i->get_s1() == -1);
delete i;
}
@@ -693,13 +720,26 @@ TEST_CASE_METHOD(EXFixture, "BGT", "[ex]")
InstrDTO *i;
m = BGT;
+ s1 = 100, s2 = 50, s3 = 0;
+ this->ct->set_condition(GT, true);
+ i = execute_instr(s1, s2, s3, m);
+
+ CHECK(i->get_s1() == 50);
+
+ delete i;
+}
+
+TEST_CASE_METHOD(EXFixture, "BUF no cond", "[ex]")
+{
+ signed int s1, s2, s3;
+ Mnemonic m;
+ InstrDTO *i;
+
+ m = BUF;
s1 = 100, s2 = -42027, s3 = 0;
- this->ct->set_pc(42096);
i = execute_instr(s1, s2, s3, m);
- CHECK(i->get_s1() == 69);
- CHECK(!ct->get_condition(OF));
- CHECK(!ct->get_condition(UF));
+ CHECK(i->get_s1() == -1);
delete i;
}
@@ -711,13 +751,26 @@ TEST_CASE_METHOD(EXFixture, "BUF", "[ex]")
InstrDTO *i;
m = BUF;
+ s1 = 100, s2 = 50, s3 = 0;
+ this->ct->set_condition(UF, true);
+ i = execute_instr(s1, s2, s3, m);
+
+ CHECK(i->get_s1() == 50);
+
+ delete i;
+}
+
+TEST_CASE_METHOD(EXFixture, "BOF no cond", "[ex]")
+{
+ signed int s1, s2, s3;
+ Mnemonic m;
+ InstrDTO *i;
+
+ m = BOF;
s1 = 100, s2 = -42027, s3 = 0;
- this->ct->set_pc(42096);
i = execute_instr(s1, s2, s3, m);
- CHECK(i->get_s1() == 69);
- CHECK(!ct->get_condition(OF));
- CHECK(!ct->get_condition(UF));
+ CHECK(i->get_s1() == -1);
delete i;
}
@@ -729,13 +782,11 @@ TEST_CASE_METHOD(EXFixture, "BOF", "[ex]")
InstrDTO *i;
m = BOF;
- s1 = 100, s2 = -42027, s3 = 0;
- this->ct->set_pc(42096);
+ s1 = 100, s2 = 50, s3 = 0;
+ this->ct->set_condition(OF, true);
i = execute_instr(s1, s2, s3, m);
- CHECK(i->get_s1() == 69);
- CHECK(!ct->get_condition(OF));
- CHECK(!ct->get_condition(UF));
+ CHECK(i->get_s1() == 50);
delete i;
}