| 329 | // iterator_tests ------------------------------------------------------------------// |
| 330 | |
| 331 | void iterator_tests() |
| 332 | { |
| 333 | std::cout << "iterator_tests..." << std::endl; |
| 334 | |
| 335 | path itr_ck = ""; |
| 336 | path::const_iterator itr = itr_ck.begin(); |
| 337 | BOOST_TEST(itr == itr_ck.end()); |
| 338 | |
| 339 | itr_ck = "/"; |
| 340 | itr = itr_ck.begin(); |
| 341 | BOOST_TEST(itr->string() == "/"); |
| 342 | BOOST_TEST(++itr == itr_ck.end()); |
| 343 | BOOST_TEST((--itr)->string() == "/"); |
| 344 | |
| 345 | itr_ck = "foo"; |
| 346 | BOOST_TEST(*itr_ck.begin() == std::string("foo")); |
| 347 | BOOST_TEST(boost::next(itr_ck.begin()) == itr_ck.end()); |
| 348 | BOOST_TEST(*boost::prior(itr_ck.end()) == std::string("foo")); |
| 349 | BOOST_TEST(boost::prior(itr_ck.end()) == itr_ck.begin()); |
| 350 | |
| 351 | itr_ck = path("/foo"); |
| 352 | BOOST_TEST((itr_ck.begin())->string() == "/"); |
| 353 | BOOST_TEST(*boost::next(itr_ck.begin()) == std::string("foo")); |
| 354 | BOOST_TEST(boost::next(boost::next(itr_ck.begin())) == itr_ck.end()); |
| 355 | BOOST_TEST(boost::next(itr_ck.begin()) == boost::prior(itr_ck.end())); |
| 356 | BOOST_TEST(*boost::prior(itr_ck.end()) == std::string("foo")); |
| 357 | BOOST_TEST(*boost::prior(boost::prior(itr_ck.end())) == std::string("/")); |
| 358 | BOOST_TEST(boost::prior(boost::prior(itr_ck.end())) == itr_ck.begin()); |
| 359 | |
| 360 | itr_ck = "/foo/bar"; |
| 361 | itr = itr_ck.begin(); |
| 362 | path::const_iterator itr_begin = itr; |
| 363 | BOOST_TEST(itr->string() == "/"); |
| 364 | BOOST_TEST(*++itr == std::string("foo")); |
| 365 | BOOST_TEST(*++itr == std::string("bar")); |
| 366 | BOOST_TEST(++itr == itr_ck.end()); |
| 367 | PATH_TEST_EQ(*--itr, "bar"); |
| 368 | PATH_TEST_EQ(*--itr, "foo"); |
| 369 | PATH_TEST_EQ(*--itr, "/"); |
| 370 | BOOST_TEST(itr == itr_begin); |
| 371 | |
| 372 | itr_ck = "../f"; // previously failed due to short name bug |
| 373 | itr_begin = itr = itr_ck.begin(); |
| 374 | PATH_TEST_EQ(itr->string(), ".."); |
| 375 | PATH_TEST_EQ(*++itr, "f"); |
| 376 | BOOST_TEST(++itr == itr_ck.end()); |
| 377 | PATH_TEST_EQ(*--itr, "f"); |
| 378 | PATH_TEST_EQ(*--itr, ".."); |
| 379 | BOOST_TEST(itr == itr_begin); |
| 380 | |
| 381 | // POSIX says treat "/foo/bar/" as "/foo/bar/." |
| 382 | itr_ck = "/foo/bar/"; |
| 383 | itr_begin = itr = itr_ck.begin(); |
| 384 | PATH_TEST_EQ(itr->string(), "/"); |
| 385 | PATH_TEST_EQ(*++itr, "foo"); |
| 386 | BOOST_TEST(itr != itr_ck.end()); |
| 387 | PATH_TEST_EQ(*++itr, "bar"); |
| 388 | BOOST_TEST(itr != itr_ck.end()); |