| 237 | } |
| 238 | |
| 239 | auto test_cfs_dequeue() -> bool { |
| 240 | klog::Info("Running test_cfs_dequeue..."); |
| 241 | |
| 242 | CfsScheduler scheduler; |
| 243 | |
| 244 | TaskControlBlock task1("Task1", 1, nullptr, nullptr); |
| 245 | task1.sched_data.cfs.weight = CfsScheduler::kDefaultWeight; |
| 246 | task1.sched_data.cfs.vruntime = 100; |
| 247 | |
| 248 | TaskControlBlock task2("Task2", 2, nullptr, nullptr); |
| 249 | task2.sched_data.cfs.weight = CfsScheduler::kDefaultWeight; |
| 250 | task2.sched_data.cfs.vruntime = 200; |
| 251 | |
| 252 | TaskControlBlock task3("Task3", 3, nullptr, nullptr); |
| 253 | task3.sched_data.cfs.weight = CfsScheduler::kDefaultWeight; |
| 254 | task3.sched_data.cfs.vruntime = 300; |
| 255 | |
| 256 | TaskControlBlock task4("Task4", 4, nullptr, nullptr); |
| 257 | task4.sched_data.cfs.weight = CfsScheduler::kDefaultWeight; |
| 258 | task4.sched_data.cfs.vruntime = 400; |
| 259 | |
| 260 | scheduler.Enqueue(&task1); |
| 261 | scheduler.Enqueue(&task2); |
| 262 | scheduler.Enqueue(&task3); |
| 263 | scheduler.Enqueue(&task4); |
| 264 | |
| 265 | EXPECT_EQ(scheduler.GetQueueSize(), 4, "Queue size should be 4"); |
| 266 | |
| 267 | // 移除中间任务 |
| 268 | scheduler.Dequeue(&task2); |
| 269 | EXPECT_EQ(scheduler.GetQueueSize(), 3, |
| 270 | "Queue size should be 3 after dequeue"); |
| 271 | |
| 272 | // 移除队首任务(vruntime 最小) |
| 273 | scheduler.Dequeue(&task1); |
| 274 | EXPECT_EQ(scheduler.GetQueueSize(), 2, |
| 275 | "Queue size should be 2 after dequeue"); |
| 276 | |
| 277 | // 验证剩余任务按 vruntime 顺序 |
| 278 | auto* picked1 = scheduler.PickNext(); |
| 279 | EXPECT_EQ(picked1, &task3, "First remaining task should be task3"); |
| 280 | |
| 281 | auto* picked2 = scheduler.PickNext(); |
| 282 | EXPECT_EQ(picked2, &task4, "Second remaining task should be task4"); |
| 283 | |
| 284 | EXPECT_TRUE(scheduler.IsEmpty(), "Scheduler should be empty"); |
| 285 | |
| 286 | klog::Info("test_cfs_dequeue passed"); |
| 287 | return true; |
| 288 | } |
| 289 | |
| 290 | auto test_cfs_statistics() -> bool { |
| 291 | klog::Info("Running test_cfs_statistics..."); |
no test coverage detected