| 89 | |
| 90 | #[test] |
| 91 | fn index_min_pq() { |
| 92 | fn queue(i: &str) -> Queue<&str> { |
| 93 | let mut queue = Queue::default(); |
| 94 | for s in i.split_whitespace() { |
| 95 | queue.enqueue(s); |
| 96 | } |
| 97 | queue |
| 98 | } |
| 99 | let mut inputs = vec![ |
| 100 | queue("A B C F G I I Z"), |
| 101 | queue("B D H P Q Q"), |
| 102 | queue("A B E F J N"), |
| 103 | ]; |
| 104 | |
| 105 | // init |
| 106 | let mut pq = IndexPQ::new_min_pq(inputs.len()); |
| 107 | for i in 0..inputs.len() { |
| 108 | if let Some(v) = inputs[i].dequeue() { |
| 109 | let _ = pq.enqueue(i, v); |
| 110 | } |
| 111 | } |
| 112 | |
| 113 | let mut vec = Vec::new(); |
| 114 | while !pq.is_empty() { |
| 115 | vec.push(pq.peek_key().unwrap().to_string()); |
| 116 | let i = pq.dequeue().unwrap(); |
| 117 | if let Some(v) = inputs[i as usize].dequeue() { |
| 118 | let _ = pq.enqueue(i as usize, v); |
| 119 | } |
| 120 | } |
| 121 | assert_eq!("A A B B B C D E F F G H I I J N P Q Q Z", vec.join(" ")); |
| 122 | } |
| 123 | |
| 124 | #[test] |
| 125 | fn index_max_pq() { |