| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- #pragma once
- #include <cxxtest/TestSuite.h>
- #include "intrusive_list.hpp"
- class element_stub {
- public:
- element_stub()
- : node1( this ) {
-
- }
- intrusive_node<element_stub> node1;
- };
- 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 );
- }
- };
|