📄 path_test.cpp
字号:
PATH_CHECK( path( "foo bar", fs::native ), "foo bar" );
PATH_CHECK( path( "c:", fs::native ), "c:" );
PATH_CHECK( path( "c:/", fs::native ), "c:/" );
PATH_CHECK( path( "c:.", fs::native ), "c:" );
PATH_CHECK( path( "c:./foo", fs::native ), "c:foo" );
PATH_CHECK( path( "c:.\\foo", fs::native ), "c:foo" );
PATH_CHECK( path( "c:..", fs::native ), "c:.." );
PATH_CHECK( path( "c:..", fs::native ).normalize(), "c:.." );
PATH_CHECK( path( "c:/.", fs::native ), "c:/" );
PATH_CHECK( path( "c:/..", fs::native ), "c:/" );
PATH_CHECK( path( "c:/..", fs::native ).normalize(), "c:/" );
PATH_CHECK( path( "c:/../", fs::native ), "c:/" );
PATH_CHECK( path( "c:\\..\\", fs::native ), "c:/" );
PATH_CHECK( path( "c:/../", fs::native ).normalize(), "c:/" );
PATH_CHECK( path( "c:/../..", fs::native ), "c:/" );
PATH_CHECK( path( "c:/../..", fs::native ).normalize(), "c:/" );
PATH_CHECK( path( "c:/../foo", fs::native ), "c:/foo" );
PATH_CHECK( path( "c:\\..\\foo", fs::native ), "c:/foo" );
PATH_CHECK( path( "c:../foo", fs::native ), "c:../foo" );
PATH_CHECK( path( "c:..\\foo", fs::native ), "c:../foo" );
PATH_CHECK( path( "c:/../foo", fs::native ).normalize(), "c:/foo" );
PATH_CHECK( path( "c:/../../foo", fs::native ), "c:/foo" );
PATH_CHECK( path( "c:\\..\\..\\foo", fs::native ), "c:/foo" );
PATH_CHECK( path( "c:/../../foo", fs::native ).normalize(), "c:/foo" );
PATH_CHECK( path( "c:foo/..", fs::native ), "c:foo/.." );
PATH_CHECK( path( "c:foo/..", fs::native ).normalize(), "c:" );
PATH_CHECK( path( "c:/foo/..", fs::native ), "c:/foo/.." );
PATH_CHECK( path( "c:/foo/..", fs::native ).normalize(), "c:/" );
PATH_CHECK( path( "c:/..foo", fs::native ), "c:/..foo" );
PATH_CHECK( path( "c:/..foo", fs::native ).normalize(), "c:/..foo" );
PATH_CHECK( path( "c:foo", fs::native ), "c:foo" );
PATH_CHECK( path( "c:/foo", fs::native ), "c:/foo" );
PATH_CHECK( path( "c++", fs::native ), "c++" );
PATH_CHECK( path( "//share", fs::native ), "//share" );
PATH_CHECK( path( "//share/", fs::native ), "//share/" );
PATH_CHECK( path( "//share/foo", fs::native ), "//share/foo" );
PATH_CHECK( path( "\\\\share", fs::native ), "//share" );
PATH_CHECK( path( "\\\\share\\", fs::native ), "//share/" );
PATH_CHECK( path( "\\\\share\\foo", fs::native ), "//share/foo" );
PATH_CHECK( path( "c:/foo", fs::native ), "c:/foo" );
PATH_CHECK( path( "prn:", fs::native ), "prn:" );
p = path( "c:", fs::native );
BOOST_CHECK( p.relative_path().string() == "" );
BOOST_CHECK( p.branch_path().string() == "" );
BOOST_CHECK( p.leaf() == "c:" );
BOOST_CHECK( p.root_name() == "c:" );
BOOST_CHECK( p.root_directory() == "" );
BOOST_CHECK( p.root_path().string() == "c:" );
BOOST_CHECK( p.has_root_path() );
BOOST_CHECK( p.has_root_name() );
BOOST_CHECK( !p.has_root_directory() );
BOOST_CHECK( !p.has_relative_path() );
BOOST_CHECK( p.has_leaf() );
BOOST_CHECK( !p.has_branch_path() );
BOOST_CHECK( !p.is_complete() );
p = path( "c:foo", fs::native );
BOOST_CHECK( p.relative_path().string() == "foo" );
BOOST_CHECK( p.branch_path().string() == "c:" );
BOOST_CHECK( p.leaf() == "foo" );
BOOST_CHECK( p.root_name() == "c:" );
BOOST_CHECK( p.root_directory() == "" );
BOOST_CHECK( p.root_path().string() == "c:" );
BOOST_CHECK( p.has_root_path() );
BOOST_CHECK( p.has_root_name() );
BOOST_CHECK( !p.has_root_directory() );
BOOST_CHECK( p.has_relative_path() );
BOOST_CHECK( p.has_leaf() );
BOOST_CHECK( p.has_branch_path() );
BOOST_CHECK( !p.is_complete() );
p = path( "c:/", fs::native );
BOOST_CHECK( p.relative_path().string() == "" );
BOOST_CHECK( p.branch_path().string() == "c:" );
BOOST_CHECK( p.leaf() == "/" );
BOOST_CHECK( p.root_name() == "c:" );
BOOST_CHECK( p.root_directory() == "/" );
BOOST_CHECK( p.root_path().string() == "c:/" );
BOOST_CHECK( p.has_root_path() );
BOOST_CHECK( p.has_root_name() );
BOOST_CHECK( p.has_root_directory() );
BOOST_CHECK( !p.has_relative_path() );
BOOST_CHECK( p.has_leaf() );
BOOST_CHECK( p.has_branch_path() );
BOOST_CHECK( p.is_complete() );
p = path( "c:..", fs::native );
BOOST_CHECK( p.relative_path().string() == ".." );
BOOST_CHECK( p.branch_path().string() == "c:" );
BOOST_CHECK( p.leaf() == ".." );
BOOST_CHECK( p.root_name() == "c:" );
BOOST_CHECK( p.root_directory() == "" );
BOOST_CHECK( p.root_path().string() == "c:" );
BOOST_CHECK( p.has_root_path() );
BOOST_CHECK( p.has_root_name() );
BOOST_CHECK( !p.has_root_directory() );
BOOST_CHECK( p.has_relative_path() );
BOOST_CHECK( p.has_leaf() );
BOOST_CHECK( p.has_branch_path() );
BOOST_CHECK( !p.is_complete() );
p = path( "c:/foo", fs::native );
BOOST_CHECK( p.relative_path().string() == "foo" );
BOOST_CHECK( p.branch_path().string() == "c:/" );
BOOST_CHECK( p.leaf() == "foo" );
BOOST_CHECK( p.root_name() == "c:" );
BOOST_CHECK( p.root_directory() == "/" );
BOOST_CHECK( p.root_path().string() == "c:/" );
BOOST_CHECK( p.has_root_path() );
BOOST_CHECK( p.has_root_name() );
BOOST_CHECK( p.has_root_directory() );
BOOST_CHECK( p.has_relative_path() );
BOOST_CHECK( p.has_leaf() );
BOOST_CHECK( p.has_branch_path() );
BOOST_CHECK( p.is_complete() );
/* Commented out until the semantics of //share are clearer.
p = path( "//share", fs::native );
BOOST_CHECK( p.string() == "//share" );
BOOST_CHECK( p.relative_path().string() == "" );
BOOST_CHECK( p.branch_path().string() == "" );
BOOST_CHECK( p.leaf() == "//share" );
BOOST_CHECK( p.root_name() == "//share" );
BOOST_CHECK( p.root_directory() == "/" );
BOOST_CHECK( p.root_path().string() == "//share/" );
BOOST_CHECK( p.has_root_path() );
BOOST_CHECK( p.has_root_name() );
BOOST_CHECK( !p.has_root_directory() );
BOOST_CHECK( !p.has_relative_path() );
BOOST_CHECK( p.has_leaf() );
BOOST_CHECK( !p.has_branch_path() );
BOOST_CHECK( !p.is_complete() );
*/
p = path( "//share/", fs::native );
BOOST_CHECK( p.relative_path().string() == "" );
BOOST_CHECK( p.branch_path().string() == "//share" );
BOOST_CHECK( p.leaf() == "/" );
BOOST_CHECK( p.root_name() == "//share" );
BOOST_CHECK( p.root_directory() == "/" );
BOOST_CHECK( p.root_path().string() == "//share/" );
BOOST_CHECK( p.has_root_path() );
BOOST_CHECK( p.has_root_name() );
BOOST_CHECK( p.has_root_directory() );
BOOST_CHECK( !p.has_relative_path() );
BOOST_CHECK( p.has_leaf() );
BOOST_CHECK( p.has_branch_path() );
BOOST_CHECK( p.is_complete() );
p = path( "//share/foo", fs::native );
BOOST_CHECK( p.relative_path().string() == "foo" );
BOOST_CHECK( p.branch_path().string() == "//share/" );
BOOST_CHECK( p.leaf() == "foo" );
BOOST_CHECK( p.root_name() == "//share" );
BOOST_CHECK( p.root_directory() == "/" );
BOOST_CHECK( p.root_path().string() == "//share/" );
BOOST_CHECK( p.has_root_path() );
BOOST_CHECK( p.has_root_name() );
BOOST_CHECK( p.has_root_directory() );
BOOST_CHECK( p.has_relative_path() );
BOOST_CHECK( p.has_leaf() );
BOOST_CHECK( p.has_branch_path() );
BOOST_CHECK( p.is_complete() );
p = path( "prn:", fs::native );
BOOST_CHECK( p.relative_path().string() == "" );
BOOST_CHECK( p.branch_path().string() == "" );
BOOST_CHECK( p.leaf() == "prn:" );
BOOST_CHECK( p.root_name() == "prn:" );
BOOST_CHECK( p.root_directory() == "" );
BOOST_CHECK( p.root_path().string() == "prn:" );
BOOST_CHECK( p.has_root_path() );
BOOST_CHECK( p.has_root_name() );
BOOST_CHECK( !p.has_root_directory() );
BOOST_CHECK( !p.has_relative_path() );
BOOST_CHECK( p.has_leaf() );
BOOST_CHECK( !p.has_branch_path() );
BOOST_CHECK( p.is_complete() );
itr_ck = path( "c:", fs::native );
BOOST_CHECK( *itr_ck.begin() == std::string( "c:" ) );
BOOST_CHECK( next( itr_ck.begin() ) == itr_ck.end() );
BOOST_CHECK( prior( itr_ck.end() ) == itr_ck.begin() );
BOOST_CHECK( *prior( itr_ck.end() ) == std::string( "c:" ) );
itr_ck = path( "c:/", fs::native );
BOOST_CHECK( *itr_ck.begin() == std::string( "c:" ) );
BOOST_CHECK( *next( itr_ck.begin() ) == std::string( "/" ) );
BOOST_CHECK( next( next( itr_ck.begin() )) == itr_ck.end() );
BOOST_CHECK( prior( prior( itr_ck.end() )) == itr_ck.begin() );
BOOST_CHECK( *prior( itr_ck.end() ) == std::string( "/" ) );
BOOST_CHECK( *prior( prior( itr_ck.end() )) == std::string( "c:" ) );
itr_ck = path( "c:foo", fs::native );
BOOST_CHECK( *itr_ck.begin() == std::string( "c:" ) );
BOOST_CHECK( *next( itr_ck.begin() ) == std::string( "foo" ) );
BOOST_CHECK( next(next( itr_ck.begin() )) == itr_ck.end() );
BOOST_CHECK( prior(prior( itr_ck.end() )) == itr_ck.begin() );
BOOST_CHECK( *prior( itr_ck.end() ) == std::string( "foo" ) );
BOOST_CHECK( *prior(prior( itr_ck.end() )) == std::string( "c:" ) );
itr_ck = path( "c:/foo", fs::native );
BOOST_CHECK( *itr_ck.begin() == std::string( "c:" ) );
BOOST_CHECK( *next( itr_ck.begin() ) == std::string( "/" ) );
BOOST_CHECK( *next( next( itr_ck.begin() )) == std::string( "foo" ) );
BOOST_CHECK( next( next( next( itr_ck.begin() ))) == itr_ck.end() );
BOOST_CHECK( prior( prior( prior( itr_ck.end() ))) == itr_ck.begin() );
BOOST_CHECK( *prior( itr_ck.end() ) == std::string( "foo" ) );
BOOST_CHECK( *prior( prior( itr_ck.end() )) == std::string( "/" ) );
BOOST_CHECK( *prior( prior( prior( itr_ck.end() ))) == std::string( "c:" ) );
itr_ck = path( "//share", fs::native );
BOOST_CHECK( *itr_ck.begin() == std::string( "//share" ) );
BOOST_CHECK( next( itr_ck.begin() ) == itr_ck.end() );
BOOST_CHECK( prior( itr_ck.end() ) == itr_ck.begin() );
BOOST_CHECK( *prior( itr_ck.end() ) == std::string( "//share" ) );
itr_ck = path( "//share/", fs::native );
BOOST_CHECK( *itr_ck.begin() == std::string( "//share" ) );
BOOST_CHECK( *next( itr_ck.begin() ) == std::string( "/" ) );
BOOST_CHECK( next(next( itr_ck.begin() )) == itr_ck.end() );
BOOST_CHECK( prior(prior( itr_ck.end() )) == itr_ck.begin() );
BOOST_CHECK( *prior( itr_ck.end() ) == std::string( "/" ) );
BOOST_CHECK( *prior(prior( itr_ck.end() )) == std::string( "//share" ) );
itr_ck = path( "//share/foo", fs::native );
BOOST_CHECK( *itr_ck.begin() == std::string( "//share" ) );
BOOST_CHECK( *next( itr_ck.begin() ) == std::string( "/" ) );
BOOST_CHECK( *next(next( itr_ck.begin() )) == std::string( "foo" ) );
BOOST_CHECK( next(next(next( itr_ck.begin() ))) == itr_ck.end() );
BOOST_CHECK( prior(prior(prior( itr_ck.end() ))) == itr_ck.begin() );
BOOST_CHECK( *prior( itr_ck.end() ) == std::string( "foo" ) );
BOOST_CHECK( *prior(prior( itr_ck.end() )) == std::string( "/" ) );
BOOST_CHECK( *prior(prior(prior( itr_ck.end() ))) == std::string( "//share" ) );
itr_ck = path( "prn:", fs::native );
BOOST_CHECK( *itr_ck.begin() == std::string( "prn:" ) );
BOOST_CHECK( next( itr_ck.begin() ) == itr_ck.end() );
BOOST_CHECK( prior( itr_ck.end() ) == itr_ck.begin() );
BOOST_CHECK( *prior( itr_ck.end() ) == std::string( "prn:" ) );
} // Windows
else
{ // POSIX
p = path( "/usr/local/bin:/usr/bin:/bin", fs::no_check );
BOOST_CHECK( p.native_file_string() == "/usr/local/bin:/usr/bin:/bin" );
} // POSIX
// test relational operators
path e, e2;
path a( "a" );
path a2( "a" );
path b( "b" );
// probe operator <
BOOST_CHECK( !(e < e2) );
BOOST_CHECK( e < a );
BOOST_CHECK( a < b );
BOOST_CHECK( !(a < a2) );
// reality check character set is as expected
BOOST_CHECK( std::string("a.b") < std::string("a/b") );
// verify compare is actually lexicographical
BOOST_CHECK( path("a/b") < path("a.b") );
// make sure the derivative operators also work
BOOST_CHECK( a == a2 );
BOOST_CHECK( a != b );
BOOST_CHECK( a <= b );
BOOST_CHECK( a <= a2 );
BOOST_CHECK( b >= a );
BOOST_CHECK( a2 >= a );
// std::cout << errors << " errors detected\n";
return errors;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -