riot_rs_runqueue/
lib.rs

1#![cfg_attr(not(test), no_std)]
2
3mod runqueue;
4pub use runqueue::{RunQueue, RunqueueId, ThreadId};
5
6#[cfg(test)]
7mod tests {
8    use super::*;
9
10    #[test]
11    fn test_rq_basic() {
12        let mut runqueue: RunQueue<8, 32> = RunQueue::new();
13
14        runqueue.add(0, 0);
15        runqueue.add(1, 0);
16        runqueue.add(2, 0);
17
18        assert_eq!(runqueue.get_next(), Some(0));
19
20        runqueue.advance(0);
21
22        assert_eq!(runqueue.get_next(), Some(1));
23        runqueue.advance(0);
24
25        assert_eq!(runqueue.get_next(), Some(2));
26        assert_eq!(runqueue.get_next(), Some(2));
27
28        runqueue.advance(0);
29        assert_eq!(runqueue.get_next(), Some(0));
30
31        runqueue.advance(0);
32        assert_eq!(runqueue.get_next(), Some(1));
33
34        runqueue.advance(0);
35        assert_eq!(runqueue.get_next(), Some(2));
36    }
37
38    #[test]
39    fn test_rq_all32() {
40        let mut runqueue: RunQueue<8, 32> = RunQueue::new();
41
42        for i in 0..=31 {
43            runqueue.add(i, 0);
44        }
45
46        for i in 0..=31 {
47            assert_eq!(runqueue.get_next(), Some(i));
48            runqueue.advance(0);
49        }
50
51        for i in 0..=31 {
52            assert_eq!(runqueue.get_next(), Some(i));
53            runqueue.advance(0);
54        }
55    }
56
57    #[test]
58    fn test_rq_basic_twoprio() {
59        let mut runqueue: RunQueue<8, 32> = RunQueue::new();
60
61        runqueue.add(0, 0);
62        runqueue.add(1, 0);
63        runqueue.add(3, 0);
64
65        runqueue.add(2, 1);
66        runqueue.add(4, 1);
67
68        assert_eq!(runqueue.get_next(), Some(2));
69        runqueue.del(2, 1);
70        assert_eq!(runqueue.get_next(), Some(4));
71        runqueue.del(4, 1);
72        assert_eq!(runqueue.get_next(), Some(0));
73        runqueue.del(0, 0);
74        assert_eq!(runqueue.get_next(), Some(1));
75        runqueue.del(1, 0);
76        assert_eq!(runqueue.get_next(), Some(3));
77        runqueue.del(3, 0);
78        assert_eq!(runqueue.get_next(), None);
79    }
80    #[test]
81    fn test_push_twice() {
82        let mut runqueue: RunQueue<8, 32> = RunQueue::new();
83
84        runqueue.add(0, 0);
85        runqueue.add(1, 0);
86
87        assert_eq!(runqueue.get_next(), Some(0));
88        runqueue.del(0, 0);
89        assert_eq!(runqueue.get_next(), Some(1));
90
91        runqueue.add(0, 0);
92
93        assert_eq!(runqueue.get_next(), Some(1));
94
95        runqueue.advance(0);
96        assert_eq!(runqueue.get_next(), Some(0));
97    }
98}