aboutsummaryrefslogtreecommitdiff
path: root/test/unit/mvctor_traits_test.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'test/unit/mvctor_traits_test.cpp')
-rw-r--r--test/unit/mvctor_traits_test.cpp460
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 );
- }
-}