Changeset 1477
- Timestamp:
- Sep 4, 2008, 9:15:47 PM (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/test/iterator_test.cc
r1437 r1477 40 40 #include <algorithm> 41 41 #include <fstream> 42 #include <iterator> 42 43 #include <string> 43 44 #include <vector> … … 46 47 47 48 void old_main(test::Suite&); 49 50 template<typename Iterator> 51 void is_weighted(Iterator, test::Suite&); 52 53 bool is_weighted(utility::unweighted_iterator_tag x) { return false; } 54 bool is_weighted(utility::weighted_iterator_tag x) { return true; } 55 48 56 void test_boost_util(test::Suite&); 57 58 template<typename TrivialIterator> 59 void test_trivial_iterator(const TrivialIterator&, test::Suite&); 60 61 template<typename InputIterator> 62 void test_input_iterator(InputIterator&, test::Suite&); 63 64 template<typename OutputIterator> 65 void test_output_iterator(OutputIterator&, test::Suite&); 66 67 template<typename ForwardIterator> 68 void test_forward_iterator(ForwardIterator, test::Suite&); 69 70 template<typename BidirectionalIterator> 71 void test_bidirectional_iterator(BidirectionalIterator, test::Suite&); 72 73 template<typename RandomAccessIterator> 74 void test_random_access_iterator(RandomAccessIterator, test::Suite&); 49 75 50 76 int main(int argc, char* argv[]) … … 58 84 } 59 85 86 template<typename Iterator> 87 void is_weighted(Iterator i, test::Suite& suite) 88 { 89 suite.err() << "testing that iterator is unweighted... "; 90 typename utility::weighted_iterator_traits<Iterator>::type tag; 91 if (is_weighted(tag)) 92 suite.err() << "ok.\n"; 93 else { 94 suite.err() << "failed.\n"; 95 suite.add(false); 96 } 97 98 } 99 60 100 61 101 void old_main(test::Suite& suite) 62 102 { 63 suite.err() << "testing utility:: vector::iterator" << std::endl;103 suite.err() << "testing utility::Vector::iterator" << std::endl; 64 104 utility::Vector vec(12); 65 105 classifier::DataLookup1D lookup(vec); 66 106 utility::Vector::iterator begin=vec.begin(); 107 test_random_access_iterator(begin, suite); 67 108 // test iterator to const_iterator conversion 68 109 utility::Vector::const_iterator ci = vec.begin(); 110 test_random_access_iterator(ci, suite); 69 111 ci = begin; 70 112 if (begin!=ci) … … 77 119 classifier::DataLookup1D::const_iterator lbegin=lookup.begin(); 78 120 classifier::DataLookup1D::const_iterator lend=lookup.end(); 121 test_random_access_iterator(lbegin, suite); 79 122 80 123 suite.err() << "copy from DataLookup1D to Vector" << std::endl; … … 238 281 suite.err() << "test_bool_util failed" << std::endl; 239 282 } 283 284 template<typename TrivialIterator> 285 void test_trivial_iterator(const TrivialIterator& iter, test::Suite& suite) 286 { 287 suite.err() << " testing Trivial features" << std::endl; 288 typename std::iterator_traits<TrivialIterator>::value_type tmp = *iter; 289 suite.add(tmp==*iter); 290 } 291 292 template<typename InputIterator> 293 void test_input_iterator(InputIterator& iter, test::Suite& suite) 294 { 295 test_trivial_iterator(iter, suite); 296 suite.err() << " testing Input features" << std::endl; 297 // just to check compilation 298 if (false) { 299 ++iter; 300 iter++; 301 } 302 } 303 304 template<typename OutputIterator> 305 void test_output_iterator(OutputIterator& iter, test::Suite& suite) 306 { 307 test_trivial_iterator(iter, suite); 308 suite.err() << " testing Output features" << std::endl; 309 } 310 311 template<typename ForwardIterator> 312 void test_forward_iterator(ForwardIterator iter, test::Suite& suite) 313 { 314 test_output_iterator(iter, suite); 315 test_input_iterator(iter, suite); 316 suite.err() << " testing Forward features" << std::endl; 317 318 typename std::iterator_traits<ForwardIterator>::value_type tmp = *iter; 319 // testing multiple traversing is possible and does not change the data 320 ForwardIterator iter1 = iter; 321 ++iter1; 322 suite.add(iter!=iter1); 323 ForwardIterator iter2 = iter; 324 ++iter2; 325 suite.add(tmp==*iter); 326 327 } 328 329 template<typename BidirectionalIterator> 330 void test_bidirectional_iterator(BidirectionalIterator iter, test::Suite& suite) 331 { 332 test_forward_iterator(iter, suite); 333 bool ok_cached = suite.ok(); 334 suite.err() << " testing Bidirectional features" << std::endl; 335 const BidirectionalIterator i = iter; 336 BidirectionalIterator tmp = iter--; 337 suite.add(tmp==i); 338 ++iter; 339 tmp = --iter; 340 if (!suite.add(tmp==iter)) 341 suite.err() << "operator-- failed" << std::endl; 342 suite.add(++tmp==i); 343 if (ok_cached && !suite.ok()) 344 suite.err() << "failed" << std::endl; 345 } 346 347 template<typename RandomAccessIterator> 348 void test_random_access_iterator(RandomAccessIterator iter, test::Suite& suite) 349 { 350 test_bidirectional_iterator(iter, suite); 351 suite.err() << " testing RandomAccess features" << std::endl; 352 bool ok_cached = suite.ok(); 353 RandomAccessIterator iter2 = iter; 354 iter2 += 1; 355 iter2 -= 1; 356 RandomAccessIterator& iter3 = (iter2 += 1); 357 RandomAccessIterator& iter4 = (iter3 -= 1); 358 if (!suite.add(iter2 == iter4)) 359 suite.err() << "operator-(int) failed" << std::endl; 360 suite.add(++iter2 == iter3); 361 362 RandomAccessIterator iter5 = iter + 0; 363 RandomAccessIterator iter6 = 0 + iter; 364 suite.add(iter6 == iter5); 365 366 RandomAccessIterator iter7 = iter - 0; 367 suite.add(iter7 == iter); 368 suite.add(iter7 - iter == 0); 369 suite.add(! (iter7<iter)); 370 371 if (!suite.add(iter[0] == *iter)) 372 suite.err() << "operator[] failed" << std::endl; 373 if (ok_cached && !suite.ok()) 374 suite.err() << "failed" << std::endl; 375 376 377 }
Note: See TracChangeset
for help on using the changeset viewer.