BankwiseRefreshManager added.
Tests for RefreshManager.
This commit is contained in:
@@ -12,6 +12,7 @@
|
||||
using ::testing::_;
|
||||
using ::testing::AtLeast;
|
||||
using ::testing::Expectation;
|
||||
using namespace testing;
|
||||
|
||||
constexpr unsigned int numberOfBanks = 8;
|
||||
|
||||
@@ -24,11 +25,41 @@ public:
|
||||
MOCK_METHOD2(scheduleTrigger, void (const Trigger command, sc_time time));
|
||||
};
|
||||
|
||||
TEST(RefreshManager, RefreshIsScheduledAfterStartup)
|
||||
class RefreshManagerTest: public Test
|
||||
{
|
||||
public:
|
||||
RefreshManagerTest(){}
|
||||
|
||||
Configuration config;
|
||||
MockInternalScheduler internalScheduler;
|
||||
|
||||
CommandSchedule getCollidingWithFirstRefresh()
|
||||
{
|
||||
tlm::tlm_generic_payload transaction;
|
||||
CommandSchedule colliding(transaction);
|
||||
sc_time tREFI = config.Timings.refreshTimings.at(0).tREFI;
|
||||
sc_time clk = config.Timings.clk;
|
||||
|
||||
colliding.add(Command::Read, tREFI - 1 * clk, 2 * clk);
|
||||
return colliding;
|
||||
};
|
||||
|
||||
CommandSchedule getNonCollidingWithFirstRefresh()
|
||||
{
|
||||
tlm::tlm_generic_payload transaction;
|
||||
CommandSchedule non_colliding(transaction);
|
||||
sc_time tREFI = config.Timings.refreshTimings.at(0).tREFI;
|
||||
sc_time clk = config.Timings.clk;
|
||||
|
||||
non_colliding.add(Command::Read, tREFI - 3 * clk, 2 * clk);
|
||||
return non_colliding;
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
TEST_F(RefreshManagerTest, RefreshIsScheduledAfterStartup)
|
||||
{
|
||||
|
||||
EXPECT_CALL(internalScheduler, scheduleTrigger(Trigger::RefreshTrigger, _)).Times(2);
|
||||
EXPECT_CALL(internalScheduler, scheduleCommand(_));
|
||||
|
||||
@@ -39,11 +70,8 @@ TEST(RefreshManager, RefreshIsScheduledAfterStartup)
|
||||
manager.scheduleRefresh(config.Timings.refreshTimings.at(0).tREFI);//call back from wrapper
|
||||
}
|
||||
|
||||
TEST(RefreshManager, FinishedRefreshTriggersNewRefresh)
|
||||
TEST_F(RefreshManagerTest, FinishedRefreshTriggersNewRefresh)
|
||||
{
|
||||
Configuration config;
|
||||
MockInternalScheduler internalScheduler;
|
||||
|
||||
EXPECT_CALL(internalScheduler, scheduleCommand(_)).Times(2);
|
||||
|
||||
//first trigger is scheduled
|
||||
@@ -56,4 +84,30 @@ TEST(RefreshManager, FinishedRefreshTriggersNewRefresh)
|
||||
manager.scheduleRefresh(config.Timings.refreshTimings.at(0).tREFI * 2);
|
||||
}
|
||||
|
||||
TEST_F(RefreshManagerTest, hasCollisionExpectCollision)
|
||||
{
|
||||
RefreshManager manager(config.Timings.refreshTimings.at(0), internalScheduler);
|
||||
EXPECT_TRUE(manager.hasCollision(getCollidingWithFirstRefresh()));
|
||||
}
|
||||
|
||||
TEST_F(RefreshManagerTest, hasCollisionExpectNoCollision)
|
||||
{
|
||||
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 */
|
||||
|
||||
Reference in New Issue
Block a user