diff options
author | bd <bdunaisky@umass.edu> | 2025-04-02 04:05:18 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-04-02 04:05:18 +0000 |
commit | 9fb95d655393777dde5929182f94de36f903821d (patch) | |
tree | 4462f35895737460a01fab891a15f87aba2efb70 /tests/ex.cc | |
parent | 24f0bd8af57381ab3112b5774d4ad23ac80f0718 (diff) | |
parent | 3eeb345d673bee6d62b04fc8a8a95ab822dc1e45 (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.cc | 95 |
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; } |