BankwiseRefreshManager added.

Tests for RefreshManager.
This commit is contained in:
Janik Schlemminger
2014-03-12 07:17:02 -07:00
parent 4dbc9b8a78
commit aa2eb43126
6 changed files with 81 additions and 20 deletions

View File

@@ -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 */