//  path_test program  -----------------------------------------------------------------//

//  Copyright Beman Dawes 2002, 2008
//  Copyright Vladimir Prus 2002

//  Use, modification, and distribution is subject to the Boost Software
//  License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
//  http://www.boost.org/LICENSE_1_0.txt)

//  See library home page at http://www.boost.org/libs/filesystem

//  basic_path's stem(), extension(), and replace_extension() tests are based
//  on basename(), extension(), and change_extension() tests from the original
//  convenience_test.cpp by Vladimir Prus.

#define BOOST_FILESYSTEM_VERSION 3

#include <boost/config.hpp>

# if defined( BOOST_NO_STD_WSTRING )
#   error Configuration not supported: Boost.Filesystem V3 and later requires std::wstring support
# endif

#include <boost/config/warning_disable.hpp>

//  See deprecated_test for tests of deprecated features
#ifndef BOOST_FILESYSTEM_NO_DEPRECATED 
#  define BOOST_FILESYSTEM_NO_DEPRECATED
#endif
#ifndef BOOST_SYSTEM_NO_DEPRECATED 
#  define BOOST_SYSTEM_NO_DEPRECATED
#endif

#include <boost/filesystem/operations.hpp>
#include <boost/utility.hpp>
#include <iostream>
#include <sstream>
#include <string>
#include <vector>
#include <cstring>
#include <cassert>

namespace fs = boost::filesystem;
using boost::filesystem::path;

#include <boost/detail/lightweight_test.hpp>

#define PATH_CHECK(a, b) check(a, b, __FILE__, __LINE__)
#define CHECK_EQUAL(a,b) check_equal(a, b, __FILE__, __LINE__)

namespace
{
  std::string platform(BOOST_PLATFORM);

  void check(const fs::path & source,
              const std::string & expected, const char* file, int line)
  {
    if (source.string() == expected)
      return;

    std::cout << file
              << '(' << line << "): source: \"" << source
              << "\" != expected: \"" << expected
              << "\"" << std::endl;

    ++::boost::detail::test_errors();
  }

  void check_equal(const fs::path & source,
              const std::string & expected, const char* file, int line)
  {
    if (source == expected) return;

    ++::boost::detail::test_errors();

    std::cout << file << '(' << line << "): source: \"" << source
              << "\" != expected: \"" << expected
              << "\"" << std::endl;
  }

  path p1("fe/fi/fo/fum");
  path p2(p1);
  path p3;
  path p4("foobar");
  path p5;

  //  exception_tests  -----------------------------------------------------------------//

  void exception_tests()
  {
    std::cout << "exception_tests..." << std::endl;
    const std::string str_1("string-1");
    boost::system::error_code ec(12345, boost::system::system_category());
    try { throw fs::filesystem_error(str_1, ec); }
    catch (const fs::filesystem_error & ex)
    {
      //std::cout << ex.what() << "*" << std::endl;
      //BOOST_TEST(std::strcmp(ex.what(),
      //  "string-1: Unknown error") == 0);
      BOOST_TEST(ex.code() == ec);
    }

    try { throw fs::filesystem_error(str_1, "p1", "p2", ec); }
    catch (const fs::filesystem_error & ex)
    {
      //std::cout << ex.what() << "*" << std::endl;                    
      //BOOST_TEST(std::strcmp(ex.what(),
      //  "string-1: Unknown error: \"p1\", \"p2\"") == 0);
      BOOST_TEST(ex.code() == ec);
      BOOST_TEST(ex.path1() == "p1");
      BOOST_TEST(ex.path2() == "p2");
    }
  }

  //  overload_tests  ------------------------------------------------------------------//

  // These verify various overloads don't cause compiler errors
  // They pre-date operations_unit_test.cpp

  void overload_tests()
  {
    std::cout << "overload_tests..." << std::endl;

    fs::exists(p1);
    fs::exists("foo");
    fs::exists(std::string("foo"));

    fs::exists(p1 / path("foo"));
    fs::exists(p1 / "foo");
    fs::exists(p1 / std::string("foo"));

    fs::exists("foo" / p1);
    fs::exists(std::string("foo") / p1);

    p4 /= path("foo");
    p4 /= "foo";
    p4 /= std::string("foo");
  }

  //  iterator_tests  ------------------------------------------------------------------//

