📄 mvctor_traits_test.cpp
字号:
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 ); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -