From bf1ae66018118fb5e8ba6d0fbee9f4d99ce39855 Mon Sep 17 00:00:00 2001 From: Janik Schlemminger Date: Thu, 13 Mar 2014 16:57:21 -0700 Subject: [PATCH] Fixed gmock warnings (declare expect_call for every mock function call) Testing of CommandBus -cleanUpBusWorks --- DRAM/src/core/Controller.cpp | 2 +- DRAM/src/core/scheduling/CommandBus.cpp | 2 +- DRAM/src/core/scheduling/CommandBus.h | 7 ++- DRAM/testing/BankwiseRefreshManager_test.cpp | 8 ++- DRAM/testing/CommandBus_test.cpp | 53 ++++++++++++++++++++ DRAM/testing/RefreshManager_test.cpp | 34 ++++--------- DRAM/testing/testUtils.h | 4 ++ 7 files changed, 82 insertions(+), 28 deletions(-) create mode 100644 DRAM/testing/CommandBus_test.cpp diff --git a/DRAM/src/core/Controller.cpp b/DRAM/src/core/Controller.cpp index b6b36e62..7aef9f90 100644 --- a/DRAM/src/core/Controller.cpp +++ b/DRAM/src/core/Controller.cpp @@ -22,7 +22,7 @@ Controller::~Controller() bool Controller::schedule(sc_time currentTime, tlm::tlm_generic_payload* externalTransaction) { - bus.cleanUpPendingBusCommands(currentTime); + bus.cleanUpBus(currentTime); } } /* namespace controller */ diff --git a/DRAM/src/core/scheduling/CommandBus.cpp b/DRAM/src/core/scheduling/CommandBus.cpp index 52375946..a1c9bc4e 100644 --- a/DRAM/src/core/scheduling/CommandBus.cpp +++ b/DRAM/src/core/scheduling/CommandBus.cpp @@ -63,7 +63,7 @@ sc_time CommandBus::getEarliestStartTime(const ScheduledCommand& command) const return newStart; } -void CommandBus::cleanUpPendingBusCommands(sc_time currentTime) +void CommandBus::cleanUpBus(sc_time currentTime) { pendingBusCommands.erase(pendingBusCommands.begin(), pendingBusCommands.lower_bound(currentTime)); } diff --git a/DRAM/src/core/scheduling/CommandBus.h b/DRAM/src/core/scheduling/CommandBus.h index 46cf3cc5..3375c180 100644 --- a/DRAM/src/core/scheduling/CommandBus.h +++ b/DRAM/src/core/scheduling/CommandBus.h @@ -21,16 +21,19 @@ namespace controller{ class CommandBus : public IInternalScheduler { public: - CommandBus(controller::ControllerState& state, const Configuration& config) : state(state), config(config) {} + CommandBus(const Configuration& config, controller::ControllerState& state) : state(state), config(config) {} virtual void scheduleCommand(const ScheduledCommand& command); virtual void scheduleTrigger(const Trigger trigger, sc_time time); - void cleanUpPendingBusCommands(sc_time currentTime); + void cleanUpBus(sc_time currentTime); sc_time getLastCommand(Command command, common::Bank bank);//TODO simple way to make it const? sc_time getLastCommand(Command command); bool notYetScheduled(Command command) const; sc_time getEarliestStartTime(const ScheduledCommand& command) const; + + const std::set& getPendingBusCommands() const {return pendingBusCommands;} + private: controller::ControllerState& state; const Configuration& config; diff --git a/DRAM/testing/BankwiseRefreshManager_test.cpp b/DRAM/testing/BankwiseRefreshManager_test.cpp index 6f7ae459..6eb2b9bc 100644 --- a/DRAM/testing/BankwiseRefreshManager_test.cpp +++ b/DRAM/testing/BankwiseRefreshManager_test.cpp @@ -57,7 +57,6 @@ public: TEST_F(BankwiseRefreshManagerTest, RefreshsAreScheduledAfterStartup) { - EXPECT_CALL(internalScheduler, scheduleTrigger(Trigger::RefreshTrigger, _)).Times(config.numberOfBanks * 2); EXPECT_CALL(internalScheduler, scheduleCommand(_)).Times(config.numberOfBanks); @@ -70,13 +69,20 @@ TEST_F(BankwiseRefreshManagerTest, RefreshsAreScheduledAfterStartup) TEST_F(BankwiseRefreshManagerTest, hasCollisionExpectCollisionOnBank2) { + EXPECT_CALL(internalScheduler, scheduleTrigger(Trigger::RefreshTrigger, _)).Times(config.numberOfBanks + 1); + EXPECT_CALL(internalScheduler, scheduleCommand(_)).Times(1); + BankwiseRefreshManager manager(config.Timings.refreshTimings, internalScheduler); EXPECT_TRUE(manager.hasCollision(getCollidingWithFirstRefreshOnBank(2))); } TEST_F(BankwiseRefreshManagerTest, hasCollisionExpectNoCollisionOnBank2) { + EXPECT_CALL(internalScheduler, scheduleTrigger(Trigger::RefreshTrigger, _)).Times(config.numberOfBanks); + EXPECT_CALL(internalScheduler, scheduleCommand(_)).Times(0); + BankwiseRefreshManager manager(config.Timings.refreshTimings, internalScheduler); EXPECT_FALSE(manager.hasCollision(getNonCollidingWithFirstRefreshOnBank(2))); } + } /* namespace controller */ diff --git a/DRAM/testing/CommandBus_test.cpp b/DRAM/testing/CommandBus_test.cpp new file mode 100644 index 00000000..6b947d85 --- /dev/null +++ b/DRAM/testing/CommandBus_test.cpp @@ -0,0 +1,53 @@ +/* + * CommandBus_test.cpp + * + * Created on: Mar 13, 2014 + * Author: jonny + */ +#include +#include +#include "testUtils.h" +#include "core/scheduling/ScheduledCommand.h" +#include "core/Configuration.h" +#include "core/ControllerState.h" +#include "core/scheduling/CommandBus.h" + +using ::testing::_; +using ::testing::AtLeast; +using ::testing::Expectation; +using namespace testing; +using namespace std; + +namespace controller { + +TEST(CommandBusTest, cleanUpBusWorks) +{ + Configuration config; + ControllerState state(config.numberOfBanks); + CommandBus bus(config, state); + + sc_time clk = config.Timings.clk; + shared_ptr dummy = createDummyPayload(); + ScheduledCommand cmd1(*dummy.get(), Command::Read, 2*clk, clk); + ScheduledCommand cmd2(*dummy.get(), Command::Read, 3*clk, clk); + ScheduledCommand cmd3(*dummy.get(), Command::Read, 5*clk, clk); + ScheduledCommand cmd4(*dummy.get(), Command::Read, 7*clk, clk); + + bus.scheduleCommand(cmd1); + bus.scheduleCommand(cmd2); + bus.scheduleCommand(cmd3); + bus.scheduleCommand(cmd4); + + EXPECT_EQ(4, bus.getPendingBusCommands().size()); + + bus.cleanUpBus(5*clk); + + EXPECT_EQ(2, bus.getPendingBusCommands().size()); +} + + +} /* namespace controller */ + + + + diff --git a/DRAM/testing/RefreshManager_test.cpp b/DRAM/testing/RefreshManager_test.cpp index 86ba7eef..222baa6a 100644 --- a/DRAM/testing/RefreshManager_test.cpp +++ b/DRAM/testing/RefreshManager_test.cpp @@ -11,16 +11,10 @@ #include "testUtils.h" using ::testing::_; -using ::testing::AtLeast; using ::testing::Expectation; + using namespace testing; -#include - -const double lowest_double = -DBL_MAX; - -constexpr unsigned int numberOfBanks = 8; - namespace controller { class MockInternalScheduler: public IInternalScheduler @@ -63,11 +57,10 @@ public: }; }; - TEST_F(RefreshManagerTest, RefreshIsScheduledAfterStartup) { EXPECT_CALL(internalScheduler, scheduleTrigger(Trigger::RefreshTrigger, _)).Times(2); - EXPECT_CALL(internalScheduler, scheduleCommand(_)); + EXPECT_CALL(internalScheduler, scheduleCommand(_)).Times(1); //first trigger is scheduled RefreshManager manager(config.Timings.refreshTimings.at(0), internalScheduler); @@ -79,6 +72,7 @@ TEST_F(RefreshManagerTest, RefreshIsScheduledAfterStartup) TEST_F(RefreshManagerTest, FinishedRefreshTriggersNewRefresh) { EXPECT_CALL(internalScheduler, scheduleCommand(_)).Times(2); + EXPECT_CALL(internalScheduler, scheduleTrigger(Trigger::RefreshTrigger, _)).Times(3); //first trigger is scheduled RefreshManager manager(config.Timings.refreshTimings.at(0), internalScheduler); @@ -92,28 +86,22 @@ TEST_F(RefreshManagerTest, FinishedRefreshTriggersNewRefresh) TEST_F(RefreshManagerTest, hasCollisionExpectCollision) { + EXPECT_CALL(internalScheduler, scheduleTrigger(Trigger::RefreshTrigger, _)).Times(2); + EXPECT_CALL(internalScheduler, scheduleCommand(_)).Times(1); + RefreshManager manager(config.Timings.refreshTimings.at(0), internalScheduler); + EXPECT_TRUE(manager.hasCollision(getCollidingWithFirstRefresh())); } TEST_F(RefreshManagerTest, hasCollisionExpectNoCollision) { + EXPECT_CALL(internalScheduler, scheduleTrigger(Trigger::RefreshTrigger, _)).Times(1); + EXPECT_CALL(internalScheduler, scheduleCommand(_)).Times(0); + RefreshManager manager(config.Timings.refreshTimings.at(0), internalScheduler); + EXPECT_FALSE(manager.hasCollision(getNonCollidingWithFirstRefresh())); } -TEST_F(RefreshManagerTest, hasCollisionSchedulesRefreshOnCollision) -{ - EXPECT_CALL(internalScheduler, scheduleCommand(_)).Times(1); - RefreshManager manager(config.Timings.refreshTimings.at(0), internalScheduler); - manager.hasCollision(getCollidingWithFirstRefresh()); -} - -TEST_F(RefreshManagerTest, hasCollisionSchedulesNoRefreshOnNoCollision) -{ - EXPECT_CALL(internalScheduler, scheduleCommand(_)).Times(0); - RefreshManager manager(config.Timings.refreshTimings.at(0), internalScheduler); - manager.hasCollision(getNonCollidingWithFirstRefresh()); -} - } /* namespace controller */ diff --git a/DRAM/testing/testUtils.h b/DRAM/testing/testUtils.h index 8771e896..fb45c6cf 100644 --- a/DRAM/testing/testUtils.h +++ b/DRAM/testing/testUtils.h @@ -4,6 +4,7 @@ #include #include #include "common/dramextension.h" +#include "core/scheduling/ScheduledCommand.h" std::shared_ptr createDummyPayload(); @@ -22,4 +23,7 @@ std::shared_ptr createDummyPayload(const common::Threa const common::Bank& bank, const common::Row& row, const common::Column& column, const tlm::tlm_command& command); +//std::shared_ptr createDummyScheduledCommand(const sc_time); +//TODO .. wenn in implementierung create dummypayload dereferenziert an ScheduledCommand .. out of scope .. reference zu nichtS? + #endif // TESTUTILS_H