⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 swap_test.cpp

📁 stl的源码
💻 CPP
字号:
#include <vector>#include <algorithm>#include <vector>#include <queue>#if 0 /* temporary: investigation of problem with swap */#include <iostream>#include <typeinfo>#endif#include "cppunit/cppunit_proxy.h"#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)using namespace std;#endif//// TestCase class//class SwapTest : public CPPUNIT_NS::TestCase{  CPPUNIT_TEST_SUITE(SwapTest);  CPPUNIT_TEST(swap1);  CPPUNIT_TEST(swprnge1);  CPPUNIT_TEST(swap_container_non_spec);#if defined (STLPORT) && \   !defined (_STLP_FUNCTION_TMPL_PARTIAL_ORDER) && !defined (_STLP_USE_PARTIAL_SPEC_WORKAROUND)  CPPUNIT_IGNORE;#endif  CPPUNIT_TEST(swap_container_spec);  CPPUNIT_TEST_SUITE_END();protected:  void swap1();  void swprnge1();  void swap_container_non_spec();  void swap_container_spec();};CPPUNIT_TEST_SUITE_REGISTRATION(SwapTest);//// tests implementation//void SwapTest::swap1(){  int a = 42;  int b = 19;  swap(a, b);  CPPUNIT_ASSERT(a==19);  CPPUNIT_ASSERT(b==42);}void SwapTest::swprnge1(){  char word1[] = "World";  char word2[] = "Hello";  swap_ranges((char*)word1, (char*)word1 + ::strlen(word1), (char*)word2);  CPPUNIT_ASSERT(!strcmp(word1, "Hello"));  CPPUNIT_ASSERT(!strcmp(word2, "World"));}class Obj{  public:    Obj() :        v( 0 )      { }    Obj( const Obj& ) :        v( 1 )      { }    Obj& operator =( const Obj& )      { v = 2; return *this; }    int v;};/* * Following two tests check the corectness of specialization of swap(): * for containers with container::swap method swap( a, b ) should * use a.swap( b ), but don't try to do this substitution for container * without swap method (in this case swap should be made via explicit members * exchange; this assume usage of temporary object) * */void SwapTest::swap_container_non_spec(){  queue<Obj> v1;  queue<Obj> v2;  v1.push( Obj() );  v1.back().v = -1;  v1.push( Obj() );  v1.back().v = -2;  v2.push( Obj() );  v2.back().v = 10;    v2.push( Obj() );  v2.back().v = 11;  v2.push( Obj() );  v2.back().v = 12;  CPPUNIT_CHECK( v1.size() == 2 );  CPPUNIT_CHECK( v2.size() == 3 );  swap( v1, v2 ); // this shouldn't try make it as v1.swap( v2 ), no queue::swap method!  CPPUNIT_CHECK( v1.size() == 3 );  CPPUNIT_CHECK( v2.size() == 2 );  // either copy constructor or assignment operator  CPPUNIT_CHECK( v1.front().v == 1 || v1.front().v == 2 );  CPPUNIT_CHECK( v1.back().v == 1 || v1.back().v == 2 );  CPPUNIT_CHECK( v2.front().v == 1 || v2.front().v == 2 );  CPPUNIT_CHECK( v2.back().v == 1 || v2.back().v == 2 );}void SwapTest::swap_container_spec(){#if 0 /* temporary: investigation of problem with swap */  if ( typeid(/* _STLP_PRIV */ _SwapImplemented<vector<Obj> >::_Ret) == typeid(_STLP_PRIV __false_type) ) {    cerr << "false type" << endl;  } else if ( typeid(/* _STLP_PRIV */ _SwapImplemented<vector<Obj> >::_Ret) == typeid(_STLP_PRIV __true_type) ) {    cerr << "true type" << endl;  } else {    cerr << "unknown type" << endl;  }#endif /* end of temporary */#if !defined (STLPORT) || \     defined (_STLP_FUNCTION_TMPL_PARTIAL_ORDER) || defined (_STLP_USE_PARTIAL_SPEC_WORKAROUND)  vector<Obj> v1;  vector<Obj> v2;  v1.push_back( Obj() );  v1.push_back( Obj() );  v1[0].v = -1;  v1[1].v = -2;  v2.push_back( Obj() );  v2.push_back( Obj() );  v2.push_back( Obj() );  v2[0].v = 10;  v2[1].v = 11;  v2[2].v = 12;  CPPUNIT_CHECK( v1.size() == 2 );  CPPUNIT_CHECK( v2.size() == 3 );  swap( v1, v2 ); // this should has effect v1.swap( v2 )  CPPUNIT_CHECK( v1.size() == 3 );  CPPUNIT_CHECK( v2.size() == 2 );  CPPUNIT_CHECK( v1[0].v == 10 );  CPPUNIT_CHECK( v1[1].v == 11 );  CPPUNIT_CHECK( v1[2].v == 12 );  CPPUNIT_CHECK( v2[0].v == -1 );  CPPUNIT_CHECK( v2[1].v == -2 );#endif}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -