include <BOSL2/std.scad>
include <BOSL2/queues.scad>


module test_queue_init() {
	assert(queue_init()==[]);
}
test_queue_init();


module test_queue_empty() {
	assert(queue_empty([]));
	assert(!queue_empty([3]));
	assert(!queue_empty([2,4,8]));
}
test_queue_empty();


module test_queue_size() {
	assert(queue_size([]) == 0);
	assert(queue_size([3]) == 1);
	assert(queue_size([2,4,8]) == 3);
}
test_queue_size();


module test_queue_head() {
	assert(queue_head([]) == undef);
	assert(queue_head([3,5,7,9]) == 3);
	assert(queue_head([3,5,7,9], 3) == [3,5,7]);
}
test_queue_head();


module test_queue_tail() {
	assert(queue_tail([]) == undef);
	assert(queue_tail([3,5,7,9]) == 9);
	assert(queue_tail([3,5,7,9], 3) == [5,7,9]);
}
test_queue_tail();


module test_queue_peek() {
	q = [8,5,4,3,2,3,7];
	assert(queue_peek(q,0) == 8);
	assert(queue_peek(q,2) == 4);
	assert(queue_peek(q,2,1) == [4]);
	assert(queue_peek(q,2,3) == [4,3,2]);
}
test_queue_peek();


module test_queue_add() {
	q1 = queue_init();
	q2 = queue_add(q1, "Foo");
	assert(q2==["Foo"]);
	q3 = queue_add(q2, "Bar");
	assert(q3==["Foo","Bar"]);
	q4 = queue_add(q3, "Baz");
	assert(q4==["Foo","Bar","Baz"]);
}
test_queue_add();


module test_queue_pop() {
	q = ["Foo", "Bar", "Baz", "Qux"];
	q1 = queue_pop(q);
	assert(q1 == ["Bar", "Baz", "Qux"]);
	q2 = queue_pop(q,2);
	assert(q2 == ["Baz", "Qux"]);
	q3 = queue_pop(q,3);
	assert(q3 == ["Qux"]);
}
test_queue_pop();


// vim: noexpandtab tabstop=4 shiftwidth=4 softtabstop=4 nowrap