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

📄 mvctor_test.cpp

📁 symbian 上的stl_port进过编译的。
💻 CPP
📖 第 1 页 / 共 4 页
字号:
    {      //2 values in back:      vect_deque.insert(vect_deque.end() - 2, 2, vector<int>(10));      bufs.insert(bufs.end() - 2, &vect_deque[20].front());      bufs.insert(bufs.end() - 2, &vect_deque[21].front());      CPPUNIT_ASSERT( vect_deque.size() == 24 );#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC)      deque<vector<int> >::iterator dit(vect_deque.begin()), ditEnd(vect_deque.end());      for (size_t i = 0; dit != ditEnd; ++dit, ++i) {        CPPUNIT_ASSERT( bufs[i] == &dit->front() );      }#endif    }    {      //1 value in front:      deque<vector<int> >::iterator ret;      ret = vect_deque.insert(vect_deque.begin() + 2, vector<int>(10));      bufs.insert(bufs.begin() + 2, &vect_deque[2].front());      CPPUNIT_ASSERT( vect_deque.size() == 25 );#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC)      CPPUNIT_ASSERT( &ret->front() == bufs[2] );      deque<vector<int> >::iterator dit(vect_deque.begin()), ditEnd(vect_deque.end());      for (size_t i = 0; dit != ditEnd; ++dit, ++i) {        CPPUNIT_ASSERT( bufs[i] == &dit->front() );      }#endif    }    {      //1 value in back:      deque<vector<int> >::iterator ret;      ret = vect_deque.insert(vect_deque.end() - 2, vector<int>(10));      bufs.insert(bufs.end() - 2, &vect_deque[23].front());      CPPUNIT_ASSERT( vect_deque.size() == 26 );#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC)      CPPUNIT_ASSERT( &ret->front() == bufs[23] );      deque<vector<int> >::iterator dit(vect_deque.begin()), ditEnd(vect_deque.end());      for (size_t i = 0; dit != ditEnd; ++dit, ++i) {        CPPUNIT_ASSERT( bufs[i] == &dit->front() );      }#endif    }  }}void MoveConstructorTest::vector_test(){#if !defined (__DMC__)  //Check the insert range method.  //To the front:  {    vector<vector<int> > vect_vector;    vector<int*> bufs;    vect_vector.assign(3, vector<int>(10));    bufs.push_back(&vect_vector[0].front());    bufs.push_back(&vect_vector[1].front());    bufs.push_back(&vect_vector[2].front());    int nb_insert = 5;    int pos = 1;    while (nb_insert--) {      vector<vector<int> > vect_vect(2, vector<int>(10));      vect_vector.insert(vect_vector.begin() + pos, vect_vect.begin(), vect_vect.end());      bufs.insert(bufs.begin() + pos, &vect_vector[pos].front());      bufs.insert(bufs.begin() + pos + 1, &vect_vector[pos + 1].front());      ++pos;    }    CPPUNIT_ASSERT( vect_vector.size() == 13 );#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC)    for (int i = 0; i < 5; ++i) {      CPPUNIT_ASSERT( bufs[i] == &vect_vector[i].front() );      CPPUNIT_ASSERT( bufs[11 - i] == &vect_vector[11 - i].front() );    }#endif  }  //To the back  {    vector<vector<int> > vect_vector;    vector<int*> bufs;    vect_vector.assign(3, vector<int>(10));    bufs.push_back(&vect_vector[0].front());    bufs.push_back(&vect_vector[1].front());    bufs.push_back(&vect_vector[2].front());    int nb_insert = 5;    //Initialize to 2 to generate a back insertion:    int pos = 2;    while (nb_insert--) {      vector<vector<int> > vect_vect(2, vector<int>(10));      vect_vector.insert(vect_vector.begin() + pos, vect_vect.begin(), vect_vect.end());      bufs.insert(bufs.begin() + pos, &vect_vector[pos].front());      bufs.insert(bufs.begin() + pos + 1, &vect_vector[pos + 1].front());      ++pos;    }    CPPUNIT_ASSERT( vect_vector.size() == 13 );#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC)    for (int i = 0; i < 5; ++i) {      CPPUNIT_ASSERT( bufs[i + 1] == &vect_vector[i + 1].front() );      CPPUNIT_ASSERT( bufs[12 - i] == &vect_vector[12 - i].front() );    }#endif  }  //Check the different erase methods.  {    vector<vector<int> > vect_vector;    vect_vector.assign(20, vector<int>(10));    vector<vector<int> >::iterator vdit(vect_vector.begin()), vditEnd(vect_vector.end());    vector<int*> bufs;    for (; vdit != vditEnd; ++vdit) {      bufs.push_back(&vdit->front());    }    {      // This check, repeated after each operation, check the vector consistency:      vector<vector<int> >::iterator it = vect_vector.end() - 5;      int nb_incr = 0;      for (; it != vect_vector.end() && nb_incr <= 6; ++nb_incr, ++it) {}      CPPUNIT_ASSERT( nb_incr == 5 );    }    {      //erase in front:      vect_vector.erase(vect_vector.begin() + 2);      bufs.erase(bufs.begin() + 2);      CPPUNIT_ASSERT( vect_vector.size() == 19 );#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC)      vector<vector<int> >::iterator dit(vect_vector.begin()), ditEnd(vect_vector.end());      for (size_t i = 0; dit != ditEnd; ++dit, ++i) {        CPPUNIT_ASSERT( bufs[i] == &dit->front() );      }#endif    }    {      vector<vector<int> >::iterator it = vect_vector.end() - 5;      int nb_incr = 0;      for (; it != vect_vector.end() && nb_incr <= 6; ++nb_incr, ++it) {}      CPPUNIT_ASSERT( nb_incr == 5 );    }    {      //erase in the back:      vect_vector.erase(vect_vector.end() - 2);      bufs.erase(bufs.end() - 2);      CPPUNIT_ASSERT( vect_vector.size() == 18 );#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC)      vector<vector<int> >::iterator dit(vect_vector.begin()), ditEnd(vect_vector.end());      for (size_t i = 0; dit != ditEnd; ++dit, ++i) {        CPPUNIT_ASSERT( bufs[i] == &dit->front() );      }#endif    }    {      vector<vector<int> >::iterator it = vect_vector.end() - 5;      int nb_incr = 0;      for (; it != vect_vector.end() && nb_incr < 6; ++nb_incr, ++it) {}      CPPUNIT_ASSERT( nb_incr == 5 );    }    {      //range erase in front      vect_vector.erase(vect_vector.begin() + 3, vect_vector.begin() + 5);      bufs.erase(bufs.begin() + 3, bufs.begin() + 5);      CPPUNIT_ASSERT( vect_vector.size() == 16 );#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC)      vector<vector<int> >::iterator dit(vect_vector.begin()), ditEnd(vect_vector.end());      for (size_t i = 0; dit != ditEnd; ++dit, ++i) {        CPPUNIT_ASSERT( bufs[i] == &dit->front() );      }#endif    }    {      vector<vector<int> >::iterator it = vect_vector.end() - 5;      int nb_incr = 0;      for (; it != vect_vector.end() && nb_incr <= 6; ++nb_incr, ++it) {}      CPPUNIT_ASSERT( nb_incr == 5 );    }    {      //range erase in back      vect_vector.erase(vect_vector.end() - 5, vect_vector.end() - 3);      bufs.erase(bufs.end() - 5, bufs.end() - 3);      CPPUNIT_ASSERT( vect_vector.size() == 14 );#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC)      vector<vector<int> >::iterator dit(vect_vector.begin()), ditEnd(vect_vector.end());      for (size_t i = 0; dit != ditEnd; ++dit, ++i) {        CPPUNIT_ASSERT( bufs[i] == &dit->front() );      }#endif    }  }  //Check the insert value(s)  {    vector<vector<int> > vect_vector;    vect_vector.assign(20, vector<int>(10));    vector<vector<int> >::iterator vdit(vect_vector.begin()), vditEnd(vect_vector.end());    vector<int*> bufs;    for (; vdit != vditEnd; ++vdit) {      bufs.push_back(&vdit->front());    }    {      //2 values in front:      vect_vector.insert(vect_vector.begin() + 2, 2, vector<int>(10));      bufs.insert(bufs.begin() + 2, &vect_vector[2].front());      bufs.insert(bufs.begin() + 3, &vect_vector[3].front());      CPPUNIT_ASSERT( vect_vector.size() == 22 );#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC)      vector<vector<int> >::iterator dit(vect_vector.begin()), ditEnd(vect_vector.end());      for (size_t i = 0; dit != ditEnd; ++dit, ++i) {        CPPUNIT_ASSERT( bufs[i] == &dit->front() );      }#endif    }    {      //2 values in back:      vect_vector.insert(vect_vector.end() - 2, 2, vector<int>(10));      bufs.insert(bufs.end() - 2, &vect_vector[20].front());      bufs.insert(bufs.end() - 2, &vect_vector[21].front());      CPPUNIT_ASSERT( vect_vector.size() == 24 );#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC)      vector<vector<int> >::iterator dit(vect_vector.begin()), ditEnd(vect_vector.end());      for (size_t i = 0; dit != ditEnd; ++dit, ++i) {        CPPUNIT_ASSERT( bufs[i] == &dit->front() );      }#endif    }    {      //1 value in front:      vector<vector<int> >::iterator ret;      ret = vect_vector.insert(vect_vector.begin() + 2, vector<int>(10));      bufs.insert(bufs.begin() + 2, &vect_vector[2].front());      CPPUNIT_ASSERT( vect_vector.size() == 25 );#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC)      CPPUNIT_ASSERT( &ret->front() == bufs[2] );      vector<vector<int> >::iterator dit(vect_vector.begin()), ditEnd(vect_vector.end());      for (size_t i = 0; dit != ditEnd; ++dit, ++i) {        CPPUNIT_ASSERT( bufs[i] == &dit->front() );      }#endif    }    {      //1 value in back:      vector<vector<int> >::iterator ret;      ret = vect_vector.insert(vect_vector.end() - 2, vector<int>(10));      bufs.insert(bufs.end() - 2, &vect_vector[23].front());      CPPUNIT_ASSERT( vect_vector.size() == 26 );#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC)      CPPUNIT_ASSERT( &ret->front() == bufs[23] );      vector<vector<int> >::iterator dit(vect_vector.begin()), ditEnd(vect_vector.end());      for (size_t i = 0; dit != ditEnd; ++dit, ++i) {        CPPUNIT_ASSERT( bufs[i] == &dit->front() );      }#endif    }  }  //The following tests are checking move contructor implementations:  const string long_str("long enough string to force dynamic allocation");  {    //vector move contructor:    vector<vector<string> > vect(10, vector<string>(10, long_str));    vector<string> strs;    size_t index = 0;    while (true) {      vector<vector<string> >::iterator it(vect.begin());      advance(it, index % vect.size());      strs.push_back(it->front());      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 );    }  }  {    //deque move contructor:    vector<deque<string> > vect(10, deque<string>(10, long_str));    vector<string> strs;    size_t index = 0;    while (true) {      vector<deque<string> >::iterator it(vect.begin());      advance(it, index % vect.size());      strs.push_back(it->front());      it->pop_front();      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 );    }  }  {    //list move contructor:    vector<list<string> > vect(10, list<string>(10, long_str));    vector<string> strs;    size_t index = 0;    while (true) {      vector<list<string> >::iterator it(vect.begin());      advance(it, index % vect.size());      strs.push_back(it->front());      it->pop_front();      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 );    }  }#if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS)  {    //slist move contructor:    vector<slist<string> > vect(10, slist<string>(10, long_str));    vector<string> strs;    size_t index = 0;    while (true) {      vector<slist<string> >::iterator it(vect.begin());      advance(it, index % vect.size());      strs.push_back(it->front());      it->pop_front();      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  {    //binary tree move contructor:    multiset<string> ref;    for (size_t i = 0; i < 10; ++i) {      ref.insert(long_str);    }    vector<multiset<string> > vect(10, ref);    vector<string> strs;    size_t index = 0;    while (true) {      vector<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 /* __DMC__ */#if defined (STLPORT)#  if !defined (__BORLANDC__) && !defined (__DMC__)  {    //hash container move contructor:    unordered_multiset<string> ref;    for (size_t i = 0; i < 10; ++i) {

⌨️ 快捷键说明

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