  void iterator_tests()
  {
    std::cout << "iterator_tests..." << std::endl;

    path itr_ck = "";
    path::const_iterator itr = itr_ck.begin();
    BOOST_TEST(itr == itr_ck.end());

    itr_ck = "/";
    itr = itr_ck.begin();
    BOOST_TEST(*itr == std::string("/"));
    BOOST_TEST(++itr == itr_ck.end());
    BOOST_TEST(*--itr == std::string("/"));

    itr_ck = "foo";
    BOOST_TEST(*itr_ck.begin() == std::string("foo"));
    BOOST_TEST(boost::next(itr_ck.begin()) == itr_ck.end());
    BOOST_TEST(*boost::prior(itr_ck.end()) == std::string("foo"));
    BOOST_TEST(boost::prior(itr_ck.end()) == itr_ck.begin());

    itr_ck = path("/foo");
    BOOST_TEST(*itr_ck.begin() == std::string("/"));
    BOOST_TEST(*boost::next(itr_ck.begin()) == std::string("foo"));
    BOOST_TEST(boost::next(boost::next(itr_ck.begin())) == itr_ck.end());
    BOOST_TEST(boost::next(itr_ck.begin()) == boost::prior(itr_ck.end()));
    BOOST_TEST(*boost::prior(itr_ck.end()) == std::string("foo"));
    BOOST_TEST(*boost::prior(boost::prior(itr_ck.end())) == std::string("/"));
    BOOST_TEST(boost::prior(boost::prior(itr_ck.end())) == itr_ck.begin());

    itr_ck = "/foo/bar";
    itr = itr_ck.begin();
    BOOST_TEST(*itr == std::string("/"));
    BOOST_TEST(*++itr == std::string("foo"));
    BOOST_TEST(*++itr == std::string("bar"));
    BOOST_TEST(++itr == itr_ck.end());
    CHECK_EQUAL(*--itr, "bar");
    CHECK_EQUAL(*--itr, "foo");
    CHECK_EQUAL(*--itr, "/");

    itr_ck = "../f"; // previously failed due to short name bug
    itr = itr_ck.begin();
    CHECK_EQUAL(*itr, "..");
    CHECK_EQUAL(*++itr, "f");
    BOOST_TEST(++itr == itr_ck.end());
    CHECK_EQUAL(*--itr, "f");
    CHECK_EQUAL(*--itr, "..");

    // POSIX says treat "/foo/bar/" as "/foo/bar/."
    itr_ck = "/foo/bar/";
    itr = itr_ck.begin();
    CHECK_EQUAL(*itr, "/");
    CHECK_EQUAL(*++itr, "foo");
    CHECK_EQUAL(*++itr, "bar");
    CHECK_EQUAL(*++itr, ".");
    BOOST_TEST(++itr == itr_ck.end());
    CHECK_EQUAL(*--itr, ".");
    CHECK_EQUAL(*--itr, "bar");
    CHECK_EQUAL(*--itr, "foo");
    CHECK_EQUAL(*--itr, "/");

    // POSIX says treat "/f/b/" as "/f/b/."
    itr_ck = "/f/b/";
    itr = itr_ck.begin();
    CHECK_EQUAL(*itr, "/");
    CHECK_EQUAL(*++itr, "f");
    CHECK_EQUAL(*++itr, "b");
    CHECK_EQUAL(*++itr, ".");
    BOOST_TEST(++itr == itr_ck.end());
    CHECK_EQUAL(*--itr, ".");
    CHECK_EQUAL(*--itr, "b");
    CHECK_EQUAL(*--itr, "f");
    CHECK_EQUAL(*--itr, "/");

    itr_ck = "//net";
    itr = itr_ck.begin();
    // two leading slashes are permitted by POSIX (as implementation defined),
    // while for Windows it is always well defined (as a network name)
    CHECK_EQUAL(*itr, "//net");
    BOOST_TEST(++itr == itr_ck.end());
    CHECK_EQUAL(*--itr, "//net");

    itr_ck = "//net/";
    itr = itr_ck.begin();
    CHECK_EQUAL(*itr, "//net");
    CHECK_EQUAL(*++itr, "/");
    BOOST_TEST(++itr == itr_ck.end());
    CHECK_EQUAL(*--itr, "/");
    CHECK_EQUAL(*--itr, "//net");

    itr_ck = "//foo///bar///";
    itr = itr_ck.begin();
    CHECK_EQUAL(*itr, "//foo");
    CHECK_EQUAL(*++itr, "/");
    CHECK_EQUAL(*++itr, "bar");
    CHECK_EQUAL(*++itr, ".");
    BOOST_TEST(++itr == itr_ck.end());
    CHECK_EQUAL(*--itr, ".");
    CHECK_EQUAL(*--itr, "bar");
    CHECK_EQUAL(*--itr, "/");
    CHECK_EQUAL(*--itr, "//foo");

    itr_ck = "///foo///bar///";
    itr = itr_ck.begin();
    // three or more leading slashes are to be treated as a single slash
    CHECK_EQUAL(*itr, "/");
    CHECK_EQUAL(*++itr, "foo");
    CHECK_EQUAL(*++itr, "bar");
    CHECK_EQUAL(*++itr, ".");
    BOOST_TEST(++itr == itr_ck.end());
    CHECK_EQUAL(*--itr, ".");
    CHECK_EQUAL(*--itr, "bar");
    CHECK_EQUAL(*--itr, "foo");
    CHECK_EQUAL(*--itr, "/");

    if (platform == "Windows")
    {
      itr_ck = "c:/";
      itr = itr_ck.begin();
      CHECK_EQUAL(*itr, "c:");
      CHECK_EQUAL(*++itr, "/");
      BOOST_TEST(++itr == itr_ck.end());
      CHECK_EQUAL(*--itr, "/");
      CHECK_EQUAL(*--itr, "c:");

      itr_ck = "c:\\foo";
      itr = itr_ck.begin();
      BOOST_TEST(*itr == std::string("c:"));
      BOOST_TEST(*++itr == std::string("/"));
      BOOST_TEST(*++itr == std::string("foo"));
      BOOST_TEST(++itr == itr_ck.end());
      BOOST_TEST(*--itr == std::string("foo"));
      BOOST_TEST(*--itr == std::string("/"));
      BOOST_TEST(*--itr == std::string("c:"));

      itr_ck = "\\\\\\foo\\\\\\bar\\\\\\";
      itr = itr_ck.begin();
      // three or more leading slashes are to be treated as a single slash
      CHECK_EQUAL(*itr, "/");
      CHECK_EQUAL(*++itr, "foo");
      CHECK_EQUAL(*++itr, "bar");
      CHECK_EQUAL(*++itr, ".");
      BOOST_TEST(++itr == itr_ck.end());
      CHECK_EQUAL(*--itr, ".");
      CHECK_EQUAL(*--itr, "bar");
      CHECK_EQUAL(*--itr, "foo");
      CHECK_EQUAL(*--itr, "/");

      itr_ck = "c:foo";
      itr = itr_ck.begin();
      BOOST_TEST(*itr == std::string("c:"));
      BOOST_TEST(*++itr == std::string("foo"));
      BOOST_TEST(++itr == itr_ck.end());
      BOOST_TEST(*--itr == std::string("foo"));
      BOOST_TEST(*--itr == std::string("c:"));

      itr_ck = "c:foo/";
      itr = itr_ck.begin();
      BOOST_TEST(*itr == std::string("c:"));
      BOOST_TEST(*++itr == std::string("foo"));
      BOOST_TEST(*++itr == std::string("."));
      BOOST_TEST(++itr == itr_ck.end());
      BOOST_TEST(*--itr == std::string("."));
      BOOST_TEST(*--itr == std::string("foo"));
      BOOST_TEST(*--itr == std::string("c:"));

      itr_ck = path("c:");
      BOOST_TEST(*itr_ck.begin() == std::string("c:"));
      BOOST_TEST(next(itr_ck.begin()) == itr_ck.end());
      BOOST_TEST(prior(itr_ck.end()) == itr_ck.begin());
      BOOST_TEST(*prior(itr_ck.end()) == std::string("c:"));

      itr_ck = path("c:/");
      BOOST_TEST(*itr_ck.begin() == std::string("c:"));
      BOOST_TEST(*next(itr_ck.begin()) == std::string("/"));
      BOOST_TEST(next(next(itr_ck.begin())) == itr_ck.end());
      BOOST_TEST(prior(prior(itr_ck.end())) == itr_ck.begin());
      BOOST_TEST(*prior(itr_ck.end()) == std::string("/"));
      BOOST_TEST(*prior(prior(itr_ck.end())) == std::string("c:"));

      itr_ck = path("c:foo");
      BOOST_TEST(*itr_ck.begin() == std::string("c:"));
      BOOST_TEST(*next(itr_ck.begin()) == std::string("foo"));
      BOOST_TEST(next(next(itr_ck.begin())) == itr_ck.end());
      BOOST_TEST(prior(prior(itr_ck.end())) == itr_ck.begin());
      BOOST_TEST(*prior(itr_ck.end()) == std::string("foo"));
      BOOST_TEST(*prior(prior(itr_ck.end())) == std::string("c:"));

      itr_ck = path("c:/foo");
      BOOST_TEST(*itr_ck.begin() == std::string("c:"));
      BOOST_TEST(*next(itr_ck.begin()) == std::string("/"));
      BOOST_TEST(*next(next(itr_ck.begin())) == std::string("foo"));
      BOOST_TEST(next(next(next(itr_ck.begin()))) == itr_ck.end());
      BOOST_TEST(prior(prior(prior(itr_ck.end()))) == itr_ck.begin());
      BOOST_TEST(*prior(itr_ck.end()) == std::string("foo"));
      BOOST_TEST(*prior(prior(itr_ck.end())) == std::string("/"));
      BOOST_TEST(*prior(prior(prior(itr_ck.end()))) == std::string("c:"));

      itr_ck = path("//net");
      BOOST_TEST(*itr_ck.begin() == std::string("//net"));
      BOOST_TEST(next(itr_ck.begin()) == itr_ck.end());
      BOOST_TEST(prior(itr_ck.end()) == itr_ck.begin());
      BOOST_TEST(*prior(itr_ck.end()) == std::string("//net"));

      itr_ck = path("//net/");
      CHECK_EQUAL(*itr_ck.begin(), "//net");
      CHECK_EQUAL(*next(itr_ck.begin()), "/");
      BOOST_TEST(next(next(itr_ck.begin())) == itr_ck.end());
      BOOST_TEST(prior(prior(itr_ck.end())) == itr_ck.begin());
      CHECK_EQUAL(*prior(itr_ck.end()), "/");
      CHECK_EQUAL(*prior(prior(itr_ck.end())), "//net");

      itr_ck = path("//net/foo");
      BOOST_TEST(*itr_ck.begin() == std::string("//net"));
      BOOST_TEST(*next(itr_ck.begin()) == std::string("/"));
      BOOST_TEST(*next(next(itr_ck.begin())) == std::string("foo"));
      BOOST_TEST(next(next(next(itr_ck.begin()))) == itr_ck.end());
      BOOST_TEST(prior(prior(prior(itr_ck.end()))) == itr_ck.begin());
      BOOST_TEST(*prior(itr_ck.end()) == std::string("foo"));
      BOOST_TEST(*prior(prior(itr_ck.end())) == std::string("/"));
      BOOST_TEST(*prior(prior(prior(itr_ck.end()))) == std::string("//net"));

      itr_ck = path("prn:");
      BOOST_TEST(*itr_ck.begin() == std::string("prn:"));
      BOOST_TEST(next(itr_ck.begin()) == itr_ck.end());
      BOOST_TEST(prior(itr_ck.end()) == itr_ck.begin());
      BOOST_TEST(*prior(itr_ck.end()) == std::string("prn:"));
    }
    else
    {
      itr_ck = "///";
      itr = itr_ck.begin();
      CHECK_EQUAL(*itr,  "/");
      BOOST_TEST(++itr == itr_ck.end());
    }
  }

  //  non_member_tests  ----------------------------------------------------------------//

