diff options
Diffstat (limited to 'test/unit/mvctor_traits_test.cpp')
-rw-r--r-- | test/unit/mvctor_traits_test.cpp | 460 |
1 files changed, 0 insertions, 460 deletions
diff --git a/test/unit/mvctor_traits_test.cpp b/test/unit/mvctor_traits_test.cpp deleted file mode 100644 index 7cea98f..0000000 --- a/test/unit/mvctor_traits_test.cpp +++ /dev/null @@ -1,460 +0,0 @@ -#include <vector> -#include <deque> - -#include "mvctor_test.h" - -#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES) -using namespace std; -#endif - -size_t MovableStruct::nb_dft_construct_call = 0; -size_t MovableStruct::nb_cpy_construct_call = 0; -size_t MovableStruct::nb_mv_construct_call = 0; -size_t MovableStruct::nb_assignment_call = 0; -size_t MovableStruct::nb_destruct_call = 0; - -#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC) -# if defined (_STLP_USE_NAMESPACES) -namespace std { -# endif - _STLP_TEMPLATE_NULL - struct __move_traits<MovableStruct> { - typedef __true_type implemented; - typedef __false_type complete; - }; -# if defined (_STLP_USE_NAMESPACES) -} -# endif -#endif - -struct CompleteMovableStruct { - CompleteMovableStruct() { ++nb_dft_construct_call; } - CompleteMovableStruct(CompleteMovableStruct const&) { ++nb_cpy_construct_call; } -#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC) - CompleteMovableStruct(__move_source<CompleteMovableStruct>) { ++nb_mv_construct_call; } -#endif - ~CompleteMovableStruct() { ++nb_destruct_call; } - - CompleteMovableStruct& operator = (const CompleteMovableStruct&) { - ++nb_assignment_call; - return *this; - } - static void reset() { - nb_dft_construct_call = nb_cpy_construct_call = nb_mv_construct_call = 0; - nb_assignment_call = 0; - nb_destruct_call = 0; - } - - static size_t nb_dft_construct_call; - static size_t nb_cpy_construct_call; - static size_t nb_mv_construct_call; - static size_t nb_assignment_call; - static size_t nb_destruct_call; - - //See MovableStruct - void* dummy_data[2]; -}; - -size_t CompleteMovableStruct::nb_dft_construct_call = 0; -size_t CompleteMovableStruct::nb_cpy_construct_call = 0; -size_t CompleteMovableStruct::nb_mv_construct_call = 0; -size_t CompleteMovableStruct::nb_assignment_call = 0; -size_t CompleteMovableStruct::nb_destruct_call = 0; - -#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC) -# if defined (_STLP_USE_NAMESPACES) -namespace std { -# endif - _STLP_TEMPLATE_NULL - struct __move_traits<CompleteMovableStruct> { - typedef __true_type implemented; - typedef __true_type complete; - }; -# if defined (_STLP_USE_NAMESPACES) -} -# endif -#endif - -void MoveConstructorTest::move_traits() -{ - move_traits_vec(); - move_traits_vec_complete(); - move_traits_deq(); - move_traits_deq_complete(); -} - -void MoveConstructorTest::move_traits_vec() -{ - { - { - vector<MovableStruct> vect; - vect.push_back(MovableStruct()); - vect.push_back(MovableStruct()); - vect.push_back(MovableStruct()); - vect.push_back(MovableStruct()); - - // vect contains 4 elements - CPPUNIT_ASSERT( MovableStruct::nb_dft_construct_call == 4 ); -#if defined (STLPORT) -# if !defined (_STLP_NO_MOVE_SEMANTIC) - CPPUNIT_ASSERT( MovableStruct::nb_cpy_construct_call == 4 ); - CPPUNIT_ASSERT( MovableStruct::nb_mv_construct_call == 3 ); -# else - CPPUNIT_ASSERT( MovableStruct::nb_cpy_construct_call == 7 ); -# endif - CPPUNIT_ASSERT( MovableStruct::nb_destruct_call == 7 ); -#elif !defined (_MSC_VER) - CPPUNIT_ASSERT( MovableStruct::nb_cpy_construct_call == 7 ); - CPPUNIT_ASSERT( MovableStruct::nb_destruct_call == 7 ); -#else - CPPUNIT_ASSERT( MovableStruct::nb_cpy_construct_call == 14 ); - CPPUNIT_ASSERT( MovableStruct::nb_destruct_call == 14 ); -#endif - CPPUNIT_ASSERT( MovableStruct::nb_assignment_call == 0 ); - - // Following test violate requirements to sequiences (23.1.1 Table 67) - /* - vect.insert(vect.begin() + 2, vect.begin(), vect.end()); - // vect contains 8 elements - CPPUNIT_ASSERT( MovableStruct::nb_dft_construct_call == 4 ); - CPPUNIT_ASSERT( MovableStruct::nb_cpy_construct_call == 8 ); - CPPUNIT_ASSERT( MovableStruct::nb_mv_construct_call == 7 ); - CPPUNIT_ASSERT( MovableStruct::nb_destruct_call == 11 ); - */ - - MovableStruct::reset(); - vector<MovableStruct> v2 = vect; - CPPUNIT_ASSERT( MovableStruct::nb_dft_construct_call == 0 ); - CPPUNIT_ASSERT( MovableStruct::nb_cpy_construct_call == 4 ); - CPPUNIT_ASSERT( MovableStruct::nb_mv_construct_call == 0 ); - CPPUNIT_ASSERT( MovableStruct::nb_assignment_call == 0 ); - CPPUNIT_ASSERT( MovableStruct::nb_destruct_call == 0 ); - - MovableStruct::reset(); - vect.insert(vect.begin() + 2, v2.begin(), v2.end() ); - - // vect contains 8 elements - CPPUNIT_ASSERT( MovableStruct::nb_dft_construct_call == 0 ); -#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC) - CPPUNIT_ASSERT( MovableStruct::nb_cpy_construct_call == 4 ); - CPPUNIT_ASSERT( MovableStruct::nb_mv_construct_call == 4 ); -#else - CPPUNIT_ASSERT( MovableStruct::nb_cpy_construct_call == 8 ); -#endif - CPPUNIT_ASSERT( MovableStruct::nb_assignment_call == 0 ); - CPPUNIT_ASSERT( MovableStruct::nb_destruct_call == 4 ); - - MovableStruct::reset(); - vect.erase(vect.begin(), vect.begin() + 2 ); - - // vect contains 6 elements -#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC) - CPPUNIT_ASSERT( MovableStruct::nb_mv_construct_call == 6 ); - CPPUNIT_ASSERT( MovableStruct::nb_destruct_call == 8 ); -#else - CPPUNIT_ASSERT_EQUAL( MovableStruct::nb_assignment_call, 6 ); - CPPUNIT_ASSERT( MovableStruct::nb_destruct_call == 2 ); -#endif - - MovableStruct::reset(); - vect.erase(vect.end() - 2, vect.end()); - - // vect contains 4 elements - CPPUNIT_ASSERT( MovableStruct::nb_mv_construct_call == 0 ); - CPPUNIT_ASSERT( MovableStruct::nb_destruct_call == 2 ); - - MovableStruct::reset(); - vect.erase(vect.begin()); - - // vect contains 3 elements -#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC) - CPPUNIT_ASSERT( MovableStruct::nb_mv_construct_call == 3 ); - CPPUNIT_ASSERT( MovableStruct::nb_destruct_call == 4 ); -#else - CPPUNIT_ASSERT( MovableStruct::nb_assignment_call == 3 ); - CPPUNIT_ASSERT( MovableStruct::nb_destruct_call == 1 ); -#endif - - MovableStruct::reset(); - } - //vect with 3 elements and v2 with 4 elements are now out of scope - CPPUNIT_ASSERT( MovableStruct::nb_destruct_call == 3 + 4 ); - } -} - -void MoveConstructorTest::move_traits_vec_complete() -{ - { - { - vector<CompleteMovableStruct> vect; - vect.push_back(CompleteMovableStruct()); - vect.push_back(CompleteMovableStruct()); - vect.push_back(CompleteMovableStruct()); - vect.push_back(CompleteMovableStruct()); - - // vect contains 4 elements - CPPUNIT_ASSERT( CompleteMovableStruct::nb_dft_construct_call == 4 ); -#if defined (STLPORT) -# if !defined (_STLP_NO_MOVE_SEMANTIC) - CPPUNIT_ASSERT( CompleteMovableStruct::nb_cpy_construct_call == 4 ); - CPPUNIT_ASSERT( CompleteMovableStruct::nb_mv_construct_call == 3 ); - CPPUNIT_ASSERT( CompleteMovableStruct::nb_destruct_call == 4 ); -# else - CPPUNIT_ASSERT( CompleteMovableStruct::nb_cpy_construct_call == 7 ); - CPPUNIT_ASSERT( CompleteMovableStruct::nb_destruct_call == 7 ); -# endif -#elif !defined (_MSC_VER) - CPPUNIT_ASSERT( CompleteMovableStruct::nb_cpy_construct_call == 7 ); - CPPUNIT_ASSERT( CompleteMovableStruct::nb_destruct_call == 7 ); -#else - CPPUNIT_ASSERT( CompleteMovableStruct::nb_cpy_construct_call == 14 ); - CPPUNIT_ASSERT( CompleteMovableStruct::nb_destruct_call == 14 ); -#endif - - // Following test violate requirements to sequiences (23.1.1 Table 67) - /* - vect.insert(vect.begin() + 2, vect.begin(), vect.end()); - - // vect contains 8 elements - CPPUNIT_ASSERT( CompleteMovableStruct::nb_dft_construct_call == 4 ); - CPPUNIT_ASSERT( CompleteMovableStruct::nb_cpy_construct_call == 8 ); - CPPUNIT_ASSERT( CompleteMovableStruct::nb_mv_construct_call == 7 ); - CPPUNIT_ASSERT( CompleteMovableStruct::nb_destruct_call == 4 ); - */ - - CompleteMovableStruct::reset(); - vector<CompleteMovableStruct> v2 = vect; - - CPPUNIT_ASSERT( CompleteMovableStruct::nb_dft_construct_call == 0 ); - CPPUNIT_ASSERT( CompleteMovableStruct::nb_cpy_construct_call == 4 ); - CPPUNIT_ASSERT( CompleteMovableStruct::nb_mv_construct_call == 0 ); - CPPUNIT_ASSERT( CompleteMovableStruct::nb_destruct_call == 0 ); - - CompleteMovableStruct::reset(); - vect.insert(vect.begin() + 2, v2.begin(), v2.end()); - - // vect contains 8 elements - CPPUNIT_ASSERT( CompleteMovableStruct::nb_dft_construct_call == 0 ); -#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC) - CPPUNIT_ASSERT( CompleteMovableStruct::nb_cpy_construct_call == 4 ); - CPPUNIT_ASSERT( CompleteMovableStruct::nb_mv_construct_call == 4 ); - CPPUNIT_ASSERT( CompleteMovableStruct::nb_destruct_call == 0 ); -#else - CPPUNIT_ASSERT( CompleteMovableStruct::nb_cpy_construct_call == 8 ); - CPPUNIT_ASSERT( CompleteMovableStruct::nb_destruct_call == 4 ); -#endif - - CompleteMovableStruct::reset(); - vect.erase(vect.begin(), vect.begin() + 2); - - // vect contains 6 elements -#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC) - CPPUNIT_ASSERT( CompleteMovableStruct::nb_mv_construct_call == 6 ); -#else - CPPUNIT_ASSERT( CompleteMovableStruct::nb_assignment_call == 6 ); -#endif - CPPUNIT_ASSERT( CompleteMovableStruct::nb_destruct_call == 2 ); - - CompleteMovableStruct::reset(); - vect.erase(vect.end() - 2, vect.end()); - - // vect contains 4 elements - CPPUNIT_ASSERT( CompleteMovableStruct::nb_mv_construct_call == 0 ); - CPPUNIT_ASSERT( CompleteMovableStruct::nb_destruct_call == 2 ); - - CompleteMovableStruct::reset(); - vect.erase(vect.begin()); - - // vect contains 3 elements -#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC) - CPPUNIT_ASSERT( CompleteMovableStruct::nb_mv_construct_call == 3 ); -#else - CPPUNIT_ASSERT( CompleteMovableStruct::nb_assignment_call == 3 ); -#endif - CPPUNIT_ASSERT( CompleteMovableStruct::nb_destruct_call == 1 ); - - CompleteMovableStruct::reset(); - } - //vect with 3 elements and v2 with 4 elements are now out of scope - CPPUNIT_ASSERT( CompleteMovableStruct::nb_destruct_call == 3 + 4 ); - } -} - -void MoveConstructorTest::move_traits_deq() -{ - { - MovableStruct::reset(); - { - deque<MovableStruct> deq; - deq.push_back(MovableStruct()); - deq.push_back(MovableStruct()); - deq.push_back(MovableStruct()); - deq.push_back(MovableStruct()); - - // deq contains 4 elements - CPPUNIT_ASSERT( MovableStruct::nb_dft_construct_call == 4 ); - CPPUNIT_ASSERT( MovableStruct::nb_cpy_construct_call == 4 ); - CPPUNIT_ASSERT( MovableStruct::nb_mv_construct_call == 0 ); - CPPUNIT_ASSERT( MovableStruct::nb_destruct_call == 4 ); - - // Following test violate requirements to sequiences (23.1.1 Table 67) - /* - deq.insert(deq.begin() + 2, deq.begin(), deq.end()); - // deq contains 8 elements - CPPUNIT_ASSERT( MovableStruct::nb_dft_construct_call == 4 ); - CPPUNIT_ASSERT( MovableStruct::nb_cpy_construct_call == 8 ); - CPPUNIT_ASSERT( MovableStruct::nb_mv_construct_call == 7 ); - CPPUNIT_ASSERT( MovableStruct::nb_destruct_call == 11 ); - */ - - MovableStruct::reset(); - deque<MovableStruct> d2 = deq; - - CPPUNIT_ASSERT( MovableStruct::nb_dft_construct_call == 0 ); - CPPUNIT_ASSERT( MovableStruct::nb_cpy_construct_call == 4 ); - CPPUNIT_ASSERT( MovableStruct::nb_mv_construct_call == 0 ); - CPPUNIT_ASSERT( MovableStruct::nb_destruct_call == 0 ); - - MovableStruct::reset(); - deq.insert(deq.begin() + 2, d2.begin(), d2.end() ); - - // deq contains 8 elements - CPPUNIT_ASSERT( MovableStruct::nb_dft_construct_call == 0 ); - CPPUNIT_ASSERT( MovableStruct::nb_cpy_construct_call == 4 ); -#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC) - CPPUNIT_ASSERT( MovableStruct::nb_mv_construct_call == 2 ); - CPPUNIT_ASSERT( MovableStruct::nb_destruct_call == 2 ); -#else - CPPUNIT_ASSERT( MovableStruct::nb_assignment_call == 2 ); - CPPUNIT_ASSERT( MovableStruct::nb_destruct_call == 0 ); -#endif - - MovableStruct::reset(); - deq.erase(deq.begin() + 1, deq.begin() + 3 ); - - // deq contains 6 elements -#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC) - CPPUNIT_ASSERT( MovableStruct::nb_mv_construct_call == 1 ); - CPPUNIT_ASSERT( MovableStruct::nb_destruct_call == 3 ); -#else - //Following check is highly deque implementation dependant so - //it might not always work... - CPPUNIT_ASSERT( MovableStruct::nb_assignment_call == 1 ); - CPPUNIT_ASSERT( MovableStruct::nb_destruct_call == 2 ); -#endif - - MovableStruct::reset(); - deq.erase(deq.end() - 3, deq.end() - 1); - - // deq contains 4 elements -#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC) - CPPUNIT_ASSERT( MovableStruct::nb_mv_construct_call == 1 ); - CPPUNIT_ASSERT( MovableStruct::nb_destruct_call == 3 ); -#else - CPPUNIT_ASSERT( MovableStruct::nb_assignment_call == 1 ); - CPPUNIT_ASSERT( MovableStruct::nb_destruct_call == 2 ); -#endif - - MovableStruct::reset(); - deq.erase(deq.begin()); - - // deq contains 3 elements -#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC) - CPPUNIT_ASSERT( MovableStruct::nb_mv_construct_call == 0 ); -#else - CPPUNIT_ASSERT( MovableStruct::nb_assignment_call == 0 ); -#endif - CPPUNIT_ASSERT( MovableStruct::nb_destruct_call == 1 ); - - MovableStruct::reset(); - } - //deq with 3 elements and d2 with 4 elements are now out of scope - CPPUNIT_ASSERT( MovableStruct::nb_destruct_call == 3 + 4 ); - } -} - -void MoveConstructorTest::move_traits_deq_complete() -{ - { - CompleteMovableStruct::reset(); - { - deque<CompleteMovableStruct> deq; - deq.push_back(CompleteMovableStruct()); - deq.push_back(CompleteMovableStruct()); - deq.push_back(CompleteMovableStruct()); - deq.push_back(CompleteMovableStruct()); - - // deq contains 4 elements - CPPUNIT_ASSERT( CompleteMovableStruct::nb_dft_construct_call == 4 ); - CPPUNIT_ASSERT( CompleteMovableStruct::nb_cpy_construct_call == 4 ); - CPPUNIT_ASSERT( CompleteMovableStruct::nb_mv_construct_call == 0 ); - CPPUNIT_ASSERT( CompleteMovableStruct::nb_destruct_call == 4 ); - - // Following test violate requirements to sequiences (23.1.1 Table 67) - /* - deq.insert(deq.begin() + 2, deq.begin(), deq.end()); - - // deq contains 8 elements - CPPUNIT_ASSERT( CompleteMovableStruct::nb_dft_construct_call == 4 ); - CPPUNIT_ASSERT( CompleteMovableStruct::nb_cpy_construct_call == 8 ); - CPPUNIT_ASSERT( CompleteMovableStruct::nb_mv_construct_call == 7 ); - CPPUNIT_ASSERT( CompleteMovableStruct::nb_destruct_call == 4 ); - */ - - CompleteMovableStruct::reset(); - deque<CompleteMovableStruct> d2 = deq; - - CPPUNIT_ASSERT( CompleteMovableStruct::nb_dft_construct_call == 0 ); - CPPUNIT_ASSERT( CompleteMovableStruct::nb_cpy_construct_call == 4 ); - CPPUNIT_ASSERT( CompleteMovableStruct::nb_mv_construct_call == 0 ); - CPPUNIT_ASSERT( CompleteMovableStruct::nb_destruct_call == 0 ); - - CompleteMovableStruct::reset(); - deq.insert(deq.begin() + 2, d2.begin(), d2.end()); - - // deq contains 8 elements - CPPUNIT_ASSERT( CompleteMovableStruct::nb_dft_construct_call == 0 ); - CPPUNIT_ASSERT( CompleteMovableStruct::nb_cpy_construct_call == 4 ); -#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC) - CPPUNIT_ASSERT( CompleteMovableStruct::nb_mv_construct_call == 2 ); -#else - CPPUNIT_ASSERT( CompleteMovableStruct::nb_assignment_call == 2 ); -#endif - CPPUNIT_ASSERT( CompleteMovableStruct::nb_destruct_call == 0 ); - - CompleteMovableStruct::reset(); - deq.erase(deq.begin() + 1, deq.begin() + 3); - - // deq contains 6 elements -#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC) - CPPUNIT_ASSERT( CompleteMovableStruct::nb_mv_construct_call == 1 ); -#else - CPPUNIT_ASSERT( CompleteMovableStruct::nb_assignment_call == 1 ); -#endif - CPPUNIT_ASSERT( CompleteMovableStruct::nb_destruct_call == 2 ); - - CompleteMovableStruct::reset(); - deq.erase(deq.end() - 3, deq.end() - 1); - - // deq contains 4 elements -#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC) - CPPUNIT_ASSERT( CompleteMovableStruct::nb_mv_construct_call == 1 ); -#else - CPPUNIT_ASSERT( CompleteMovableStruct::nb_assignment_call == 1 ); -#endif - CPPUNIT_ASSERT( CompleteMovableStruct::nb_destruct_call == 2 ); - - CompleteMovableStruct::reset(); - deq.erase(deq.begin()); - - // deq contains 3 elements - CPPUNIT_ASSERT( CompleteMovableStruct::nb_mv_construct_call == 0 ); - CPPUNIT_ASSERT( CompleteMovableStruct::nb_assignment_call == 0 ); - CPPUNIT_ASSERT( CompleteMovableStruct::nb_destruct_call == 1 ); - - CompleteMovableStruct::reset(); - } - //deq with 3 elements and v2 with 4 elements are now out of scope - CPPUNIT_ASSERT( CompleteMovableStruct::nb_destruct_call == 3 + 4 ); - } -} |