#pragma once #include #include "intrusive_list.hpp" class element_stub { public: element_stub() : node1( this ) { } intrusive_node node1; }; class intrusive_list_TestSuite : public CxxTest::TestSuite { public: void test_erases_on_destruction() { intrusive_list 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 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 list1 { &element_stub::node1 }; intrusive_list 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 list1 { &element_stub::node1 }; intrusive_list 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 ); } };