Skip to content

Commit 8629f5e

Browse files
Add a test for set_at and fix it
1 parent 643d2c8 commit 8629f5e

2 files changed

Lines changed: 12 additions & 3 deletions

File tree

Inc/HALAL/Services/Time/Scheduler.hpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -101,9 +101,9 @@ struct Scheduler {
101101
return (uint8_t)((sorted_task_ids_ >> (idx * 4)) & 0xF);
102102
}
103103
static HYPER_INLINE void set_at(uint8_t idx, uint8_t id) {
104-
uint32_t shift = idx * 4;
105-
uint64_t clearmask = ~(0xFFULL << shift);
106-
Scheduler::sorted_task_ids_ = (sorted_task_ids_ & clearmask) | (id << shift);
104+
uint64_t shift = idx * 4;
105+
uint64_t clearmask = ~(0x0FULL << shift);
106+
Scheduler::sorted_task_ids_ = (sorted_task_ids_ & clearmask) | ((uint64_t)id << shift);
107107
}
108108
static HYPER_INLINE uint8_t front_id() { return *((uint8_t*)&sorted_task_ids_) & 0xF; }
109109
static HYPER_INLINE void pop_front() {

Tests/Time/scheduler_test.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,15 @@ TEST_F(SchedulerTests, GetAt) {
4040
}
4141
}
4242

43+
TEST_F(SchedulerTests, SetAt) {
44+
uint64_t original = 0x1EDCBA9876543210ULL;
45+
for (uint64_t i = 0; i < 16; i++) {
46+
Scheduler::sorted_task_ids_ = original;
47+
Scheduler::set_at(i, 0xF);
48+
EXPECT_EQ(Scheduler::sorted_task_ids_, original | (0xFULL << (i*4)));
49+
}
50+
}
51+
4352
TEST_F(SchedulerTests, FreeBitmap) {
4453
Scheduler::register_task(10, &fake_workload);
4554
EXPECT_EQ(Scheduler::free_bitmap_, 0xFFFF'FFFE);

0 commit comments

Comments
 (0)