MCPcopy Create free account
hub / github.com/Simple-XX/SimpleKernel / test_cfs_dequeue

Function test_cfs_dequeue

tests/system_test/cfs_scheduler_test.cpp:239–288  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

237}
238
239auto 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
290auto test_cfs_statistics() -> bool {
291 klog::Info("Running test_cfs_statistics...");

Callers 1

cfs_scheduler_testFunction · 0.85

Calls 6

InfoFunction · 0.85
EnqueueMethod · 0.45
GetQueueSizeMethod · 0.45
DequeueMethod · 0.45
PickNextMethod · 0.45
IsEmptyMethod · 0.45

Tested by

no test coverage detected