  void non_member_tests()
  {
    std::cout << "non_member_tests..." << std::endl;

    // test non-member functions, particularly operator overloads
                                                               
    path e, e2;
    std::string es, es2;
    char ecs[] = "";
    char ecs2[] = "";

    char acs[] = "a";
    std::string as(acs);
    path a(as);

    char acs2[] = "a";
    std::string as2(acs2);
    path a2(as2);

    char bcs[] = "b";
    std::string bs(bcs);
    path b(bs);

    // swap
    a.swap(b);
    BOOST_TEST(a.string() == "b");
    BOOST_TEST(b.string() == "a");
    fs::swap(a, b);
    BOOST_TEST(a.string() == "a");
    BOOST_TEST(b.string() == "b");

    // probe operator /
    PATH_CHECK(path("") / ".", ".");
    PATH_CHECK(path("") / "..", "..");
    if (platform == "Windows")
    {
      BOOST_TEST(path("foo\\bar") == "foo/bar");
      BOOST_TEST((b / a).string() == "b\\a");
      BOOST_TEST((bs / a).string() == "b\\a");
      BOOST_TEST((bcs / a).string() == "b\\a");
      BOOST_TEST((b / as).string() == "b\\a");
      BOOST_TEST((b / acs).string() == "b\\a");
      PATH_CHECK(path("a") / "b", "a\\b");
      PATH_CHECK(path("..") / "", "..");
      PATH_CHECK(path("foo") / path("bar"), "foo\\bar"); // path arg
      PATH_CHECK(path("foo") / "bar", "foo\\bar");       // const char* arg
      PATH_CHECK(path("foo") / path("woo/bar").filename(), "foo\\bar"); // const std::string & arg
      PATH_CHECK("foo" / path("bar"), "foo\\bar");
      PATH_CHECK(path("..") / ".." , "..\\..");
      PATH_CHECK(path("/") / ".." , "/..");
      PATH_CHECK(path("/..") / ".." , "/..\\..");
      PATH_CHECK(path("..") / "foo" , "..\\foo");
      PATH_CHECK(path("foo") / ".." , "foo\\..");
      PATH_CHECK(path("..") / "f" , "..\\f");
      PATH_CHECK(path("/..") / "f" , "/..\\f");
      PATH_CHECK(path("f") / ".." , "f\\..");
      PATH_CHECK(path("foo") / ".." / ".." , "foo\\..\\..");
      PATH_CHECK(path("foo") / ".." / ".." / ".." , "foo\\..\\..\\..");
      PATH_CHECK(path("f") / ".." / "b" , "f\\..\\b");
      PATH_CHECK(path("foo") / ".." / "bar" , "foo\\..\\bar");
      PATH_CHECK(path("foo") / "bar" / ".." , "foo\\bar\\..");
      PATH_CHECK(path("foo") / "bar" / ".." / "..", "foo\\bar\\..\\..");
      PATH_CHECK(path("foo") / "bar" / ".." / "blah", "foo\\bar\\..\\blah");
      PATH_CHECK(path("f") / "b" / ".." , "f\\b\\..");
      PATH_CHECK(path("f") / "b" / ".." / "a", "f\\b\\..\\a");
      PATH_CHECK(path("foo") / "bar" / "blah" / ".." / "..", "foo\\bar\\blah\\..\\..");
      PATH_CHECK(path("foo") / "bar" / "blah" / ".." / ".." / "bletch", "foo\\bar\\blah\\..\\..\\bletch");

      PATH_CHECK(path(".") / "foo", ".\\foo");
      PATH_CHECK(path(".") / "..", ".\\..");
      PATH_CHECK(path("foo") / ".", "foo\\.");
      PATH_CHECK(path("..") / ".", "..\\.");
      PATH_CHECK(path(".") / ".", ".\\.");
      PATH_CHECK(path(".") / "." / ".", ".\\.\\.");
      PATH_CHECK(path(".") / "foo" / ".", ".\\foo\\.");
      PATH_CHECK(path("foo") / "." / "bar", "foo\\.\\bar");
      PATH_CHECK(path("foo") / "." / ".", "foo\\.\\.");
      PATH_CHECK(path("foo") / "." / "..", "foo\\.\\..");
      PATH_CHECK(path(".") / "." / "..", ".\\.\\..");
      PATH_CHECK(path(".") / ".." / ".", ".\\..\\.");
      PATH_CHECK(path("..") / "." / ".", "..\\.\\.");
    }
    else  // POSIX
    {
      BOOST_TEST((b / a).string() == "b/a");
      BOOST_TEST((bs / a).string() == "b/a");
      BOOST_TEST((bcs / a).string() == "b/a");
      BOOST_TEST((b / as).string() == "b/a");
      BOOST_TEST((b / acs).string() == "b/a");
      PATH_CHECK(path("a") / "b", "a/b");
      PATH_CHECK(path("..") / "", "..");
      PATH_CHECK(path("") / "..", "..");
      PATH_CHECK(path("foo") / path("bar"), "foo/bar"); // path arg
      PATH_CHECK(path("foo") / "bar", "foo/bar");       // const char* arg
      PATH_CHECK(path("foo") / path("woo/bar").filename(), "foo/bar"); // const std::string & arg
      PATH_CHECK("foo" / path("bar"), "foo/bar");
      PATH_CHECK(path("..") / ".." , "../..");
      PATH_CHECK(path("/") / ".." , "/..");
      PATH_CHECK(path("/..") / ".." , "/../..");
      PATH_CHECK(path("..") / "foo" , "../foo");
      PATH_CHECK(path("foo") / ".." , "foo/..");
      PATH_CHECK(path("..") / "f" , "../f");
      PATH_CHECK(path("/..") / "f" , "/../f");
      PATH_CHECK(path("f") / ".." , "f/..");
      PATH_CHECK(path("foo") / ".." / ".." , "foo/../..");
      PATH_CHECK(path("foo") / ".." / ".." / ".." , "foo/../../..");
      PATH_CHECK(path("f") / ".." / "b" , "f/../b");
      PATH_CHECK(path("foo") / ".." / "bar" , "foo/../bar");
      PATH_CHECK(path("foo") / "bar" / ".." , "foo/bar/..");
      PATH_CHECK(path("foo") / "bar" / ".." / "..", "foo/bar/../..");
      PATH_CHECK(path("foo") / "bar" / ".." / "blah", "foo/bar/../blah");
      PATH_CHECK(path("f") / "b" / ".." , "f/b/..");
      PATH_CHECK(path("f") / "b" / ".." / "a", "f/b/../a");
      PATH_CHECK(path("foo") / "bar" / "blah" / ".." / "..", "foo/bar/blah/../..");
      PATH_CHECK(path("foo") / "bar" / "blah" / ".." / ".." / "bletch", "foo/bar/blah/../../bletch");

      PATH_CHECK(path(".") / "foo", "./foo");
      PATH_CHECK(path(".") / "..", "./..");
      PATH_CHECK(path("foo") / ".", "foo/.");
      PATH_CHECK(path("..") / ".", "../.");
      PATH_CHECK(path(".") / ".", "./.");
      PATH_CHECK(path(".") / "." / ".", "././.");
      PATH_CHECK(path(".") / "foo" / ".", "./foo/.");
      PATH_CHECK(path("foo") / "." / "bar", "foo/./bar");
      PATH_CHECK(path("foo") / "." / ".", "foo/./.");
      PATH_CHECK(path("foo") / "." / "..", "foo/./..");
      PATH_CHECK(path(".") / "." / "..", "././..");
      PATH_CHECK(path(".") / ".." / ".", "./../.");
      PATH_CHECK(path("..") / "." / ".", ".././.");
    }

    // probe operator <
    BOOST_TEST(!(e < e2));
    BOOST_TEST(!(es < e2));
    BOOST_TEST(!(ecs < e2));
    BOOST_TEST(!(e < es2));
    BOOST_TEST(!(e < ecs2));

    BOOST_TEST(e < a);
    BOOST_TEST(es < a);
    BOOST_TEST(ecs < a);
    BOOST_TEST(e < as);
    BOOST_TEST(e < acs);

    BOOST_TEST(a < b);
    BOOST_TEST(as < b);
    BOOST_TEST(acs < b);
    BOOST_TEST(a < bs);
    BOOST_TEST(a < bcs);

    BOOST_TEST(!(a < a2));
    BOOST_TEST(!(as < a2));
    BOOST_TEST(!(acs < a2));
    BOOST_TEST(!(a < as2));
    BOOST_TEST(!(a < acs2));

    // make sure basic_path overloads don't conflict with std::string overloads

    BOOST_TEST(!(as < as));
    BOOST_TEST(!(as < acs));
    BOOST_TEST(!(acs < as));

    // reality check character set is as expected
    BOOST_TEST(std::string("a.b") < std::string("a/b"));
    // verify compare is actually lexicographical
    BOOST_TEST(path("a/b") < path("a.b"));

    // make sure the derivative operators also work

    BOOST_TEST(b > a);
    BOOST_TEST(b > as);
    BOOST_TEST(b > acs);
    BOOST_TEST(bs > a);
    BOOST_TEST(bcs > a);

    BOOST_TEST(!(a2 > a));
    BOOST_TEST(!(a2 > as));
    BOOST_TEST(!(a2 > acs));
    BOOST_TEST(!(as2 > a));
    BOOST_TEST(!(acs2 > a));

    BOOST_TEST(a <= b);
    BOOST_TEST(as <= b);
    BOOST_TEST(acs <= b);
    BOOST_TEST(a <= bs);
    BOOST_TEST(a <= bcs);

    BOOST_TEST(a <= a2);
    BOOST_TEST(as <= a2);
    BOOST_TEST(acs <= a2);
    BOOST_TEST(a <= as2);
    BOOST_TEST(a <= acs2);

    BOOST_TEST(b >= a);
    BOOST_TEST(bs >= a);
    BOOST_TEST(bcs >= a);
    BOOST_TEST(b >= as);
    BOOST_TEST(b >= acs);

    BOOST_TEST(a2 >= a);
    BOOST_TEST(as2 >= a);
    BOOST_TEST(acs2 >= a);
    BOOST_TEST(a2 >= as);
    BOOST_TEST(a2 >= acs);

    //  operator == and != are implemented separately, so test separately

    path p1("fe/fi/fo/fum");
    path p2(p1);
    path p3("fe/fi/fo/fumm");
    BOOST_TEST(p1.string() != p3.string());

    // check each overload
    BOOST_TEST(p1 != p3);
    BOOST_TEST(p1 != p3.string());
    BOOST_TEST(p1 != p3.string().c_str());
    BOOST_TEST(p1.string() != p3);
    BOOST_TEST(p1.string().c_str() != p3);

    p3 = p2;
    BOOST_TEST(p1.string() == p3.string());

    // check each overload
    BOOST_TEST(p1 == p3);
    BOOST_TEST(p1 == p3.string());
    BOOST_TEST(p1 == p3.string().c_str());
    BOOST_TEST(p1.string() == p3);
    BOOST_TEST(p1.string().c_str() == p3);

    if (platform == "Windows")
    {
      std::cout << "Windows relational tests..." << std::endl;
      path p10 ("c:\\file");
      path p11 ("c:/file");
      // check each overload
      BOOST_TEST(p10.generic_string() == p11.generic_string());
      BOOST_TEST(p10 == p11);
      BOOST_TEST(p10 == p11.string());
      BOOST_TEST(p10 == p11.string().c_str());
      BOOST_TEST(p10.string() == p11);
      BOOST_TEST(p10.string().c_str() == p11);
      BOOST_TEST(p10 == L"c:\\file");
      BOOST_TEST(p10 == L"c:/file");
      BOOST_TEST(p11 == L"c:\\file");
      BOOST_TEST(p11 == L"c:/file");
      BOOST_TEST(L"c:\\file" == p10);
      BOOST_TEST(L"c:/file" == p10);
      BOOST_TEST(L"c:\\file" == p11);
      BOOST_TEST(L"c:/file" == p11);

      BOOST_TEST(!(p10.generic_string() != p11.generic_string()));
      BOOST_TEST(!(p10 != p11));
      BOOST_TEST(!(p10 != p11.string()));
      BOOST_TEST(!(p10 != p11.string().c_str()));
      BOOST_TEST(!(p10.string() != p11));
      BOOST_TEST(!(p10.string().c_str() != p11));
      BOOST_TEST(!(p10 != L"c:\\file"));
      BOOST_TEST(!(p10 != L"c:/file"));
      BOOST_TEST(!(p11 != L"c:\\file"));
      BOOST_TEST(!(p11 != L"c:/file"));
      BOOST_TEST(!(L"c:\\file" != p10));
      BOOST_TEST(!(L"c:/file" != p10));
      BOOST_TEST(!(L"c:\\file" != p11));
      BOOST_TEST(!(L"c:/file" != p11));

      BOOST_TEST(!(p10.string() < p11.string()));
      BOOST_TEST(!(p10 < p11));
      BOOST_TEST(!(p10 < p11.string()));
      BOOST_TEST(!(p10 < p11.string().c_str()));
      BOOST_TEST(!(p10.string() < p11));
      BOOST_TEST(!(p10.string().c_str() < p11));
      BOOST_TEST(!(p10 < L"c:\\file"));
      BOOST_TEST(!(p10 < L"c:/file"));
      BOOST_TEST(!(p11 < L"c:\\file"));
      BOOST_TEST(!(p11 < L"c:/file"));
      BOOST_TEST(!(L"c:\\file" < p10));
      BOOST_TEST(!(L"c:/file" < p10));
      BOOST_TEST(!(L"c:\\file" < p11));
      BOOST_TEST(!(L"c:/file" < p11));

      BOOST_TEST(!(p10.generic_string() > p11.generic_string()));
      BOOST_TEST(!(p10 > p11));
      BOOST_TEST(!(p10 > p11.string()));
      BOOST_TEST(!(p10 > p11.string().c_str()));
      BOOST_TEST(!(p10.string() > p11));
      BOOST_TEST(!(p10.string().c_str() > p11));
      BOOST_TEST(!(p10 > L"c:\\file"));
      BOOST_TEST(!(p10 > L"c:/file"));
      BOOST_TEST(!(p11 > L"c:\\file"));
      BOOST_TEST(!(p11 > L"c:/file"));
      BOOST_TEST(!(L"c:\\file" > p10));
      BOOST_TEST(!(L"c:/file" > p10));
      BOOST_TEST(!(L"c:\\file" > p11));
      BOOST_TEST(!(L"c:/file" > p11));
    }
  }

