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

Function TEST

tests/unit_test/cfs_scheduler_test.cpp:13–51  ·  view source on GitHub ↗

测试 CFS 调度器的基本入队出队功能

Source from the content-addressed store, hash-verified

11
12// 测试 CFS 调度器的基本入队出队功能
13TEST(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 排序
54TEST(CfsSchedulerTest, VruntimeOrdering) {

Callers

nothing calls this directly

Calls 11

ResetStatsMethod · 0.80
GetMinVruntimeMethod · 0.80
IsEmptyMethod · 0.45
GetQueueSizeMethod · 0.45
PickNextMethod · 0.45
EnqueueMethod · 0.45
OnTickMethod · 0.45
DequeueMethod · 0.45
OnPreemptedMethod · 0.45
OnScheduledMethod · 0.45
GetStatsMethod · 0.45

Tested by

no test coverage detected