From 4fa2026abd4bb3ff4051779d038fb5c34a1217fd Mon Sep 17 00:00:00 2001 From: vovatrykoz Date: Wed, 13 Nov 2024 19:47:48 +0100 Subject: [PATCH] can perform endtoend delay calculations --- source/TimedPath.cpp | 19 ++++++++++++++-- tests/TimedPathTests.cpp | 48 +++++++++++++++++++++++++++++++++++++++- 2 files changed, 64 insertions(+), 3 deletions(-) diff --git a/source/TimedPath.cpp b/source/TimedPath.cpp index 79bdc8b..bca5621 100644 --- a/source/TimedPath.cpp +++ b/source/TimedPath.cpp @@ -1,11 +1,26 @@ #include "TimedPath.h" void TimedPath::popTaskInstance() { - if(this->tasks.empty()) { + if (this->tasks.empty()) { return; } this->tasks.pop_back(); } -int TimedPath::endToEndDelay() const { return 0; } +int TimedPath::endToEndDelay() const { + if (this->tasks.empty()) { + return 0; + } + + int size = this->tasks.size(); + if (size == 1) { + return this->tasks[0].baseTask.wcet; + } + + const TaskInstance& lastTaskInstance = this->tasks[size - 1]; + const TaskInstance& firstTaskInstance = this->tasks[0]; + + return lastTaskInstance.activationTime + lastTaskInstance.baseTask.wcet - + firstTaskInstance.activationTime; +} diff --git a/tests/TimedPathTests.cpp b/tests/TimedPathTests.cpp index 7b9e246..38c127d 100644 --- a/tests/TimedPathTests.cpp +++ b/tests/TimedPathTests.cpp @@ -8,7 +8,7 @@ TEST(TimedPath, CanAppendTaskToPath) { TimedPath tp; tp.appendTaskInstance(taskInstance); - std::vector expected = { taskInstance }; + std::vector expected = {taskInstance}; std::vector actual = tp.toVector(); EXPECT_EQ(expected, actual); @@ -19,10 +19,56 @@ TEST(TimedPath, CanPopTaskFromPath) { TaskInstance taskInstance(task, 10); TimedPath tp; + tp.appendTaskInstance(taskInstance); tp.popTaskInstance(); std::vector expected; std::vector actual = tp.toVector(); + EXPECT_EQ(expected, actual); +} + +TEST(TimedPath, ReturnsZeroWhenCalculatingEndToEndDelayForEmptyTaskPath) { + TimedPath tp; + + int expected = 0; + int actual = tp.endToEndDelay(); + + EXPECT_EQ(expected, actual); +} + +TEST(TimedPath, ReturnsWcetWhenCalculatingEndToEndDelayForTaskPathWithOneTask) { + Task t1(40, 4, 1); + TaskInstance t1Instance(t1, 4); + + TimedPath tp; + tp.appendTaskInstance(t1Instance); + + int expected = t1.wcet; + int actual = tp.endToEndDelay(); + + EXPECT_EQ(expected, actual); +} + +TEST(TimedPath, CanCalculateEndToEndDelayForTaskPath) { + Task t1(40, 4, 1); + Task t2(10, 3, 1); + Task t3(30, 2, 1); + Task t4(20, 1, 1); + + TaskInstance t1Instance(t1, 4); + TaskInstance t2Instance(t2, 11); + TaskInstance t3Instance(t3, 15); + TaskInstance t4Instance(t4, 22); + + TimedPath tp; + tp.appendTaskInstance(t1Instance); + tp.appendTaskInstance(t2Instance); + tp.appendTaskInstance(t3Instance); + tp.appendTaskInstance(t4Instance); + + int expected = 19; + int actual = tp.endToEndDelay(); + EXPECT_EQ(expected, actual); } \ No newline at end of file