use Queue;
#[derive(Debug)]
struct Num(u8);
#[test]
fn queue() {
let queue: Queue<Num> = Queue::new();
queue.push(Num(1));
let mut count = 0;
for elem in queue.iter() {
count += 1;
if elem.0 < 100 {
queue.push(Num(elem.0 + 1));
}
}
assert_eq!(count, 100);
}
#[test]
fn reverse_order() {
use std::collections::HashMap;
let input = 1..10; let queue: Queue<u8> = input.clone().into_iter().collect();
let mut counts: HashMap<u8,u8> = HashMap::new();
let mut total = 0u8;
let mut prev = input.end;
for elem in queue.iter().rev() {
total += 1;
assert!(elem <= prev && elem >= prev - 1, "traversal was out of order");
prev = elem;
let n = counts.entry(elem).or_insert(0);
*n += 1;
if *n < elem {
queue.push(elem);
}
}
assert_eq!(total, input.sum(), "Iterated through wrong number of elements");
}