| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- #pragma once
- #include <cxxtest/TestSuite.h>
- #include "intrusive_list.hpp"
- struct element_stub {
- element_stub() : node1(this) { }
- intrusive_node<element_stub> node1;
- };
- struct twonode_stub {
- twonode_stub() : node1(this), node2(this) { }
- intrusive_node<twonode_stub> node1, node2;
- };
- class intrusive_list_TestSuite : public CxxTest::TestSuite {
- public:
- void test_erases_on_destruction() {
- intrusive_list<element_stub> list { &element_stub::node1 };
- TS_ASSERT( list.empty() );
- {
- element_stub stub;
- list.push_back( & stub );
- TS_ASSERT_EQUALS( list.size(), 1 );
- }
- TS_ASSERT( list.empty() );
- }
-
- void test_cannot_insert_twice() {
- intrusive_list<element_stub> list { &element_stub::node1 };
- element_stub stub;
- list.push_back( & stub );
- TS_ASSERT_THROWS( list.push_back( & stub ) , std::logic_error );
- TS_ASSERT_EQUALS( list.size(), 1 );
- }
-
- void test_insert_cannot_move() {
- intrusive_list<element_stub> list1 { &element_stub::node1 };
- intrusive_list<element_stub> list2 { &element_stub::node1 };
- element_stub stub;
- list1.push_back( & stub );
- TS_ASSERT_THROWS( list2.push_back( & stub ) , std::logic_error );
- TS_ASSERT( list2.empty() );
- }
-
- void test_transfer_relocated_node() {
- intrusive_list<element_stub> list1 { &element_stub::node1 };
- intrusive_list<element_stub> list2 { &element_stub::node1 };
- element_stub stub;
- list1.push_back( & stub );
- list2.transfer( list2.end(), & stub );
- TS_ASSERT( list1.empty() );
- TS_ASSERT_EQUALS( list2.size(), 1 );
- }
-
- void test_element_with_multiple_nodes_can_be_in_multiple_lists() {
- intrusive_list<twonode_stub> list1 { &twonode_stub::node1 };
- intrusive_list<twonode_stub> list2 { &twonode_stub::node2 };
- twonode_stub stub;
- list1.push_back( & stub );
- list2.push_back( & stub );
- TS_ASSERT_EQUALS( list1.size(), 1 );
- TS_ASSERT_EQUALS( list2.size(), 1 );
- TS_ASSERT_EQUALS( &list1.front(), &list2.front() );
- }
- };
|