  //  query_and_decomposition_tests  ---------------------------------------------------//
  //
  //  remove_filename() is also tested here, because its specification depends on
  //  a decomposition function.

  void query_and_decomposition_tests()
  {
    std::cout << "query_and_decomposition_tests..." << std::endl;

    // stem() tests not otherwise covered
    BOOST_TEST(path("b").stem() == "b");
    BOOST_TEST(path("a/b.txt").stem() == "b");
    BOOST_TEST(path("a/b.").stem() == "b"); 
    BOOST_TEST(path("a.b.c").stem() == "a.b");
    BOOST_TEST(path("a.b.c.").stem() == "a.b.c");

    // extension() tests not otherwise covered
    BOOST_TEST(path("a/b").extension() == "");
    BOOST_TEST(path("a.b/c").extension() == "");
    BOOST_TEST(path("a/b.txt").extension() == ".txt");
    BOOST_TEST(path("a/b.").extension() == ".");
    BOOST_TEST(path("a.b.c").extension() == ".c");
    BOOST_TEST(path("a.b.c.").extension() == ".");
    BOOST_TEST(path("a/").extension() == "");

    // main q & d test sequence
    path p;
    path q;

    p = q = "";
    BOOST_TEST(p.relative_path().string() == "");
    BOOST_TEST(p.parent_path().string() == "");
    BOOST_TEST_EQ(q.remove_filename().string(), p.parent_path().string());
    BOOST_TEST(p.filename() == "");
    BOOST_TEST(p.stem() == "");
    BOOST_TEST(p.extension() == "");
    BOOST_TEST(p.root_name() == "");
    BOOST_TEST(p.root_directory() == "");
    BOOST_TEST(p.root_path().string() == "");
    BOOST_TEST(!p.has_root_path());
    BOOST_TEST(!p.has_root_name());
    BOOST_TEST(!p.has_root_directory());
    BOOST_TEST(!p.has_relative_path());
    BOOST_TEST(!p.has_filename());
    BOOST_TEST(!p.has_stem());
    BOOST_TEST(!p.has_extension());
    BOOST_TEST(!p.has_parent_path());
    BOOST_TEST(!p.is_absolute());

    p = q = "/";
    BOOST_TEST(p.relative_path().string() == "");
    BOOST_TEST(p.parent_path().string() == "");
    BOOST_TEST_EQ(q.remove_filename().string(), p.parent_path().string());
    BOOST_TEST(p.filename() == "/");
    BOOST_TEST(p.stem() == "/");
    BOOST_TEST(p.extension() == "");
    BOOST_TEST(p.root_name() == "");
    BOOST_TEST(p.root_directory() == "/");
    BOOST_TEST(p.root_path().string() == "/");
    BOOST_TEST(p.has_root_path());
    BOOST_TEST(!p.has_root_name());
    BOOST_TEST(p.has_root_directory());
    BOOST_TEST(!p.has_relative_path());
    BOOST_TEST(p.has_filename());
    BOOST_TEST(p.has_stem());
    BOOST_TEST(!p.has_extension());
    BOOST_TEST(!p.has_parent_path());
    if (platform == "POSIX")
      BOOST_TEST(p.is_absolute());
    else
      BOOST_TEST(!p.is_absolute());

    p = q = "//";
    CHECK_EQUAL(p.relative_path().string(), "");
    CHECK_EQUAL(p.parent_path().string(), "");
    BOOST_TEST_EQ(q.remove_filename().string(), p.parent_path().string());
    CHECK_EQUAL(p.filename(), "//");
    CHECK_EQUAL(p.stem(), "//");
    CHECK_EQUAL(p.extension(), "");
    CHECK_EQUAL(p.root_name(), "//");
    CHECK_EQUAL(p.root_directory(), "");
    CHECK_EQUAL(p.root_path().string(), "//");
    BOOST_TEST(p.has_root_path());
    BOOST_TEST(p.has_root_name());
    BOOST_TEST(!p.has_root_directory());
    BOOST_TEST(!p.has_relative_path());
    BOOST_TEST(p.has_filename());
    BOOST_TEST(p.has_stem());
    BOOST_TEST(!p.has_extension());
    BOOST_TEST(!p.has_parent_path());
    BOOST_TEST(!p.is_absolute());

    p = q = "///";
    CHECK_EQUAL(p.relative_path().string(), "");
    CHECK_EQUAL(p.parent_path().string(), "");
    BOOST_TEST_EQ(q.remove_filename().string(), p.parent_path().string());
    CHECK_EQUAL(p.filename(), "/");
    CHECK_EQUAL(p.stem(), "/");
    CHECK_EQUAL(p.extension(), "");
    CHECK_EQUAL(p.root_name(), "");
    CHECK_EQUAL(p.root_directory(), "/");
    CHECK_EQUAL(p.root_path().string(), "/");
    BOOST_TEST(p.has_root_path());
    BOOST_TEST(!p.has_root_name());
    BOOST_TEST(p.has_root_directory());
    BOOST_TEST(!p.has_relative_path());
    BOOST_TEST(p.has_filename());
    BOOST_TEST(p.has_stem());
    BOOST_TEST(!p.has_extension());
    BOOST_TEST(!p.has_parent_path());
    if (platform == "POSIX")
      BOOST_TEST(p.is_absolute());
    else
      BOOST_TEST(!p.is_absolute());

    p = q = ".";
    BOOST_TEST(p.relative_path().string() == ".");
    BOOST_TEST(p.parent_path().string() == "");
    BOOST_TEST_EQ(q.remove_filename().string(), p.parent_path().string());
    BOOST_TEST(p.filename() == ".");
    BOOST_TEST(p.stem() == ".");
    BOOST_TEST(p.extension() == "");
    BOOST_TEST(p.root_name() == "");
    BOOST_TEST(p.root_directory() == "");
    BOOST_TEST(p.root_path().string() == "");
    BOOST_TEST(!p.has_root_path());
    BOOST_TEST(!p.has_root_name());
    BOOST_TEST(!p.has_root_directory());
    BOOST_TEST(p.has_relative_path());
    BOOST_TEST(p.has_filename());
    BOOST_TEST(p.has_stem());
    BOOST_TEST(!p.has_extension());
    BOOST_TEST(!p.has_parent_path());
    BOOST_TEST(!p.is_absolute());

    p = q = "..";
    BOOST_TEST(p.relative_path().string() == "..");
    BOOST_TEST(p.parent_path().string() == "");
    BOOST_TEST_EQ(q.remove_filename().string(), p.parent_path().string());
    BOOST_TEST(p.filename() == "..");
    BOOST_TEST(p.stem() == "..");
    BOOST_TEST(p.extension() == "");
    BOOST_TEST(p.root_name() == "");
    BOOST_TEST(p.root_directory() == "");
    BOOST_TEST(p.root_path().string() == "");
    BOOST_TEST(!p.has_root_path());
    BOOST_TEST(!p.has_root_name());
    BOOST_TEST(!p.has_root_directory());
    BOOST_TEST(p.has_relative_path());
    BOOST_TEST(p.has_filename());
    BOOST_TEST(p.has_stem());
    BOOST_TEST(!p.has_extension());
    BOOST_TEST(!p.has_parent_path());
    BOOST_TEST(!p.is_absolute());

    p = q = "foo";
    BOOST_TEST(p.relative_path().string() == "foo");
    BOOST_TEST(p.parent_path().string() == "");
    BOOST_TEST_EQ(q.remove_filename().string(), p.parent_path().string());
    BOOST_TEST(p.filename() == "foo");
    BOOST_TEST(p.stem() == "foo");
    BOOST_TEST(p.extension() == "");
    BOOST_TEST(p.root_name() == "");
    BOOST_TEST(p.root_directory() == "");
    BOOST_TEST(p.root_path().string() == "");
    BOOST_TEST(!p.has_root_path());
    BOOST_TEST(!p.has_root_name());
    BOOST_TEST(!p.has_root_directory());
    BOOST_TEST(p.has_relative_path());
    BOOST_TEST(p.has_filename());
    BOOST_TEST(p.has_stem());
    BOOST_TEST(!p.has_extension());
    BOOST_TEST(!p.has_parent_path());
    BOOST_TEST(!p.is_absolute());

    p = q = "/foo";
    CHECK_EQUAL(p.relative_path().string(), "foo");
    CHECK_EQUAL(p.parent_path().string(), "/");
    BOOST_TEST_EQ(q.remove_filename().string(), p.parent_path().string());
    CHECK_EQUAL(p.filename(), "foo");
    CHECK_EQUAL(p.stem(), "foo");
    CHECK_EQUAL(p.extension(), "");
    CHECK_EQUAL(p.root_name(), "");
    CHECK_EQUAL(p.root_directory(), "/");
    CHECK_EQUAL(p.root_path().string(), "/");
    BOOST_TEST(p.has_root_path());
    BOOST_TEST(!p.has_root_name());
    BOOST_TEST(p.has_root_directory());
    BOOST_TEST(p.has_relative_path());
    BOOST_TEST(p.has_filename());
    BOOST_TEST(p.has_stem());
    BOOST_TEST(!p.has_extension());
    BOOST_TEST(p.has_parent_path());
    if (platform == "POSIX")
      BOOST_TEST(p.is_absolute());
    else
      BOOST_TEST(!p.is_absolute());

    p = q = "/foo/";
    CHECK_EQUAL(p.relative_path().string(), "foo/");
    CHECK_EQUAL(p.parent_path().string(), "/foo");
    BOOST_TEST_EQ(q.remove_filename().string(), p.parent_path().string());
    CHECK_EQUAL(p.filename(), ".");
    CHECK_EQUAL(p.stem(), ".");
    CHECK_EQUAL(p.extension(), "");
    CHECK_EQUAL(p.root_name(), "");
    CHECK_EQUAL(p.root_directory(), "/");
    CHECK_EQUAL(p.root_path().string(), "/");
    BOOST_TEST(p.has_root_path());
    BOOST_TEST(!p.has_root_name());
    BOOST_TEST(p.has_root_directory());
    BOOST_TEST(p.has_relative_path());
    BOOST_TEST(p.has_filename());
    BOOST_TEST(p.has_stem());
    BOOST_TEST(!p.has_extension());
    BOOST_TEST(p.has_parent_path());
    if (platform == "POSIX")
      BOOST_TEST(p.is_absolute());
    else
      BOOST_TEST(!p.is_absolute());

    p = q = "///foo";
    CHECK_EQUAL(p.relative_path().string(), "foo");
    CHECK_EQUAL(p.parent_path().string(), "/");
    BOOST_TEST_EQ(q.remove_filename().string(), p.parent_path().string());
    CHECK_EQUAL(p.filename(), "foo");
    CHECK_EQUAL(p.root_name(), "");
    CHECK_EQUAL(p.root_directory(), "/");
    CHECK_EQUAL(p.root_path().string(), "/");
    BOOST_TEST(p.has_root_path());
    BOOST_TEST(!p.has_root_name());
    BOOST_TEST(p.has_root_directory());
    BOOST_TEST(p.has_relative_path());
    BOOST_TEST(p.has_filename());
    BOOST_TEST(p.has_parent_path());
    if (platform == "POSIX")
      BOOST_TEST(p.is_absolute());
    else
      BOOST_TEST(!p.is_absolute());

    p = q = "foo/bar";
    BOOST_TEST(p.relative_path().string() == "foo/bar");
    BOOST_TEST(p.parent_path().string() == "foo");
    BOOST_TEST_EQ(q.remove_filename().string(), p.parent_path().string());
    BOOST_TEST(p.filename() == "bar");
    BOOST_TEST(p.stem() == "bar");
    BOOST_TEST(p.extension() == "");
    BOOST_TEST(p.root_name() == "");
    BOOST_TEST(p.root_directory() == "");
    BOOST_TEST(p.root_path().string() == "");
    BOOST_TEST(!p.has_root_path());
    BOOST_TEST(!p.has_root_name());
    BOOST_TEST(!p.has_root_directory());
    BOOST_TEST(p.has_relative_path());
    BOOST_TEST(p.has_filename());
    BOOST_TEST(p.has_stem());
    BOOST_TEST(!p.has_extension());
    BOOST_TEST(p.has_parent_path());
    BOOST_TEST(!p.is_absolute());

    p = q = "../foo";
    BOOST_TEST(p.relative_path().string() == "../foo");
    BOOST_TEST(p.parent_path().string() == "..");
    BOOST_TEST_EQ(q.remove_filename().string(), p.parent_path().string());
    BOOST_TEST(p.filename() == "foo");
    BOOST_TEST(p.root_name() == "");
    BOOST_TEST(p.root_directory() == "");
    BOOST_TEST(p.root_path().string() == "");
    BOOST_TEST(!p.has_root_path());
    BOOST_TEST(!p.has_root_name());
    BOOST_TEST(!p.has_root_directory());
    BOOST_TEST(p.has_relative_path());
    BOOST_TEST(p.has_filename());
    BOOST_TEST(p.has_parent_path());
    BOOST_TEST(!p.is_absolute());

    p = q = "..///foo";
    CHECK_EQUAL(p.relative_path().string(), "..///foo");
    CHECK_EQUAL(p.parent_path().string(), "..");
    BOOST_TEST_EQ(q.remove_filename().string(), p.parent_path().string());
    CHECK_EQUAL(p.filename(), "foo");
    CHECK_EQUAL(p.root_name(), "");
    CHECK_EQUAL(p.root_directory(), "");
    CHECK_EQUAL(p.root_path().string(), "");
    BOOST_TEST(!p.has_root_path());
    BOOST_TEST(!p.has_root_name());
    BOOST_TEST(!p.has_root_directory());
    BOOST_TEST(p.has_relative_path());
    BOOST_TEST(p.has_filename());
    BOOST_TEST(p.has_parent_path());
    BOOST_TEST(!p.is_absolute());

    p = q = "/foo/bar";
    BOOST_TEST(p.relative_path().string() == "foo/bar");
    BOOST_TEST(p.parent_path().string() == "/foo");
    BOOST_TEST_EQ(q.remove_filename().string(), p.parent_path().string());
    BOOST_TEST(p.filename() == "bar");
    BOOST_TEST(p.root_name() == "");
    BOOST_TEST(p.root_directory() == "/");
    BOOST_TEST(p.root_path().string() == "/");
    BOOST_TEST(p.has_root_path());
    BOOST_TEST(!p.has_root_name());
    BOOST_TEST(p.has_root_directory());
    BOOST_TEST(p.has_relative_path());
    BOOST_TEST(p.has_filename());
    BOOST_TEST(p.has_parent_path());
    if (platform == "POSIX")
      BOOST_TEST(p.is_absolute());
    else
      BOOST_TEST(!p.is_absolute());

    // Both POSIX and Windows allow two leading slashs
    // (POSIX meaning is implementation defined)
    PATH_CHECK(path("//resource"), "//resource");
    PATH_CHECK(path("//resource/"), "//resource/");
    PATH_CHECK(path("//resource/foo"), "//resource/foo");

    p = q = path("//net");
    CHECK_EQUAL(p.string(), "//net");
    CHECK_EQUAL(p.relative_path().string(), "");
    BOOST_TEST_EQ(q.remove_filename().string(), p.parent_path().string());
    CHECK_EQUAL(p.parent_path().string(), "");
    CHECK_EQUAL(p.filename(), "//net");
    CHECK_EQUAL(p.root_name(), "//net");
    CHECK_EQUAL(p.root_directory(), "");
    CHECK_EQUAL(p.root_path().string(), "//net");
    BOOST_TEST(p.has_root_path());
    BOOST_TEST(p.has_root_name());
    BOOST_TEST(!p.has_root_directory());
    BOOST_TEST(!p.has_relative_path());
    BOOST_TEST(p.has_filename());
    BOOST_TEST(!p.has_parent_path());
    BOOST_TEST(!p.is_absolute());

    p = q = path("//net/");
    BOOST_TEST(p.relative_path().string() == "");
    BOOST_TEST(p.parent_path().string() == "//net");
    BOOST_TEST_EQ(q.remove_filename().string(), p.parent_path().string());
    BOOST_TEST(p.filename() == "/");
    BOOST_TEST(p.root_name() == "//net");
    BOOST_TEST(p.root_directory() == "/");
    BOOST_TEST(p.root_path().string() == "//net/");
    BOOST_TEST(p.has_root_path());
    BOOST_TEST(p.has_root_name());
    BOOST_TEST(p.has_root_directory());
    BOOST_TEST(!p.has_relative_path());
    BOOST_TEST(p.has_filename());
    BOOST_TEST(p.has_parent_path());
    BOOST_TEST(p.is_absolute());

    p = q = path("//net/foo");
    BOOST_TEST(p.relative_path().string() == "foo");
    BOOST_TEST(p.parent_path().string() == "//net/");
    BOOST_TEST_EQ(q.remove_filename().string(), p.parent_path().string());
    BOOST_TEST(p.filename() == "foo");
    BOOST_TEST(p.root_name() == "//net");
    BOOST_TEST(p.root_directory() == "/");
    BOOST_TEST(p.root_path().string() == "//net/");
    BOOST_TEST(p.has_root_path());
    BOOST_TEST(p.has_root_name());
    BOOST_TEST(p.has_root_directory());
    BOOST_TEST(p.has_relative_path());
    BOOST_TEST(p.has_filename());
    BOOST_TEST(p.has_parent_path());
    BOOST_TEST(p.is_absolute());

    p = q = path("//net///foo");
    CHECK_EQUAL(p.relative_path().string(), "foo");
    CHECK_EQUAL(p.parent_path().string(), "//net/");
    BOOST_TEST_EQ(q.remove_filename().string(), p.parent_path().string());
    CHECK_EQUAL(p.filename(), "foo");
    CHECK_EQUAL(p.root_name(), "//net");
    CHECK_EQUAL(p.root_directory(), "/");
    CHECK_EQUAL(p.root_path().string(), "//net/");
    BOOST_TEST(p.has_root_path());
    BOOST_TEST(p.has_root_name());
    BOOST_TEST(p.has_root_directory());
    BOOST_TEST(p.has_relative_path());
    BOOST_TEST(p.has_filename());
    BOOST_TEST(p.has_parent_path());
    BOOST_TEST(p.is_absolute());

    if (platform == "Windows")
    {

      p = q = path("c:");
      BOOST_TEST(p.relative_path().string() == "");
      BOOST_TEST(p.parent_path().string() == "");
      BOOST_TEST_EQ(q.remove_filename().string(), p.parent_path().string());
      BOOST_TEST(p.filename() == "c:");
      BOOST_TEST(p.root_name() == "c:");
      BOOST_TEST(p.root_directory() == "");
      BOOST_TEST(p.root_path().string() == "c:");
      BOOST_TEST(p.has_root_path());
      BOOST_TEST(p.has_root_name());
      BOOST_TEST(!p.has_root_directory());
      BOOST_TEST(!p.has_relative_path());
      BOOST_TEST(p.has_filename());
      BOOST_TEST(!p.has_parent_path());
      BOOST_TEST(!p.is_absolute());

      p = q = path("c:foo");
      BOOST_TEST(p.relative_path().string() == "foo");
      BOOST_TEST(p.parent_path().string() == "c:");
      BOOST_TEST_EQ(q.remove_filename().string(), p.parent_path().string());
      BOOST_TEST(p.filename() == "foo");
      BOOST_TEST(p.root_name() == "c:");
      BOOST_TEST(p.root_directory() == "");
      BOOST_TEST(p.root_path().string() == "c:");
      BOOST_TEST(p.has_root_path());
      BOOST_TEST(p.has_root_name());
      BOOST_TEST(!p.has_root_directory());
      BOOST_TEST(p.has_relative_path());
      BOOST_TEST(p.has_filename());
      BOOST_TEST(p.has_parent_path());
      BOOST_TEST(!p.is_absolute());
   
      p = q = path("c:/");
      BOOST_TEST(p.relative_path().string() == "");
      BOOST_TEST(p.parent_path().string() == "c:");
      BOOST_TEST_EQ(q.remove_filename().string(), p.parent_path().string());
      BOOST_TEST(p.filename() == "/");
      BOOST_TEST(p.root_name() == "c:");
      BOOST_TEST(p.root_directory() == "/");
      BOOST_TEST(p.root_path().string() == "c:/");
      BOOST_TEST(p.has_root_path());
      BOOST_TEST(p.has_root_name());
      BOOST_TEST(p.has_root_directory());
      BOOST_TEST(!p.has_relative_path());
      BOOST_TEST(p.has_filename());
      BOOST_TEST(p.has_parent_path());
      BOOST_TEST(p.is_absolute());

      p = q = path("c:..");
      BOOST_TEST(p.relative_path().string() == "..");
      BOOST_TEST(p.parent_path().string() == "c:");
      BOOST_TEST_EQ(q.remove_filename().string(), p.parent_path().string());
      BOOST_TEST(p.filename() == "..");
      BOOST_TEST(p.root_name() == "c:");
      BOOST_TEST(p.root_directory() == "");
      BOOST_TEST(p.root_path().string() == "c:");
      BOOST_TEST(p.has_root_path());
      BOOST_TEST(p.has_root_name());
      BOOST_TEST(!p.has_root_directory());
      BOOST_TEST(p.has_relative_path());
      BOOST_TEST(p.has_filename());
      BOOST_TEST(p.has_parent_path());
      BOOST_TEST(!p.is_absolute());

      p = q = path("c:/foo");
      CHECK_EQUAL(p.relative_path().string(), "foo");
      CHECK_EQUAL(p.parent_path().string(), "c:/");
      BOOST_TEST_EQ(q.remove_filename().string(), p.parent_path().string());
      CHECK_EQUAL(p.filename(), "foo");
      CHECK_EQUAL(p.root_name(), "c:");
      CHECK_EQUAL(p.root_directory(), "/");
      CHECK_EQUAL(p.root_path().string(), "c:/");
      BOOST_TEST(p.has_root_path());
      BOOST_TEST(p.has_root_name());
      BOOST_TEST(p.has_root_directory());
      BOOST_TEST(p.has_relative_path());
      BOOST_TEST(p.has_filename());
      BOOST_TEST(p.has_parent_path());
      BOOST_TEST(p.is_absolute());

      p = q = path("c://foo");
      CHECK_EQUAL(p.relative_path().string(), "foo");
      CHECK_EQUAL(p.parent_path().string(), "c:/");
      BOOST_TEST_EQ(q.remove_filename().string(), p.parent_path().string());
      CHECK_EQUAL(p.filename(), "foo");
      CHECK_EQUAL(p.root_name(), "c:");
      CHECK_EQUAL(p.root_directory(), "/");
      CHECK_EQUAL(p.root_path().string(), "c:/");
      BOOST_TEST(p.has_root_path());
      BOOST_TEST(p.has_root_name());
      BOOST_TEST(p.has_root_directory());
      BOOST_TEST(p.has_relative_path());
      BOOST_TEST(p.has_filename());
      BOOST_TEST(p.has_parent_path());
      BOOST_TEST(p.is_absolute());

      p = q = path("c:\\foo\\bar");
      CHECK_EQUAL(p.relative_path().string(), "foo\\bar");
      CHECK_EQUAL(p.parent_path().string(), "c:\\foo");
      BOOST_TEST_EQ(q.remove_filename().string(), p.parent_path().string());
      CHECK_EQUAL(p.filename(), "bar");
      CHECK_EQUAL(p.root_name(), "c:");
      CHECK_EQUAL(p.root_directory(), "\\");
      CHECK_EQUAL(p.root_path().string(), "c:\\");
      BOOST_TEST(p.has_root_path());
      BOOST_TEST(p.has_root_name());
      BOOST_TEST(p.has_root_directory());
      BOOST_TEST(p.has_relative_path());
      BOOST_TEST(p.has_filename());
      BOOST_TEST(p.has_parent_path());
      BOOST_TEST(p.is_absolute());

      p = q = path("prn:");
      BOOST_TEST(p.relative_path().string() == "");
      BOOST_TEST(p.parent_path().string() == "");
      BOOST_TEST_EQ(q.remove_filename().string(), p.parent_path().string());
      BOOST_TEST(p.filename() == "prn:");
      BOOST_TEST(p.root_name() == "prn:");
      BOOST_TEST(p.root_directory() == "");
      BOOST_TEST(p.root_path().string() == "prn:");
      BOOST_TEST(p.has_root_path());
      BOOST_TEST(p.has_root_name());
      BOOST_TEST(!p.has_root_directory());
      BOOST_TEST(!p.has_relative_path());
      BOOST_TEST(p.has_filename());
      BOOST_TEST(!p.has_parent_path());
      BOOST_TEST(!p.is_absolute());

      p = q = path("\\\\net\\\\\\foo");
      CHECK_EQUAL(p.relative_path().string(), "foo");
      CHECK_EQUAL(p.parent_path().string(), "\\\\net\\");
      BOOST_TEST_EQ(q.remove_filename().string(), p.parent_path().string());
      CHECK_EQUAL(p.filename(), "foo");
      CHECK_EQUAL(p.root_name(), "\\\\net");
      CHECK_EQUAL(p.root_directory(), "\\");
      CHECK_EQUAL(p.root_path().string(), "\\\\net\\");
      BOOST_TEST(p.has_root_path());
      BOOST_TEST(p.has_root_name());
      BOOST_TEST(p.has_root_directory());
      BOOST_TEST(p.has_relative_path());
      BOOST_TEST(p.has_filename());
      BOOST_TEST(p.has_parent_path());
      BOOST_TEST(p.is_absolute());
    } // Windows

    else
    { // POSIX
      PATH_CHECK(path("/foo/bar/"), "/foo/bar/");
      PATH_CHECK(path("//foo//bar//"), "//foo//bar//");
      PATH_CHECK(path("///foo///bar///"), "///foo///bar///");

      p = path("/usr/local/bin:/usr/bin:/bin");
      BOOST_TEST(p.string() == "/usr/local/bin:/usr/bin:/bin");
    } // POSIX
  }

 //  composition_tests  ----------------------------------------------------------------//

  void composition_tests()
  {
    std::cout << "composition_tests..." << std::endl;

  }

 //  construction_tests  ---------------------------------------------------------------//

  void construction_tests()
  {
    std::cout << "construction_tests..." << std::endl;

    PATH_CHECK("", "");

    PATH_CHECK("foo", "foo");
    PATH_CHECK("f", "f");

    PATH_CHECK("foo/", "foo/");
    PATH_CHECK("f/", "f/");
    PATH_CHECK("foo/..", "foo/..");
    PATH_CHECK("foo/../", "foo/../");
    PATH_CHECK("foo/bar/../..", "foo/bar/../..");
    PATH_CHECK("foo/bar/../../", "foo/bar/../../");
    PATH_CHECK(path("/"), "/");
    PATH_CHECK(path("/f"), "/f");

    PATH_CHECK("/foo", "/foo");
    PATH_CHECK(path("/foo/bar/"), "/foo/bar/");
    PATH_CHECK(path("//foo//bar//"), "//foo//bar//");
    PATH_CHECK(path("///foo///bar///"), "///foo///bar///");
    PATH_CHECK(path("\\/foo\\/bar\\/"), "\\/foo\\/bar\\/");
    PATH_CHECK(path("\\//foo\\//bar\\//"), "\\//foo\\//bar\\//");

    if (platform == "Windows")
    {
      PATH_CHECK(path("c:") / "foo", "c:foo");
      PATH_CHECK(path("c:") / "/foo", "c:/foo");

      PATH_CHECK(path("\\foo\\bar\\"), "\\foo\\bar\\");
      PATH_CHECK(path("\\\\foo\\\\bar\\\\"), "\\\\foo\\\\bar\\\\");
      PATH_CHECK(path("\\\\\\foo\\\\\\bar\\\\\\"), "\\\\\\foo\\\\\\bar\\\\\\");

      PATH_CHECK(path("\\"), "\\");
      PATH_CHECK(path("\\f"), "\\f");
      PATH_CHECK(path("\\foo"), "\\foo");
      PATH_CHECK(path("foo\\bar"), "foo\\bar");
      PATH_CHECK(path("foo bar"), "foo bar");
      PATH_CHECK(path("c:"), "c:");
      PATH_CHECK(path("c:/"), "c:/");
      PATH_CHECK(path("c:."), "c:.");
      PATH_CHECK(path("c:./foo"), "c:./foo");
      PATH_CHECK(path("c:.\\foo"), "c:.\\foo");
      PATH_CHECK(path("c:.."), "c:..");
      PATH_CHECK(path("c:/."), "c:/.");
      PATH_CHECK(path("c:/.."), "c:/..");
      PATH_CHECK(path("c:/../"), "c:/../");
      PATH_CHECK(path("c:\\..\\"), "c:\\..\\");
      PATH_CHECK(path("c:/../.."), "c:/../..");
      PATH_CHECK(path("c:/../foo"), "c:/../foo");
      PATH_CHECK(path("c:\\..\\foo"), "c:\\..\\foo");
      PATH_CHECK(path("c:../foo"), "c:../foo");
      PATH_CHECK(path("c:..\\foo"), "c:..\\foo");
      PATH_CHECK(path("c:/../../foo"), "c:/../../foo");
      PATH_CHECK(path("c:\\..\\..\\foo"), "c:\\..\\..\\foo");
      PATH_CHECK(path("c:foo/.."), "c:foo/..");
      PATH_CHECK(path("c:/foo/.."), "c:/foo/..");
      PATH_CHECK(path("c:/..foo"), "c:/..foo");
      PATH_CHECK(path("c:foo"), "c:foo");
      PATH_CHECK(path("c:/foo"), "c:/foo");
      PATH_CHECK(path("\\\\netname"), "\\\\netname");
      PATH_CHECK(path("\\\\netname\\"), "\\\\netname\\");
      PATH_CHECK(path("\\\\netname\\foo"), "\\\\netname\\foo");
      PATH_CHECK(path("c:/foo"), "c:/foo");
      PATH_CHECK(path("prn:"), "prn:");
    }
    else
    {
    }

    PATH_CHECK("foo/bar", "foo/bar");
    PATH_CHECK("a/b", "a/b");  // probe for length effects
    PATH_CHECK("..", "..");
    PATH_CHECK("../..", "../..");
    PATH_CHECK("/..", "/..");
    PATH_CHECK("/../..", "/../..");
    PATH_CHECK("../foo", "../foo");
    PATH_CHECK("foo/..", "foo/..");
    PATH_CHECK(path("foo/..bar"), "foo/..bar");
    PATH_CHECK("../f", "../f");
    PATH_CHECK("/../f", "/../f");
    PATH_CHECK("f/..", "f/..");
    PATH_CHECK("foo/../..", "foo/../..");
    PATH_CHECK("foo/../../..", "foo/../../..");
    PATH_CHECK("foo/../bar", "foo/../bar");
    PATH_CHECK("foo/bar/..", "foo/bar/..");
    PATH_CHECK("foo/bar/../..", "foo/bar/../..");
    PATH_CHECK("foo/bar/../blah", "foo/bar/../blah");
    PATH_CHECK("f/../b", "f/../b");
    PATH_CHECK("f/b/..", "f/b/..");
    PATH_CHECK("f/b/../a", "f/b/../a");
    PATH_CHECK("foo/bar/blah/../..", "foo/bar/blah/../..");
    PATH_CHECK("foo/bar/blah/../../bletch", "foo/bar/blah/../../bletch");
    PATH_CHECK("...", "...");
    PATH_CHECK("....", "....");
    PATH_CHECK("foo/...", "foo/...");
    PATH_CHECK("abc.", "abc.");
    PATH_CHECK("abc..", "abc..");
    PATH_CHECK("foo/abc.", "foo/abc.");
    PATH_CHECK("foo/abc..", "foo/abc..");

    PATH_CHECK(path(".abc"), ".abc");
    PATH_CHECK("a.c", "a.c");
    PATH_CHECK(path("..abc"), "..abc");
    PATH_CHECK("a..c", "a..c");
    PATH_CHECK(path("foo/.abc"), "foo/.abc");
    PATH_CHECK("foo/a.c", "foo/a.c");
    PATH_CHECK(path("foo/..abc"), "foo/..abc");
    PATH_CHECK("foo/a..c", "foo/a..c");

    PATH_CHECK(".", ".");
    PATH_CHECK("./foo", "./foo");
    PATH_CHECK("./..", "./..");
    PATH_CHECK("./../foo", "./../foo");
    PATH_CHECK("foo/.", "foo/.");
    PATH_CHECK("../.", "../.");
    PATH_CHECK("./.", "./.");
    PATH_CHECK("././.", "././.");
    PATH_CHECK("./foo/.", "./foo/.");
    PATH_CHECK("foo/./bar", "foo/./bar");
    PATH_CHECK("foo/./.", "foo/./.");
    PATH_CHECK("foo/./..", "foo/./..");
    PATH_CHECK("foo/./../bar", "foo/./../bar");
    PATH_CHECK("foo/../.", "foo/../.");
    PATH_CHECK("././..", "././..");
    PATH_CHECK("./../.", "./../.");
    PATH_CHECK(".././.", ".././.");
  }

  //  append_tests  --------------------------------------------------------------------//

  void append_test_aux(const path & p, const std::string & s, const std::string & expect)
  {
    PATH_CHECK(p / path(s), expect);
    PATH_CHECK(p / s.c_str(), expect);
    PATH_CHECK(p / s, expect);
    path x(p);
    x.append(s.begin(), s.end());
    PATH_CHECK(x, expect);
  }

  void append_tests()
  {
    std::cout << "append_tests..." << std::endl;

    // There are many control paths to be exercised, since empty paths and arguments,
    // paths with trailing separators, arguments with leading separators, with or without
    // other characters being present, are all separate cases that need to be tested.
    // Furthermore, some of the code to be tested is specific to argument categories,
    // so that results in further permutations to be tested.

    //// code to generate test cases
    //// 
    //// expected results must be checked by hand
    //// "foo\bar" expected result must be edited by hand and moved for Windows/POSIX
    ////
    //const char* x[]    = { "", "/", "foo", "foo/" };
    //const char* y[] = { "", "/", "bar", "/bar" };

    //for (int i = 0; i < sizeof(x)/sizeof(char*); ++i)
    //  for (int j = 0; j < sizeof(y)/sizeof(char*); ++j)
    //  {
    //    std::cout << "\n    PATH_CHECK(path(\"" << x[i] << "\") / \"" << y[j] << "\", \"" 
    //              << path(x[i]) / y[j] << "\");\n";
    //    std::cout << "    append_test_aux(\"" << x[i] << "\", \"" << y[j] << "\", \""
    //              << path(x[i]) / y[j] << "\");\n";
    //  }

    PATH_CHECK(path("") / "", "");
    append_test_aux("", "", "");

    PATH_CHECK(path("") / "/", "/");
    append_test_aux("", "/", "/");

    PATH_CHECK(path("") / "bar", "bar");
    append_test_aux("", "bar", "bar");

    PATH_CHECK(path("") / "/bar", "/bar");
    append_test_aux("", "/bar", "/bar");

    PATH_CHECK(path("/") / "", "/");
    append_test_aux("/", "", "/");

    PATH_CHECK(path("/") / "/", "//");
    append_test_aux("/", "/", "//");

    PATH_CHECK(path("/") / "bar", "/bar");
    append_test_aux("/", "bar", "/bar");

    PATH_CHECK(path("/") / "/bar", "//bar");
    append_test_aux("/", "/bar", "//bar");

    PATH_CHECK(path("foo") / "", "foo");
    append_test_aux("foo", "", "foo");

    PATH_CHECK(path("foo") / "/", "foo/");
    append_test_aux("foo", "/", "foo/");

    PATH_CHECK(path("foo") / "/bar", "foo/bar");
    append_test_aux("foo", "/bar", "foo/bar");

    PATH_CHECK(path("foo/") / "", "foo/");
    append_test_aux("foo/", "", "foo/");

    PATH_CHECK(path("foo/") / "/", "foo//");
    append_test_aux("foo/", "/", "foo//");

    PATH_CHECK(path("foo/") / "bar", "foo/bar");
    append_test_aux("foo/", "bar", "foo/bar");

    PATH_CHECK(path("foo/") / "/bar", "foo//bar");
    append_test_aux("foo/", "/bar", "foo//bar");

    if (platform == "Windows")
    {
      PATH_CHECK(path("foo") / "bar", "foo\\bar");
      append_test_aux("foo", "bar", "foo\\bar");

      // hand created test case specific to Windows
      PATH_CHECK(path("c:") / "bar", "c:bar");
      append_test_aux("c:", "bar", "c:bar");
    }
    else
    {
      PATH_CHECK(path("foo") / "bar", "foo/bar");
      append_test_aux("foo", "bar", "foo/bar");
    }

  }

