zip_iterator_test.cpp

来自「Boost provides free peer-reviewed portab」· C++ 代码 · 共 834 行 · 第 1/2 页

CPP
834
字号
  if(!(zip_it_run != zip_it_run_copy) && zip_it_run != ++zip_it_run_copy)  {    ++num_successful_tests;    std::cout << "OK" << std::endl;  }  else  {    ++num_failed_tests = 0;    std::cout << "not OK" << std::endl;  }  /////////////////////////////////////////////////////////////////////////////  //  // Zip iterator less than  //  /////////////////////////////////////////////////////////////////////////////    std::cout << "Zip iterator less than:                      "            << std::flush;    // Note: zip_it_run_copy == zip_it_run + 1  //  if( zip_it_run < zip_it_run_copy  &&      !( zip_it_run < --zip_it_run_copy) &&       zip_it_run == zip_it_run_copy    )  {    ++num_successful_tests;    std::cout << "OK" << std::endl;  }  else  {    ++num_failed_tests = 0;    std::cout << "not OK" << std::endl;  }  /////////////////////////////////////////////////////////////////////////////  //  // Zip iterator less than or equal  //  /////////////////////////////////////////////////////////////////////////////    std::cout << "zip iterator less than or equal:             "            << std::flush;    // Note: zip_it_run_copy == zip_it_run  //  ++zip_it_run;  zip_it_run_copy += 2;  if( zip_it_run <= zip_it_run_copy &&       zip_it_run <= --zip_it_run_copy &&       !( zip_it_run <= --zip_it_run_copy) &&       zip_it_run <= zip_it_run    )  {    ++num_successful_tests;    std::cout << "OK" << std::endl;  }  else  {    ++num_failed_tests = 0;    std::cout << "not OK" << std::endl;  }  /////////////////////////////////////////////////////////////////////////////  //  // Zip iterator greater than  //  /////////////////////////////////////////////////////////////////////////////    std::cout << "Zip iterator greater than:                   "            << std::flush;    // Note: zip_it_run_copy == zip_it_run - 1  //  if( zip_it_run > zip_it_run_copy &&       !( zip_it_run > ++zip_it_run_copy) &&       zip_it_run == zip_it_run_copy    )  {    ++num_successful_tests;    std::cout << "OK" << std::endl;  }  else  {    ++num_failed_tests = 0;    std::cout << "not OK" << std::endl;  }  /////////////////////////////////////////////////////////////////////////////  //  // Zip iterator greater than or equal  //  /////////////////////////////////////////////////////////////////////////////    std::cout << "Zip iterator greater than or equal:          "            << std::flush;  ++zip_it_run;    // Note: zip_it_run == zip_it_run_copy + 1  //  if( zip_it_run >= zip_it_run_copy &&       --zip_it_run >= zip_it_run_copy &&       ! (zip_it_run >= ++zip_it_run_copy)     )  {    ++num_successful_tests;    std::cout << "OK" << std::endl;  }  else  {    ++num_failed_tests = 0;    std::cout << "not OK" << std::endl;  }  /////////////////////////////////////////////////////////////////////////////  //  // Zip iterator + int  //  /////////////////////////////////////////////////////////////////////////////  std::cout << "Zip iterator + int:                          "            << std::flush;  // Note: zip_it_run == zip_it_run_copy - 1  //  zip_it_run = zip_it_run + 2;  ++zip_it_run_copy;  if( zip_it_run == zip_it_run_copy && zip_it_run == zip_it_begin + 3 )  {    ++num_successful_tests;    std::cout << "OK" << std::endl;  }  else  {    ++num_failed_tests = 0;    std::cout << "not OK" << std::endl;  }  /////////////////////////////////////////////////////////////////////////////  //  // Zip iterator - int  //  /////////////////////////////////////////////////////////////////////////////  std::cout << "Zip iterator - int:                          "            << std::flush;    // Note: zip_it_run == zip_it_run_copy, and both are at end position  //   zip_it_run = zip_it_run - 2;  --zip_it_run_copy;  --zip_it_run_copy;    if( zip_it_run == zip_it_run_copy && (zip_it_run - 1) == zip_it_begin )  {    ++num_successful_tests;    std::cout << "OK" << std::endl;  }  else  {    ++num_failed_tests = 0;    std::cout << "not OK" << std::endl;  }  /////////////////////////////////////////////////////////////////////////////  //  // Zip iterator +=  //  /////////////////////////////////////////////////////////////////////////////    std::cout << "Zip iterator +=:                             "            << std::flush;              // Note: zip_it_run == zip_it_run_copy, and both are at begin + 1  //   zip_it_run += 2;  if( zip_it_run == zip_it_begin + 3 )  {    ++num_successful_tests;    std::cout << "OK" << std::endl;  }  else  {    ++num_failed_tests = 0;    std::cout << "not OK" << std::endl;  }  /////////////////////////////////////////////////////////////////////////////  //  // Zip iterator -=  //  /////////////////////////////////////////////////////////////////////////////  std::cout << "Zip iterator -=:                             "            << std::flush;  // Note: zip_it_run is at end position, zip_it_run_copy is at  // begin plus one.  //   zip_it_run -= 2;  if( zip_it_run == zip_it_run_copy )  {    ++num_successful_tests;    std::cout << "OK" << std::endl;  }  else  {    ++num_failed_tests = 0;    std::cout << "not OK" << std::endl;  }  /////////////////////////////////////////////////////////////////////////////  //  // Zip iterator getting member iterators  //  /////////////////////////////////////////////////////////////////////////////    std::cout << "Zip iterator member iterators:               "            << std::flush;              // Note: zip_it_run and zip_it_run_copy are both at  // begin plus one.  //   if( boost::tuples::get<0>(zip_it_run.get_iterator_tuple()) == vect1.begin() + 1 &&      boost::tuples::get<1>(zip_it_run.get_iterator_tuple()) == vect2.begin() + 1    )  {    ++num_successful_tests;    std::cout << "OK" << std::endl;  }  else  {    ++num_failed_tests = 0;    std::cout << "not OK" << std::endl;  }  /////////////////////////////////////////////////////////////////////////////  //  // Making zip iterators  //  /////////////////////////////////////////////////////////////////////////////    std::cout << "Making zip iterators:                        "            << std::flush;  std::vector<boost::tuples::tuple<double, double> >    vect_of_tuples(3);  std::copy(    boost::make_zip_iterator(    boost::make_tuple(      vect1.begin(),       vect2.begin()      )    ),    boost::make_zip_iterator(    boost::make_tuple(      vect1.end(),       vect2.end()      )    ),    vect_of_tuples.begin()  );  if( 42. == boost::tuples::get<0>(*vect_of_tuples.begin()) &&      2.2 == boost::tuples::get<1>(*vect_of_tuples.begin()) &&      43. == boost::tuples::get<0>(*(vect_of_tuples.begin() + 1)) &&      3.3 == boost::tuples::get<1>(*(vect_of_tuples.begin() + 1)) &&      44. == boost::tuples::get<0>(*(vect_of_tuples.begin() + 2)) &&      4.4 == boost::tuples::get<1>(*(vect_of_tuples.begin() + 2))    )  {    ++num_successful_tests;    std::cout << "OK" << std::endl;  }  else  {    ++num_failed_tests = 0;    std::cout << "not OK" << std::endl;  }  /////////////////////////////////////////////////////////////////////////////  //  // Zip iterator non-const --> const conversion  //  /////////////////////////////////////////////////////////////////////////////    std::cout << "Zip iterator non-const to const conversion:  "            << std::flush;    boost::zip_iterator<    boost::tuples::tuple<      std::set<int>::const_iterator,      std::vector<double>::const_iterator      >    >   zip_it_const(    boost::make_tuple(      intset.begin(),       vect2.begin()    )  );  //  boost::zip_iterator<    boost::tuples::tuple<      std::set<int>::iterator,      std::vector<double>::const_iterator      >    >   zip_it_half_const(    boost::make_tuple(      intset.begin(),       vect2.begin()    )  );  //  boost::zip_iterator<    boost::tuples::tuple<      std::set<int>::iterator,      std::vector<double>::iterator      >    >   zip_it_non_const(    boost::make_tuple(      intset.begin(),       vect2.begin()    )  );  zip_it_half_const = ++zip_it_non_const;  zip_it_const = zip_it_half_const;  ++zip_it_const;//  zip_it_non_const = ++zip_it_const;  // Error: can't convert from const to non-const    if( 54 == boost::tuples::get<0>(*zip_it_const) &&      4.4 == boost::tuples::get<1>(*zip_it_const)  &&      53 == boost::tuples::get<0>(*zip_it_half_const)  &&      3.3 == boost::tuples::get<1>(*zip_it_half_const)    )  {    ++num_successful_tests;    std::cout << "OK" << std::endl;  }  else  {    ++num_failed_tests = 0;    std::cout << "not OK" << std::endl;  }  /////////////////////////////////////////////////////////////////////////////  //  // Zip iterator categories  //  /////////////////////////////////////////////////////////////////////////////  std::cout << "Zip iterator categories:                     "            << std::flush;              // The big iterator of the previous test has vector, list, and set iterators.  // Therefore, it must be bidirectional, but not random access.  bool bBigItIsBidirectionalIterator = boost::is_convertible<    boost::iterator_traversal<zip_it_12_type>::type        , boost::bidirectional_traversal_tag        >::value;  bool bBigItIsRandomAccessIterator = boost::is_convertible<    boost::iterator_traversal<zip_it_12_type>::type        , boost::random_access_traversal_tag        >::value;  // A combining iterator with all vector iterators must have random access  // traversal.  //  typedef boost::zip_iterator<    boost::tuples::tuple<      std::vector<double>::const_iterator,       std::vector<double>::const_iterator      >    > all_vects_type;    bool bAllVectsIsRandomAccessIterator = boost::is_convertible<    boost::iterator_traversal<all_vects_type>::type        , boost::random_access_traversal_tag    >::value;  // The big test.  if( bBigItIsBidirectionalIterator &&      ! bBigItIsRandomAccessIterator &&      bAllVectsIsRandomAccessIterator    )  {    ++num_successful_tests;    std::cout << "OK" << std::endl;  }  else  {    ++num_failed_tests = 0;    std::cout << "not OK" << std::endl;  }  // Done  //  std::cout << "\nTest Result:"            << "\n============"            << "\nNumber of successful tests: " << static_cast<unsigned int>(num_successful_tests)            << "\nNumber of failed tests: " << static_cast<unsigned int>(num_failed_tests)            << std::endl;  return num_failed_tests;}

⌨️ 快捷键说明

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