diff --git a/test/base_tests.cpp b/test/base_tests.cpp index 8780513..f1764d6 100644 --- a/test/base_tests.cpp +++ b/test/base_tests.cpp @@ -6,6 +6,7 @@ #include #include +#include using namespace pls::internal::base; using namespace std; @@ -147,3 +148,59 @@ TEST_CASE( "aligned stack stores objects correctly", "[internal/base/aligned_sta REQUIRE(pointer_five == pointer_three); } } + +TEST_CASE( "deque stores objects correctly", "[internal/base/deque.h]") { + class my_item: public deque_item { + + }; + + deque deque; + my_item one, two, three; + + SECTION( "add and remove items form the tail" ) { + deque.push_tail(&one); + deque.push_tail(&two); + deque.push_tail(&three); + + REQUIRE(deque.pop_tail() == &three); + REQUIRE(deque.pop_tail() == &two); + REQUIRE(deque.pop_tail() == &one); + } + + SECTION( "handles getting empty by popping the tail correctly" ) { + deque.push_tail(&one); + REQUIRE(deque.pop_tail() == &one); + + deque.push_tail(&two); + REQUIRE(deque.pop_tail() == &two); + } + + SECTION( "remove items form the head" ) { + deque.push_tail(&one); + deque.push_tail(&two); + deque.push_tail(&three); + + REQUIRE(deque.pop_head() == &one); + REQUIRE(deque.pop_head() == &two); + REQUIRE(deque.pop_head() == &three); + } + + SECTION( "handles getting empty by popping the head correctly" ) { + deque.push_tail(&one); + REQUIRE(deque.pop_head() == &one); + + deque.push_tail(&two); + REQUIRE(deque.pop_head() == &two); + } + + SECTION( "handles getting empty by popping the head and tail correctly" ) { + deque.push_tail(&one); + REQUIRE(deque.pop_tail() == &one); + + deque.push_tail(&two); + REQUIRE(deque.pop_head() == &two); + + deque.push_tail(&three); + REQUIRE(deque.pop_tail() == &three); + } +}