| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- #pragma once
- #include <cxxtest/TestSuite.h>
- #include "intrusive_list.hpp"
- struct element_stub {
- 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 );
- }
- };
|