  //  name_function_tests  -------------------------------------------------------------//

  void name_function_tests()
  {
    std::cout << "name_function_tests..." << std::endl;

    BOOST_TEST(fs::portable_posix_name(std::string("x")));
    BOOST_TEST(fs::windows_name(std::string("x")));
    BOOST_TEST(fs::portable_name(std::string("x")));
    BOOST_TEST(fs::portable_directory_name(std::string("x")));
    BOOST_TEST(fs::portable_file_name(std::string("x")));

    BOOST_TEST(fs::portable_posix_name(std::string(".")));
    BOOST_TEST(fs::windows_name(std::string(".")));
    BOOST_TEST(fs::portable_name(std::string(".")));
    BOOST_TEST(fs::portable_directory_name(std::string(".")));
    BOOST_TEST(!fs::portable_file_name(std::string(".")));

    BOOST_TEST(fs::portable_posix_name(std::string("..")));
    BOOST_TEST(fs::windows_name(std::string("..")));
    BOOST_TEST(fs::portable_name(std::string("..")));
    BOOST_TEST(fs::portable_directory_name(std::string("..")));
    BOOST_TEST(!fs::portable_file_name(std::string("..")));

    BOOST_TEST(!fs::native(std::string("")));
    BOOST_TEST(!fs::portable_posix_name(std::string("")));
    BOOST_TEST(!fs::windows_name(std::string("")));
    BOOST_TEST(!fs::portable_name(std::string("")));
    BOOST_TEST(!fs::portable_directory_name(std::string("")));
    BOOST_TEST(!fs::portable_file_name(std::string("")));

    BOOST_TEST(!fs::native(std::string(" ")));
    BOOST_TEST(!fs::portable_posix_name(std::string(" ")));
    BOOST_TEST(!fs::windows_name(std::string(" ")));
    BOOST_TEST(!fs::portable_name(std::string(" ")));
    BOOST_TEST(!fs::portable_directory_name(std::string(" ")));
    BOOST_TEST(!fs::portable_file_name(std::string(" ")));

    BOOST_TEST(!fs::portable_posix_name(std::string(":")));
    BOOST_TEST(!fs::windows_name(std::string(":")));
    BOOST_TEST(!fs::portable_name(std::string(":")));
    BOOST_TEST(!fs::portable_directory_name(std::string(":")));
    BOOST_TEST(!fs::portable_file_name(std::string(":")));

    BOOST_TEST(fs::portable_posix_name(std::string("-")));
    BOOST_TEST(fs::windows_name(std::string("-")));
    BOOST_TEST(!fs::portable_name(std::string("-")));
    BOOST_TEST(!fs::portable_directory_name(std::string("-")));
    BOOST_TEST(!fs::portable_file_name(std::string("-")));

    BOOST_TEST(!fs::portable_posix_name(std::string("foo bar")));
    BOOST_TEST(fs::windows_name(std::string("foo bar")));
    BOOST_TEST(!fs::windows_name(std::string(" bar")));
    BOOST_TEST(!fs::windows_name(std::string("foo ")));
    BOOST_TEST(!fs::portable_name(std::string("foo bar")));
    BOOST_TEST(!fs::portable_directory_name(std::string("foo bar")));
    BOOST_TEST(!fs::portable_file_name(std::string("foo bar")));

    BOOST_TEST(fs::portable_posix_name(std::string("foo.bar")));
    BOOST_TEST(fs::windows_name(std::string("foo.bar")));
    BOOST_TEST(fs::portable_name(std::string("foo.bar")));
    BOOST_TEST(!fs::portable_directory_name(std::string("foo.bar")));
    BOOST_TEST(fs::portable_file_name(std::string("foo.bar")));

    BOOST_TEST(fs::portable_posix_name(std::string("foo.barf")));
    BOOST_TEST(fs::windows_name(std::string("foo.barf")));
    BOOST_TEST(fs::portable_name(std::string("foo.barf")));
    BOOST_TEST(!fs::portable_directory_name(std::string("foo.barf")));
    BOOST_TEST(!fs::portable_file_name(std::string("foo.barf")));

    BOOST_TEST(fs::portable_posix_name(std::string(".foo")));
    BOOST_TEST(fs::windows_name(std::string(".foo")));
    BOOST_TEST(!fs::portable_name(std::string(".foo")));
    BOOST_TEST(!fs::portable_directory_name(std::string(".foo")));
    BOOST_TEST(!fs::portable_file_name(std::string(".foo")));

    BOOST_TEST(fs::portable_posix_name(std::string("foo.")));
    BOOST_TEST(!fs::windows_name(std::string("foo.")));
    BOOST_TEST(!fs::portable_name(std::string("foo.")));
    BOOST_TEST(!fs::portable_directory_name(std::string("foo.")));
    BOOST_TEST(!fs::portable_file_name(std::string("foo.")));
  }
  
