| 164 | // iterator_tests ------------------------------------------------------------------// |
| 165 | |
| 166 | void iterator_tests() |
| 167 | { |
| 168 | std::cout << "iterator_tests..." << std::endl; |
| 169 | |
| 170 | path itr_ck = ""; |
| 171 | path::const_iterator itr = itr_ck.begin(); |
| 172 | BOOST_TEST(itr == itr_ck.end()); |
| 173 | |
| 174 | itr_ck = "/"; |
| 175 | itr = itr_ck.begin(); |
| 176 | BOOST_TEST(itr->string() == "/"); |
| 177 | BOOST_TEST(++itr == itr_ck.end()); |
| 178 | BOOST_TEST((--itr)->string() == "/"); |
| 179 | |
| 180 | itr_ck = "foo"; |
| 181 | BOOST_TEST(*itr_ck.begin() == std::string("foo")); |
| 182 | BOOST_TEST(boost::next(itr_ck.begin()) == itr_ck.end()); |
| 183 | BOOST_TEST(*boost::prior(itr_ck.end()) == std::string("foo")); |
| 184 | BOOST_TEST(boost::prior(itr_ck.end()) == itr_ck.begin()); |
| 185 | |
| 186 | itr_ck = path("/foo"); |
| 187 | BOOST_TEST((itr_ck.begin())->string() == "/"); |
| 188 | BOOST_TEST(*boost::next(itr_ck.begin()) == std::string("foo")); |
| 189 | BOOST_TEST(boost::next(boost::next(itr_ck.begin())) == itr_ck.end()); |
| 190 | BOOST_TEST(boost::next(itr_ck.begin()) == boost::prior(itr_ck.end())); |
| 191 | BOOST_TEST(*boost::prior(itr_ck.end()) == std::string("foo")); |
| 192 | BOOST_TEST(*boost::prior(boost::prior(itr_ck.end())) == std::string("/")); |
| 193 | BOOST_TEST(boost::prior(boost::prior(itr_ck.end())) == itr_ck.begin()); |
| 194 | |
| 195 | itr_ck = "/foo/bar"; |
| 196 | itr = itr_ck.begin(); |
| 197 | BOOST_TEST(itr->string() == "/"); |
| 198 | BOOST_TEST(*++itr == std::string("foo")); |
| 199 | BOOST_TEST(*++itr == std::string("bar")); |
| 200 | BOOST_TEST(++itr == itr_ck.end()); |
| 201 | PATH_TEST_EQ(*--itr, "bar"); |
| 202 | PATH_TEST_EQ(*--itr, "foo"); |
| 203 | PATH_TEST_EQ(*--itr, "/"); |
| 204 | |
| 205 | itr_ck = "../f"; // previously failed due to short name bug |
| 206 | itr = itr_ck.begin(); |
| 207 | PATH_TEST_EQ(itr->string(), ".."); |
| 208 | PATH_TEST_EQ(*++itr, "f"); |
| 209 | BOOST_TEST(++itr == itr_ck.end()); |
| 210 | PATH_TEST_EQ(*--itr, "f"); |
| 211 | PATH_TEST_EQ(*--itr, ".."); |
| 212 | |
| 213 | // POSIX says treat "/foo/bar/" as "/foo/bar/." |
| 214 | itr_ck = "/foo/bar/"; |
| 215 | itr = itr_ck.begin(); |
| 216 | PATH_TEST_EQ(itr->string(), "/"); |
| 217 | PATH_TEST_EQ(*++itr, "foo"); |
| 218 | BOOST_TEST(itr != itr_ck.end()); |
| 219 | PATH_TEST_EQ(*++itr, "bar"); |
| 220 | BOOST_TEST(itr != itr_ck.end()); |
| 221 | PATH_TEST_EQ(*++itr, "."); |
| 222 | BOOST_TEST(itr != itr_ck.end()); // verify the . isn't also seen as end() |
| 223 | BOOST_TEST(++itr == itr_ck.end()); |