测试 CFS 调度器的基本入队出队功能
| 11 | |
| 12 | // 测试 CFS 调度器的基本入队出队功能 |
| 13 | TEST(CfsSchedulerTest, BasicEnqueueDequeue) { |
| 14 | CfsScheduler scheduler; |
| 15 | |
| 16 | // 创建测试任务 |
| 17 | TaskControlBlock task1("Task1", 1, nullptr, nullptr); |
| 18 | task1.status = TaskStatus::kReady; |
| 19 | task1.sched_data.cfs.weight = CfsScheduler::kDefaultWeight; |
| 20 | task1.sched_data.cfs.vruntime = 0; |
| 21 | |
| 22 | TaskControlBlock task2("Task2", 2, nullptr, nullptr); |
| 23 | task2.status = TaskStatus::kReady; |
| 24 | task2.sched_data.cfs.weight = CfsScheduler::kDefaultWeight; |
| 25 | task2.sched_data.cfs.vruntime = 0; |
| 26 | |
| 27 | // 测试空队列 |
| 28 | EXPECT_TRUE(scheduler.IsEmpty()); |
| 29 | EXPECT_EQ(scheduler.GetQueueSize(), 0); |
| 30 | EXPECT_EQ(scheduler.PickNext(), nullptr); |
| 31 | |
| 32 | // 加入任务 |
| 33 | scheduler.Enqueue(&task1); |
| 34 | EXPECT_FALSE(scheduler.IsEmpty()); |
| 35 | EXPECT_EQ(scheduler.GetQueueSize(), 1); |
| 36 | |
| 37 | scheduler.Enqueue(&task2); |
| 38 | EXPECT_EQ(scheduler.GetQueueSize(), 2); |
| 39 | |
| 40 | // 选择任务(vruntime 相同时,按入队顺序) |
| 41 | auto* next1 = scheduler.PickNext(); |
| 42 | EXPECT_NE(next1, nullptr); |
| 43 | EXPECT_EQ(scheduler.GetQueueSize(), 1); |
| 44 | |
| 45 | auto* next2 = scheduler.PickNext(); |
| 46 | EXPECT_NE(next2, nullptr); |
| 47 | EXPECT_EQ(scheduler.GetQueueSize(), 0); |
| 48 | |
| 49 | EXPECT_EQ(scheduler.PickNext(), nullptr); |
| 50 | EXPECT_TRUE(scheduler.IsEmpty()); |
| 51 | } |
| 52 | |
| 53 | // 测试 vruntime 排序 |
| 54 | TEST(CfsSchedulerTest, VruntimeOrdering) { |
nothing calls this directly
no test coverage detected