  //  replace_extension_tests  ---------------------------------------------------//

  void replace_extension_tests()
  {
    std::cout << "replace_extension_tests..." << std::endl;

    BOOST_TEST(path().replace_extension().empty());
    BOOST_TEST(path().replace_extension("a").empty());
    BOOST_TEST(path().replace_extension("a.") == ".");
    BOOST_TEST(path().replace_extension("a.txt") == ".txt");
    // see the rationale in html docs for explanation why this works:
    BOOST_TEST(path().replace_extension(".txt") == ".txt");

    BOOST_TEST(path("a.txt").replace_extension() == "a");
    BOOST_TEST(path("a.txt").replace_extension("") == "a");
    BOOST_TEST(path("a.txt").replace_extension(".") == "a.");
    BOOST_TEST(path("a.txt").replace_extension(".tex") == "a.tex");
    BOOST_TEST(path("a.txt").replace_extension("tex") == "a");
    BOOST_TEST(path("a.").replace_extension(".tex") == "a.tex");
    BOOST_TEST(path("a.").replace_extension("tex") == "a");
    BOOST_TEST(path("a").replace_extension(".txt") == "a.txt");
    BOOST_TEST(path("a").replace_extension("txt") == "a");
    BOOST_TEST(path("a.b.txt").replace_extension(".tex") == "a.b.tex");  
    BOOST_TEST(path("a.b.txt").replace_extension("tex") == "a.b");
    BOOST_TEST(path("a/b").replace_extension(".c") == "a/b.c");
    BOOST_TEST_EQ(path("a.txt/b").replace_extension(".c"), "a.txt/b.c"); // ticket 4702
  }

} // unnamed namespace

//--------------------------------------------------------------------------------------//
//                                                                                      //
//                                     main                                             //
//                                                                                      //
//--------------------------------------------------------------------------------------//

int main(int, char*[])
{
  // The choice of platform is make at runtime rather than compile-time
  // so that compile errors for all platforms will be detected even though
  // only the current platform is runtime tested.
  platform = (platform == "Win32" || platform == "Win64" || platform == "Cygwin")
               ? "Windows"
               : "POSIX";
  std::cout << "Platform is " << platform << '\n';

  BOOST_TEST(p1.string() != p3.string());
  p3 = p2;
  BOOST_TEST(p1.string() == p3.string());

  path p4("foobar");
  BOOST_TEST(p4.string() == "foobar");
  p4 = p4; // self-assignment
  BOOST_TEST(p4.string() == "foobar");

  construction_tests();
  append_tests();
  overload_tests();
  query_and_decomposition_tests();
  composition_tests();
  iterator_tests();
  non_member_tests();
  exception_tests();
  name_function_tests();
  replace_extension_tests();

  // verify deprecated names still available

# ifndef BOOST_FILESYSTEM_NO_DEPRECATED

  p1.branch_path();
  p1.leaf();
  path p_remove_leaf;
  p_remove_leaf.remove_leaf();

# endif

  std::string s1("//:somestring");  // this used to be treated specially

  // check the path member templates
  p5.assign(s1.begin(), s1.end());

  PATH_CHECK(p5, "//:somestring");
  p5 = s1;
  PATH_CHECK(p5, "//:somestring");

  // this code, courtesy of David Whetstone, detects a now fixed bug that
  // derefereced the end iterator (assuming debug build with checked itors)
  std::vector<char> v1;
  p5.assign(v1.begin(), v1.end());
  std::string s2(v1.begin(), v1.end());
  PATH_CHECK(p5, s2);
  p5.assign(s1.begin(), s1.begin() + 1);
  PATH_CHECK(p5, "/");

  BOOST_TEST(p1 != p4);
  BOOST_TEST(p1.string() == p2.string());
  BOOST_TEST(p1.string() == p3.string());
  BOOST_TEST(path("foo").filename() == "foo");
  BOOST_TEST(path("foo").parent_path().string() == "");
  BOOST_TEST(p1.filename() == "fum");
  BOOST_TEST(p1.parent_path().string() == "fe/fi/fo");
  BOOST_TEST(path("").empty() == true);
  BOOST_TEST(path("foo").empty() == false);

  // inserter and extractor tests
# if !defined(BOOST_MSVC) || BOOST_MSVC > 1300 // bypass VC++ 7.0 and earlier
  std::cout << "\nInserter and extractor test...";
  std::stringstream ss;
  ss << fs::path("foo/bar") << std::endl;
  fs::path round_trip;
  ss >> round_trip;
  BOOST_TEST(round_trip.string() == "foo/bar");
  std::cout << round_trip.string() << "..." << round_trip << " complete\n";
# endif

  return ::boost::report_errors();
}
