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

📄 mvctor_test.cpp

📁 symbian 上的stl_port进过编译的。
💻 CPP
📖 第 1 页 / 共 4 页
字号:
      ref.insert(long_str);    }    vector<unordered_multiset<string> > vect(10, ref);    vector<string> strs;    size_t index = 0;    while (true) {      vector<unordered_multiset<string> >::iterator it(vect.begin());      advance(it, index % vect.size());      strs.push_back(*it->begin());      it->erase(it->begin());      if (it->empty()) {        vect.erase(it);        if (vect.empty())          break;      }      index += 3;    }    CPPUNIT_ASSERT( strs.size() == 10 * 10 );    vector<string>::iterator it(strs.begin()), itEnd(strs.end());    for (; it != itEnd; ++it) {      CPPUNIT_ASSERT( *it == long_str );    }  }#  endif#endif}struct MovableStruct {  MovableStruct() { ++nb_dft_construct_call; }  MovableStruct(MovableStruct const&) { ++nb_cpy_construct_call; }#  if defined (STLPORT)  MovableStruct(__move_source<MovableStruct>) { ++nb_mv_construct_call; }#  endif  ~MovableStruct() { ++nb_destruct_call; }  MovableStruct& operator = (const MovableStruct&) {    ++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;  //Dummy data just to control struct sizeof  //As node allocator implementation align memory blocks on 2 * sizeof(void*)  //we give MovableStruct the same size in order to have expected allocation  //and not more  void* dummy_data[2];};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)namespace std {  _STLP_TEMPLATE_NULL  struct __move_traits<MovableStruct> {    typedef __true_type implemented;    typedef __false_type complete;  };}#  endifstruct CompleteMovableStruct {  CompleteMovableStruct() { ++nb_dft_construct_call; }  CompleteMovableStruct(CompleteMovableStruct const&) { ++nb_cpy_construct_call; }#  if defined (STLPORT)  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)namespace std {  _STLP_TEMPLATE_NULL  struct __move_traits<CompleteMovableStruct> {    typedef __true_type implemented;    typedef __true_type complete;  };}#  endifvoid MoveConstructorTest::move_traits(){  {    {      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 );  }  {    {      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 );#  else      CPPUNIT_ASSERT( CompleteMovableStruct::nb_cpy_construct_call == 7 );#  endif      CPPUNIT_ASSERT( CompleteMovableStruct::nb_destruct_call == 4 );#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)#  if !defined (_STLP_NO_MOVE_SEMANTIC)      CPPUNIT_ASSERT( CompleteMovableStruct::nb_cpy_construct_call == 4 );      CPPUNIT_ASSERT( CompleteMovableStruct::nb_mv_construct_call == 4 );#  else      CPPUNIT_ASSERT( CompleteMovableStruct::nb_cpy_construct_call == 8 );#  endif      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 );  }  {    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

⌨️ 快捷键说明

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