7#include <gtest/gtest.h>
13TEST(FifoSchedulerTest, BasicEnqueueDequeue) {
17 EXPECT_STREQ(scheduler.
name,
"FIFO");
51TEST(FifoSchedulerTest, FifoOrdering) {
76TEST(FifoSchedulerTest, DequeueSpecificTask) {
100TEST(FifoSchedulerTest, DequeueFirstTask) {
122TEST(FifoSchedulerTest, DequeueLastTask) {
143TEST(FifoSchedulerTest, Statistics) {
189TEST(FifoSchedulerTest, RepeatedEnqueue) {
209TEST(FifoSchedulerTest, MixedOperations) {
239TEST(FifoSchedulerTest, EmptyQueueRobustness) {
265TEST(FifoSchedulerTest, LargeNumberOfTasks) {
267 constexpr size_t kTaskCount = 100;
270 kstd::vector<TaskControlBlock*> tasks;
271 for (
size_t i = 0; i < kTaskCount; ++i) {
274 tasks.push_back(task);
281 for (
size_t i = 0; i < kTaskCount; ++i) {
282 auto* picked = scheduler.
PickNext();
291 for (
auto* task : tasks) {
297TEST(FifoSchedulerTest, OnTickHook) {
308TEST(FifoSchedulerTest, OnTimeSliceExpiredHook) {
318TEST(FifoSchedulerTest, PriorityHooks) {
334TEST(FifoSchedulerTest, SchedulerHooks) {
345 auto* picked = scheduler.
PickNext();
auto Enqueue(TaskControlBlock *task) -> void override
将任务加入就绪队列尾部
auto OnPreempted(TaskControlBlock *task) -> void override
任务被抢占时调用
auto PickNext() -> TaskControlBlock *override
选择下一个要运行的任务(队列头部)
auto IsEmpty() const -> bool override
判断队列是否为空
auto GetQueueSize() const -> size_t override
获取就绪队列大小
auto Dequeue(TaskControlBlock *task) -> void override
从就绪队列中移除指定任务
virtual auto OnTick(TaskControlBlock *current) -> bool
Tick 更新:每个时钟中断时调用,用于更新调度器状态
virtual auto BoostPriority(TaskControlBlock *task, int new_priority) -> void
优先级提升:当任务持有资源时被更高优先级任务等待,提升其优先级
virtual auto RestorePriority(TaskControlBlock *task) -> void
优先级恢复:当任务释放资源后,恢复其原始优先级
virtual auto GetStats() const -> const Stats &
获取调度器统计信息
virtual auto OnScheduled(TaskControlBlock *task) -> void
任务开始运行时调用 (从 Ready 变为 Running)
virtual auto ResetStats() -> void
重置统计信息
virtual auto OnTimeSliceExpired(TaskControlBlock *task) -> bool
时间片耗尽处理:当任务时间片用完时调用
constexpr etl::fsm_state_id_t kReady
int priority
优先级 (数字越小优先级越高)
struct TaskControlBlock::SchedInfo sched_info
#define EXPECT_TRUE(cond, msg)
#define EXPECT_NE(val1, val2, msg)
#define EXPECT_FALSE(cond, msg)
#define EXPECT_EQ(val1, val2, msg)
TEST(FifoSchedulerTest, BasicEnqueueDequeue)