#include "queue.hpp"


TEST(Queue) {
    Queue<int> q;

    *(q.push()) = 1;
    *(q.push()) = 2;
    if (*(q.peek()) != 1) return false;
    q.pop();
    *(q.push()) = 3;
    *(q.push()) = 4;
    if (*(q.peek()) != 2) return false;
    q.pop();
    if (*(q.peek()) != 3) return false;
    q.pop();
    if (*(q.peek()) != 4) return false;
    q.pop();
    if (q.peek() != NULL) return false;

    return true;
}


TEST(Stack) {
    Stack<int> s;
    s.push(1);
    s.push(2);
    s.push(3);
    if (s.pop() != 3) return false;
    if (s.pop() != 2) return false;
    s.push(2);
    s.push(3);
    int i = 3;
    for (int* it = s.iterator(); it; it = s.iterator_next(it)) {
        if (*it != i--) return false;
    }
    do {
        s.pop();
    } while (!s.empty());
    return true;
}