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}