7#include <gtest/gtest.h>
13TEST(RoundRobinSchedulerTest, BasicEnqueueDequeue) {
37TEST(RoundRobinSchedulerTest, RoundRobinRotation) {
66TEST(RoundRobinSchedulerTest, DequeueSpecificTask) {
87TEST(RoundRobinSchedulerTest, NullPointerHandling) {
99TEST(RoundRobinSchedulerTest, RepeatedEnqueueDequeue) {
105 for (
int i = 0; i < 10; ++i) {
114TEST(RoundRobinSchedulerTest, InterleavedEnqueueDequeue) {
133TEST(RoundRobinSchedulerTest, QueueSizeAndEmpty) {
164TEST(RoundRobinSchedulerTest, TimeSliceReset) {
183TEST(RoundRobinSchedulerTest, Statistics) {
230TEST(RoundRobinSchedulerTest, FairnessWithManyTasks) {
232 constexpr size_t kTaskCount = 100;
235 kstd::vector<TaskControlBlock*> tasks;
236 for (
size_t i = 0; i < kTaskCount; ++i) {
239 tasks.push_back(task);
246 for (
size_t i = 0; i < kTaskCount; ++i) {
247 auto* picked = scheduler.
PickNext();
248 ASSERT_NE(picked,
nullptr);
255 for (
auto* task : tasks) {
261TEST(RoundRobinSchedulerTest, MultipleRounds) {
269 for (
int round = 0; round < 5; ++round) {
282TEST(RoundRobinSchedulerTest, SingleTask) {
290 auto* picked = scheduler.
PickNext();
296TEST(RoundRobinSchedulerTest, DequeueNonExistentTask) {
auto OnPreempted(TaskControlBlock *task) -> void override
任务被抢占时调用
auto Dequeue(TaskControlBlock *task) -> void override
从就绪队列中移除指定任务
auto OnTimeSliceExpired(TaskControlBlock *task) -> bool override
时间片耗尽处理
auto PickNext() -> TaskControlBlock *override
选择下一个要运行的任务
auto Enqueue(TaskControlBlock *task) -> void override
将任务加入就绪队列尾部
auto GetQueueSize() const -> size_t override
获取就绪队列大小
auto IsEmpty() const -> bool override
判断队列是否为空
virtual auto GetStats() const -> const Stats &
获取调度器统计信息
virtual auto ResetStats() -> void
重置统计信息
constexpr etl::fsm_state_id_t kReady
uint64_t time_slice_default
默认时间片
uint64_t time_slice_remaining
剩余时间片
struct TaskControlBlock::SchedInfo sched_info
#define EXPECT_TRUE(cond, msg)
#define EXPECT_FALSE(cond, msg)
#define EXPECT_EQ(val1, val2, msg)
TEST(RoundRobinSchedulerTest, BasicEnqueueDequeue)