Added new style named arguments.

This commit is contained in:
Christoffer Lerno
2024-08-27 22:31:22 +02:00
parent e795745e43
commit ed5d338a39
42 changed files with 405 additions and 304 deletions

View File

@@ -21,197 +21,197 @@ fn void! test_parent()
{
Path p = path::new("")!;
assert(@catch(p.parent()));
p = path::new("/", .path_env = PathEnv.POSIX)!;
p = path::new("/", path_env: PathEnv.POSIX)!;
assert(@catch(p.parent()));
p = path::new("/a/b/c", .path_env = PathEnv.POSIX)!;
p = path::new("/a/b/c", path_env: PathEnv.POSIX)!;
assert(p.parent().str_view()! == "/a/b");
p = path::new("/a/b/c", .path_env = PathEnv.WIN32)!;
p = path::new("/a/b/c", path_env: PathEnv.WIN32)!;
assert(p.parent().str_view()! == `\a\b`);
}
fn void! test_path_normalized()
{
assert(path::new("", .path_env = PathEnv.WIN32).str_view()! == "");
assert(@catch(path::new("1:\\a\\b\\c.txt", .path_env = PathEnv.WIN32)));
assert(@catch(path::new(":", .path_env = PathEnv.WIN32)));
assert(@catch(path::new("1:", .path_env = PathEnv.WIN32)));
assert(@catch(path::new("1:a", .path_env = PathEnv.WIN32)));
// assert(@catch(path::new(`\\\a\b\c.txt`, .path_env = PathEnv.WIN32)));
assert(@catch(path::new(`\\server\a\b\..\..\..\c`, .path_env = PathEnv.WIN32)));
assert(path::new("", path_env: PathEnv.WIN32).str_view()! == "");
assert(@catch(path::new("1:\\a\\b\\c.txt", path_env: PathEnv.WIN32)));
assert(@catch(path::new(":", path_env: PathEnv.WIN32)));
assert(@catch(path::new("1:", path_env: PathEnv.WIN32)));
assert(@catch(path::new("1:a", path_env: PathEnv.WIN32)));
// assert(@catch(path::new(`\\\a\b\c.txt`, path_env: PathEnv.WIN32)));
assert(@catch(path::new(`\\server\a\b\..\..\..\c`, path_env: PathEnv.WIN32)));
assert(@catch(path::new(`\\a`, .path_env = PathEnv.WIN32)));
assert(@catch(path::new(`/a/b/../../../c`, .path_env = PathEnv.WIN32)));
assert(@catch(path::new(`/a/b/../../../c`, .path_env = PathEnv.POSIX)));
assert(@catch(path::new(`/a/b/../../..`, .path_env = PathEnv.WIN32)));
assert(@catch(path::new(`/a/b/../../..`, .path_env = PathEnv.POSIX)));
assert(@catch(path::new(`/../a`, .path_env = PathEnv.WIN32)));
assert(@catch(path::new(`/../a`, .path_env = PathEnv.POSIX)));
assert(@catch(path::new(`/..`, .path_env = PathEnv.WIN32)));
assert(@catch(path::new(`/..`, .path_env = PathEnv.POSIX)));
assert(@catch(path::new(`C:/a/b/../../../c`, .path_env = PathEnv.WIN32)));
assert(@catch(path::new(`C:/../a`, .path_env = PathEnv.WIN32)));
assert(@catch(path::new(`C:/..`, .path_env = PathEnv.WIN32)));
assert(@catch(path::new(`\\a`, path_env: PathEnv.WIN32)));
assert(@catch(path::new(`/a/b/../../../c`, path_env: PathEnv.WIN32)));
assert(@catch(path::new(`/a/b/../../../c`, path_env: PathEnv.POSIX)));
assert(@catch(path::new(`/a/b/../../..`, path_env: PathEnv.WIN32)));
assert(@catch(path::new(`/a/b/../../..`, path_env: PathEnv.POSIX)));
assert(@catch(path::new(`/../a`, path_env: PathEnv.WIN32)));
assert(@catch(path::new(`/../a`, path_env: PathEnv.POSIX)));
assert(@catch(path::new(`/..`, path_env: PathEnv.WIN32)));
assert(@catch(path::new(`/..`, path_env: PathEnv.POSIX)));
assert(@catch(path::new(`C:/a/b/../../../c`, path_env: PathEnv.WIN32)));
assert(@catch(path::new(`C:/../a`, path_env: PathEnv.WIN32)));
assert(@catch(path::new(`C:/..`, path_env: PathEnv.WIN32)));
assert(path::new("/", .path_env = PathEnv.POSIX).str_view()! == "/");
assert(path::new("/./", .path_env = PathEnv.POSIX).str_view()! == "/");
assert(path::new("/foo/../", .path_env = PathEnv.POSIX).str_view()! == "/");
assert(path::new("/foo/bar/../", .path_env = PathEnv.POSIX).str_view()! == "/foo");
assert(path::new("/foo//bar", .path_env = PathEnv.POSIX).str_view()! == "/foo/bar");
assert(path::new("/foo//bar/../", .path_env = PathEnv.POSIX).str_view()! == "/foo");
assert(path::new("/foo/.bar", .path_env = PathEnv.POSIX).str_view()! == "/foo/.bar");
assert(path::new(`\foo\.bar`, .path_env = PathEnv.WIN32).str_view()! == `\foo\.bar`);
assert(path::new("a\\b/c.txt", .path_env = PathEnv.WIN32).str_view()! == `a\b\c.txt`);
assert(path::new("a\\b/c.txt", .path_env = PathEnv.POSIX).str_view()! == "a\\b/c.txt");
assert(path::new("C:\\a\\b/c.txt", .path_env = PathEnv.WIN32).str_view()! == `C:\a\b\c.txt`);
assert(path::new("C:\\a\\b/c.txt", .path_env = PathEnv.POSIX).str_view()! == "C:\\a\\b/c.txt");
assert(path::new(`\\server\a\b/c.txt`, .path_env = PathEnv.WIN32).str_view()! == `\\server\a\b\c.txt`);
assert(path::new(`\\server\a\b/c.txt`, .path_env = PathEnv.POSIX).str_view()! == `\\server\a\b/c.txt`);
assert(path::new(`c:\hello//bar\\\\foo.txt`, .path_env = PathEnv.WIN32).str_view()! == `c:\hello\bar\foo.txt`);
assert(path::new("/", path_env: PathEnv.POSIX).str_view()! == "/");
assert(path::new("/./", path_env: PathEnv.POSIX).str_view()! == "/");
assert(path::new("/foo/../", path_env: PathEnv.POSIX).str_view()! == "/");
assert(path::new("/foo/bar/../", path_env: PathEnv.POSIX).str_view()! == "/foo");
assert(path::new("/foo//bar", path_env: PathEnv.POSIX).str_view()! == "/foo/bar");
assert(path::new("/foo//bar/../", path_env: PathEnv.POSIX).str_view()! == "/foo");
assert(path::new("/foo/.bar", path_env: PathEnv.POSIX).str_view()! == "/foo/.bar");
assert(path::new(`\foo\.bar`, path_env: PathEnv.WIN32).str_view()! == `\foo\.bar`);
assert(path::new("a\\b/c.txt", path_env: PathEnv.WIN32).str_view()! == `a\b\c.txt`);
assert(path::new("a\\b/c.txt", path_env: PathEnv.POSIX).str_view()! == "a\\b/c.txt");
assert(path::new("C:\\a\\b/c.txt", path_env: PathEnv.WIN32).str_view()! == `C:\a\b\c.txt`);
assert(path::new("C:\\a\\b/c.txt", path_env: PathEnv.POSIX).str_view()! == "C:\\a\\b/c.txt");
assert(path::new(`\\server\a\b/c.txt`, path_env: PathEnv.WIN32).str_view()! == `\\server\a\b\c.txt`);
assert(path::new(`\\server\a\b/c.txt`, path_env: PathEnv.POSIX).str_view()! == `\\server\a\b/c.txt`);
assert(path::new(`c:\hello//bar\\\\foo.txt`, path_env: PathEnv.WIN32).str_view()! == `c:\hello\bar\foo.txt`);
assert(path::new(`~\a\b/c.txt`, .path_env = PathEnv.WIN32).str_view()! == `~\a\b\c.txt`);
assert(path::new(`~\a\b/c.txt`, .path_env = PathEnv.POSIX).str_view()! == `~\a\b/c.txt`);
assert(path::new(`~\a\b/c.txt`, path_env: PathEnv.WIN32).str_view()! == `~\a\b\c.txt`);
assert(path::new(`~\a\b/c.txt`, path_env: PathEnv.POSIX).str_view()! == `~\a\b/c.txt`);
assert(path::new(`a/b/../../../c`, .path_env = PathEnv.WIN32).str_view()! == `..\c`);
assert(path::new(`a/b/../../../c`, .path_env = PathEnv.POSIX).str_view()! == `../c`);
assert(path::new(`a/b/../../..`, .path_env = PathEnv.WIN32).str_view()! == `..`);
assert(path::new(`a/b/../../..`, .path_env = PathEnv.POSIX).str_view()! == `..`);
assert(path::new(`../a`, .path_env = PathEnv.WIN32).str_view()! == `..\a`);
assert(path::new(`../a`, .path_env = PathEnv.POSIX).str_view()! == `../a`);
assert(path::new(`..`, .path_env = PathEnv.WIN32).str_view()! == `..`);
assert(path::new(`..`, .path_env = PathEnv.POSIX).str_view()! == `..`);
assert(path::new(`a/b/../c`, .path_env = PathEnv.WIN32).str_view()! == `a\c`);
assert(path::new(`a/b/../c`, .path_env = PathEnv.POSIX).str_view()! == `a/c`);
assert(path::new(`a/b/../../c`, .path_env = PathEnv.WIN32).str_view()! == `c`);
assert(path::new(`a/b/../../c`, .path_env = PathEnv.POSIX).str_view()! == `c`);
assert(path::new(`a/b/..`, .path_env = PathEnv.WIN32).str_view()! == `a`);
assert(path::new(`a/b/..`, .path_env = PathEnv.POSIX).str_view()! == `a`);
assert(path::new(`a/b/../`, .path_env = PathEnv.WIN32).str_view()! == `a`);
assert(path::new(`a/b/../`, .path_env = PathEnv.POSIX).str_view()! == `a`);
assert(path::new(`a/b/../..`, .path_env = PathEnv.WIN32).str_view()! == ".");
assert(path::new(`a/b/../..`, .path_env = PathEnv.POSIX).str_view()! == ".");
assert(path::new(`a/b/../../`, .path_env = PathEnv.WIN32).str_view()! == ".");
assert(path::new(`a/b/../../`, .path_env = PathEnv.POSIX).str_view()! == ".");
assert(path::new(`a/b/../c/../d`, .path_env = PathEnv.WIN32).str_view()! == `a\d`);
assert(path::new(`a/b/../c/../d`, .path_env = PathEnv.POSIX).str_view()! == `a/d`);
assert(path::new(`a/b/../c/../d/`, .path_env = PathEnv.WIN32).str_view()! == `a\d`);
assert(path::new(`a/b/../c/../d/`, .path_env = PathEnv.POSIX).str_view()! == `a/d`);
assert(path::new(`a/b//d`, .path_env = PathEnv.WIN32).str_view()! == `a\b\d`);
assert(path::new(`a/b//d`, .path_env = PathEnv.POSIX).str_view()! == `a/b/d`);
assert(path::new(`a/b/././.`, .path_env = PathEnv.WIN32).str_view()! == `a\b`);
assert(path::new(`a/b/././.`, .path_env = PathEnv.POSIX).str_view()! == `a/b`);
assert(path::new(`a/b/./././`, .path_env = PathEnv.WIN32).str_view()! == `a\b`);
assert(path::new(`a/b/./././`, .path_env = PathEnv.POSIX).str_view()! == `a/b`);
assert(path::new(`./a/`, .path_env = PathEnv.WIN32).str_view()! == `a`);
assert(path::new(`./a/`, .path_env = PathEnv.POSIX).str_view()! == `a`);
assert(path::new(`./`, .path_env = PathEnv.WIN32).str_view()! == `.`);
assert(path::new(`./`, .path_env = PathEnv.POSIX).str_view()! == `.`);
assert(path::new(`.`, .path_env = PathEnv.WIN32).str_view()! == `.`);
assert(path::new(`.`, .path_env = PathEnv.POSIX).str_view()! == `.`);
assert(path::new(``, .path_env = PathEnv.WIN32).str_view()! == ``);
assert(path::new(``, .path_env = PathEnv.POSIX).str_view()! == ``);
assert(path::new(`/a`, .path_env = PathEnv.WIN32).str_view()! == `\a`);
assert(path::new(`/a`, .path_env = PathEnv.POSIX).str_view()! == `/a`);
assert(path::new(`/a/`, .path_env = PathEnv.WIN32).str_view()! == `\a`);
assert(path::new(`/a/`, .path_env = PathEnv.POSIX).str_view()! == `/a`);
assert(path::new(`/a/b/../c`, .path_env = PathEnv.WIN32).str_view()! == `\a\c`);
assert(path::new(`/a/b/../c`, .path_env = PathEnv.POSIX).str_view()! == `/a/c`);
assert(path::new(`/a/b/../../c`, .path_env = PathEnv.WIN32).str_view()! == `\c`);
assert(path::new(`/a/b/../../c`, .path_env = PathEnv.POSIX).str_view()! == `/c`);
assert(path::new(`/a/b/..`, .path_env = PathEnv.WIN32).str_view()! == `\a`);
assert(path::new(`/a/b/..`, .path_env = PathEnv.POSIX).str_view()! == `/a`);
assert(path::new(`/a/b/../..`, .path_env = PathEnv.WIN32).str_view()! == `\`);
assert(path::new(`/a/b/../..`, .path_env = PathEnv.POSIX).str_view()! == `/`);
assert(path::new(`/a/b/../c/../d`, .path_env = PathEnv.WIN32).str_view()! == `\a\d`);
assert(path::new(`/a/b/../c/../d`, .path_env = PathEnv.POSIX).str_view()! == `/a/d`);
assert(path::new(`/a/b//d`, .path_env = PathEnv.WIN32).str_view()! == `\a\b\d`);
assert(path::new(`/a/b//d`, .path_env = PathEnv.POSIX).str_view()! == `/a/b/d`);
assert(path::new(`/./a/`, .path_env = PathEnv.WIN32).str_view()! == `\a`);
assert(path::new(`/./a/`, .path_env = PathEnv.POSIX).str_view()! == `/a`);
assert(path::new(`/./`, .path_env = PathEnv.WIN32).str_view()! == `\`);
assert(path::new(`/./`, .path_env = PathEnv.POSIX).str_view()! == `/`);
assert(path::new(`/.`, .path_env = PathEnv.WIN32).str_view()! == `\`);
assert(path::new(`/.`, .path_env = PathEnv.POSIX).str_view()! == `/`);
assert(path::new(`/`, .path_env = PathEnv.WIN32).str_view()! == `\`);
assert(path::new(`/`, .path_env = PathEnv.POSIX).str_view()! == `/`);
assert(path::new(`C:/a`, .path_env = PathEnv.WIN32).str_view()! == `C:\a`);
assert(path::new(`C:/a`, .path_env = PathEnv.POSIX).str_view()! == `C:/a`);
assert(path::new(`C:/a/b/../c`, .path_env = PathEnv.WIN32).str_view()! == `C:\a\c`);
assert(path::new(`C:/a/b/../c`, .path_env = PathEnv.POSIX).str_view()! == `C:/a/c`);
assert(path::new(`C:/a/b/../../c`, .path_env = PathEnv.WIN32).str_view()! == `C:\c`);
assert(path::new(`C:/a/b/../../c`, .path_env = PathEnv.POSIX).str_view()! == `C:/c`);
assert(path::new(`C:/a/b/../../../c`, .path_env = PathEnv.POSIX).str_view()! == `c`);
assert(path::new(`C:/a/b/..`, .path_env = PathEnv.WIN32).str_view()! == `C:\a`);
assert(path::new(`C:/a/b/..`, .path_env = PathEnv.POSIX).str_view()! == `C:/a`);
assert(path::new(`C:/a/b/../..`, .path_env = PathEnv.WIN32).str_view()! == `C:\`);
assert(path::new(`C:/a/b/../..`, .path_env = PathEnv.POSIX).str_view()! == `C:`);
assert(path::new(`C:/a/b/../c/../d`, .path_env = PathEnv.WIN32).str_view()! == `C:\a\d`);
assert(path::new(`C:/a/b/../c/../d`, .path_env = PathEnv.POSIX).str_view()! == `C:/a/d`);
assert(path::new(`C:/a/b//d`, .path_env = PathEnv.WIN32).str_view()! == `C:\a\b\d`);
assert(path::new(`C:/a/b//d`, .path_env = PathEnv.POSIX).str_view()! == `C:/a/b/d`);
assert(path::new(`C:/a/b/././.`, .path_env = PathEnv.WIN32).str_view()! == `C:\a\b`);
assert(path::new(`C:/a/b/././.`, .path_env = PathEnv.POSIX).str_view()! == `C:/a/b`);
assert(path::new(`C:/./a`, .path_env = PathEnv.WIN32).str_view()! == `C:\a`);
assert(path::new(`C:/./a`, .path_env = PathEnv.POSIX).str_view()! == `C:/a`);
assert(path::new(`C:/./`, .path_env = PathEnv.WIN32).str_view()! == `C:\`);
assert(path::new(`C:/./`, .path_env = PathEnv.POSIX).str_view()! == `C:`);
assert(path::new(`C:/../a`, .path_env = PathEnv.POSIX).str_view()! == `a`);
assert(path::new(`C:/..`, .path_env = PathEnv.POSIX).str_view()! == `.`);
assert(path::new(`C:/`, .path_env = PathEnv.WIN32).str_view()! == `C:\`);
assert(path::new(`C:/`, .path_env = PathEnv.POSIX).str_view()! == `C:`);
assert(path::new(`C:a`, .path_env = PathEnv.WIN32).str_view()! == `C:a`);
assert(path::new(`C:a`, .path_env = PathEnv.POSIX).str_view()! == `C:a`);
assert(path::new(`C:a/`, .path_env = PathEnv.WIN32).str_view()! == `C:a`);
assert(path::new(`C:a/`, .path_env = PathEnv.POSIX).str_view()! == `C:a`);
assert(path::new(`a/b/../../../c`, path_env: PathEnv.WIN32).str_view()! == `..\c`);
assert(path::new(`a/b/../../../c`, path_env: PathEnv.POSIX).str_view()! == `../c`);
assert(path::new(`a/b/../../..`, path_env: PathEnv.WIN32).str_view()! == `..`);
assert(path::new(`a/b/../../..`, path_env: PathEnv.POSIX).str_view()! == `..`);
assert(path::new(`../a`, path_env: PathEnv.WIN32).str_view()! == `..\a`);
assert(path::new(`../a`, path_env: PathEnv.POSIX).str_view()! == `../a`);
assert(path::new(`..`, path_env: PathEnv.WIN32).str_view()! == `..`);
assert(path::new(`..`, path_env: PathEnv.POSIX).str_view()! == `..`);
assert(path::new(`a/b/../c`, path_env: PathEnv.WIN32).str_view()! == `a\c`);
assert(path::new(`a/b/../c`, path_env: PathEnv.POSIX).str_view()! == `a/c`);
assert(path::new(`a/b/../../c`, path_env: PathEnv.WIN32).str_view()! == `c`);
assert(path::new(`a/b/../../c`, path_env: PathEnv.POSIX).str_view()! == `c`);
assert(path::new(`a/b/..`, path_env: PathEnv.WIN32).str_view()! == `a`);
assert(path::new(`a/b/..`, path_env: PathEnv.POSIX).str_view()! == `a`);
assert(path::new(`a/b/../`, path_env: PathEnv.WIN32).str_view()! == `a`);
assert(path::new(`a/b/../`, path_env: PathEnv.POSIX).str_view()! == `a`);
assert(path::new(`a/b/../..`, path_env: PathEnv.WIN32).str_view()! == ".");
assert(path::new(`a/b/../..`, path_env: PathEnv.POSIX).str_view()! == ".");
assert(path::new(`a/b/../../`, path_env: PathEnv.WIN32).str_view()! == ".");
assert(path::new(`a/b/../../`, path_env: PathEnv.POSIX).str_view()! == ".");
assert(path::new(`a/b/../c/../d`, path_env: PathEnv.WIN32).str_view()! == `a\d`);
assert(path::new(`a/b/../c/../d`, path_env: PathEnv.POSIX).str_view()! == `a/d`);
assert(path::new(`a/b/../c/../d/`, path_env: PathEnv.WIN32).str_view()! == `a\d`);
assert(path::new(`a/b/../c/../d/`, path_env: PathEnv.POSIX).str_view()! == `a/d`);
assert(path::new(`a/b//d`, path_env: PathEnv.WIN32).str_view()! == `a\b\d`);
assert(path::new(`a/b//d`, path_env: PathEnv.POSIX).str_view()! == `a/b/d`);
assert(path::new(`a/b/././.`, path_env: PathEnv.WIN32).str_view()! == `a\b`);
assert(path::new(`a/b/././.`, path_env: PathEnv.POSIX).str_view()! == `a/b`);
assert(path::new(`a/b/./././`, path_env: PathEnv.WIN32).str_view()! == `a\b`);
assert(path::new(`a/b/./././`, path_env: PathEnv.POSIX).str_view()! == `a/b`);
assert(path::new(`./a/`, path_env: PathEnv.WIN32).str_view()! == `a`);
assert(path::new(`./a/`, path_env: PathEnv.POSIX).str_view()! == `a`);
assert(path::new(`./`, path_env: PathEnv.WIN32).str_view()! == `.`);
assert(path::new(`./`, path_env: PathEnv.POSIX).str_view()! == `.`);
assert(path::new(`.`, path_env: PathEnv.WIN32).str_view()! == `.`);
assert(path::new(`.`, path_env: PathEnv.POSIX).str_view()! == `.`);
assert(path::new(``, path_env: PathEnv.WIN32).str_view()! == ``);
assert(path::new(``, path_env: PathEnv.POSIX).str_view()! == ``);
assert(path::new(`/a`, path_env: PathEnv.WIN32).str_view()! == `\a`);
assert(path::new(`/a`, path_env: PathEnv.POSIX).str_view()! == `/a`);
assert(path::new(`/a/`, path_env: PathEnv.WIN32).str_view()! == `\a`);
assert(path::new(`/a/`, path_env: PathEnv.POSIX).str_view()! == `/a`);
assert(path::new(`/a/b/../c`, path_env: PathEnv.WIN32).str_view()! == `\a\c`);
assert(path::new(`/a/b/../c`, path_env: PathEnv.POSIX).str_view()! == `/a/c`);
assert(path::new(`/a/b/../../c`, path_env: PathEnv.WIN32).str_view()! == `\c`);
assert(path::new(`/a/b/../../c`, path_env: PathEnv.POSIX).str_view()! == `/c`);
assert(path::new(`/a/b/..`, path_env: PathEnv.WIN32).str_view()! == `\a`);
assert(path::new(`/a/b/..`, path_env: PathEnv.POSIX).str_view()! == `/a`);
assert(path::new(`/a/b/../..`, path_env: PathEnv.WIN32).str_view()! == `\`);
assert(path::new(`/a/b/../..`, path_env: PathEnv.POSIX).str_view()! == `/`);
assert(path::new(`/a/b/../c/../d`, path_env: PathEnv.WIN32).str_view()! == `\a\d`);
assert(path::new(`/a/b/../c/../d`, path_env: PathEnv.POSIX).str_view()! == `/a/d`);
assert(path::new(`/a/b//d`, path_env: PathEnv.WIN32).str_view()! == `\a\b\d`);
assert(path::new(`/a/b//d`, path_env: PathEnv.POSIX).str_view()! == `/a/b/d`);
assert(path::new(`/./a/`, path_env: PathEnv.WIN32).str_view()! == `\a`);
assert(path::new(`/./a/`, path_env: PathEnv.POSIX).str_view()! == `/a`);
assert(path::new(`/./`, path_env: PathEnv.WIN32).str_view()! == `\`);
assert(path::new(`/./`, path_env: PathEnv.POSIX).str_view()! == `/`);
assert(path::new(`/.`, path_env: PathEnv.WIN32).str_view()! == `\`);
assert(path::new(`/.`, path_env: PathEnv.POSIX).str_view()! == `/`);
assert(path::new(`/`, path_env: PathEnv.WIN32).str_view()! == `\`);
assert(path::new(`/`, path_env: PathEnv.POSIX).str_view()! == `/`);
assert(path::new(`C:/a`, path_env: PathEnv.WIN32).str_view()! == `C:\a`);
assert(path::new(`C:/a`, path_env: PathEnv.POSIX).str_view()! == `C:/a`);
assert(path::new(`C:/a/b/../c`, path_env: PathEnv.WIN32).str_view()! == `C:\a\c`);
assert(path::new(`C:/a/b/../c`, path_env: PathEnv.POSIX).str_view()! == `C:/a/c`);
assert(path::new(`C:/a/b/../../c`, path_env: PathEnv.WIN32).str_view()! == `C:\c`);
assert(path::new(`C:/a/b/../../c`, path_env: PathEnv.POSIX).str_view()! == `C:/c`);
assert(path::new(`C:/a/b/../../../c`, path_env: PathEnv.POSIX).str_view()! == `c`);
assert(path::new(`C:/a/b/..`, path_env: PathEnv.WIN32).str_view()! == `C:\a`);
assert(path::new(`C:/a/b/..`, path_env: PathEnv.POSIX).str_view()! == `C:/a`);
assert(path::new(`C:/a/b/../..`, path_env: PathEnv.WIN32).str_view()! == `C:\`);
assert(path::new(`C:/a/b/../..`, path_env: PathEnv.POSIX).str_view()! == `C:`);
assert(path::new(`C:/a/b/../c/../d`, path_env: PathEnv.WIN32).str_view()! == `C:\a\d`);
assert(path::new(`C:/a/b/../c/../d`, path_env: PathEnv.POSIX).str_view()! == `C:/a/d`);
assert(path::new(`C:/a/b//d`, path_env: PathEnv.WIN32).str_view()! == `C:\a\b\d`);
assert(path::new(`C:/a/b//d`, path_env: PathEnv.POSIX).str_view()! == `C:/a/b/d`);
assert(path::new(`C:/a/b/././.`, path_env: PathEnv.WIN32).str_view()! == `C:\a\b`);
assert(path::new(`C:/a/b/././.`, path_env: PathEnv.POSIX).str_view()! == `C:/a/b`);
assert(path::new(`C:/./a`, path_env: PathEnv.WIN32).str_view()! == `C:\a`);
assert(path::new(`C:/./a`, path_env: PathEnv.POSIX).str_view()! == `C:/a`);
assert(path::new(`C:/./`, path_env: PathEnv.WIN32).str_view()! == `C:\`);
assert(path::new(`C:/./`, path_env: PathEnv.POSIX).str_view()! == `C:`);
assert(path::new(`C:/../a`, path_env: PathEnv.POSIX).str_view()! == `a`);
assert(path::new(`C:/..`, path_env: PathEnv.POSIX).str_view()! == `.`);
assert(path::new(`C:/`, path_env: PathEnv.WIN32).str_view()! == `C:\`);
assert(path::new(`C:/`, path_env: PathEnv.POSIX).str_view()! == `C:`);
assert(path::new(`C:a`, path_env: PathEnv.WIN32).str_view()! == `C:a`);
assert(path::new(`C:a`, path_env: PathEnv.POSIX).str_view()! == `C:a`);
assert(path::new(`C:a/`, path_env: PathEnv.WIN32).str_view()! == `C:a`);
assert(path::new(`C:a/`, path_env: PathEnv.POSIX).str_view()! == `C:a`);
assert(path::new(`C:a/b/../c`, .path_env = PathEnv.WIN32).str_view()! == `C:a\c`);
assert(path::new(`C:a/b/../c`, .path_env = PathEnv.POSIX).str_view()! == `C:a/c`);
assert(path::new(`C:a/b/../../c`, .path_env = PathEnv.WIN32).str_view()! == `C:c`);
assert(path::new(`C:a/b/../../c`, .path_env = PathEnv.POSIX).str_view()! == `c`);
assert(path::new(`C:a/b/..`, .path_env = PathEnv.WIN32).str_view()! == `C:a`);
assert(path::new(`C:a/b/..`, .path_env = PathEnv.POSIX).str_view()! == `C:a`);
assert(path::new(`C:a/b/../..`, .path_env = PathEnv.WIN32).str_view()! == `C:`);
assert(path::new(`C:a/b/../..`, .path_env = PathEnv.POSIX).str_view()! == `.`);
assert(path::new(`C:a/b/../c/../d`, .path_env = PathEnv.WIN32).str_view()! == `C:a\d`);
assert(path::new(`C:a/b/../c/../d`, .path_env = PathEnv.POSIX).str_view()! == `C:a/d`);
assert(path::new(`C:a/b//d`, .path_env = PathEnv.WIN32).str_view()! == `C:a\b\d`);
assert(path::new(`C:a/b//d`, .path_env = PathEnv.POSIX).str_view()! == `C:a/b/d`);
assert(path::new(`C:a/b/././.`, .path_env = PathEnv.WIN32).str_view()! == `C:a\b`);
assert(path::new(`C:a/b/././.`, .path_env = PathEnv.POSIX).str_view()! == `C:a/b`);
assert(path::new(`C:a/b/../../../c`, .path_env = PathEnv.WIN32).str_view()! == `C:..\c`);
assert(path::new(`C:./a`, .path_env = PathEnv.WIN32).str_view()! == `C:a`);
assert(path::new(`C:./a`, .path_env = PathEnv.POSIX).str_view()! == `C:./a`);
assert(path::new(`C:./`, .path_env = PathEnv.WIN32).str_view()! == `C:`);
assert(path::new(`C:./`, .path_env = PathEnv.POSIX).str_view()! == `C:.`);
assert(path::new(`C:../a`, .path_env = PathEnv.POSIX).str_view()! == `C:../a`);
assert(path::new(`C:../a`, .path_env = PathEnv.WIN32).str_view()! == `C:..\a`);
assert(path::new(`C:..`, .path_env = PathEnv.POSIX).str_view()! == `C:..`);
assert(path::new(`C:..`, .path_env = PathEnv.WIN32).str_view()! == `C:..`);
assert(path::new(`C:`, .path_env = PathEnv.WIN32).str_view()! == `C:`);
assert(path::new(`C:`, .path_env = PathEnv.POSIX).str_view()! == `C:`);
assert(path::new(`C:a/b/../c`, path_env: PathEnv.WIN32).str_view()! == `C:a\c`);
assert(path::new(`C:a/b/../c`, path_env: PathEnv.POSIX).str_view()! == `C:a/c`);
assert(path::new(`C:a/b/../../c`, path_env: PathEnv.WIN32).str_view()! == `C:c`);
assert(path::new(`C:a/b/../../c`, path_env: PathEnv.POSIX).str_view()! == `c`);
assert(path::new(`C:a/b/..`, path_env: PathEnv.WIN32).str_view()! == `C:a`);
assert(path::new(`C:a/b/..`, path_env: PathEnv.POSIX).str_view()! == `C:a`);
assert(path::new(`C:a/b/../..`, path_env: PathEnv.WIN32).str_view()! == `C:`);
assert(path::new(`C:a/b/../..`, path_env: PathEnv.POSIX).str_view()! == `.`);
assert(path::new(`C:a/b/../c/../d`, path_env: PathEnv.WIN32).str_view()! == `C:a\d`);
assert(path::new(`C:a/b/../c/../d`, path_env: PathEnv.POSIX).str_view()! == `C:a/d`);
assert(path::new(`C:a/b//d`, path_env: PathEnv.WIN32).str_view()! == `C:a\b\d`);
assert(path::new(`C:a/b//d`, path_env: PathEnv.POSIX).str_view()! == `C:a/b/d`);
assert(path::new(`C:a/b/././.`, path_env: PathEnv.WIN32).str_view()! == `C:a\b`);
assert(path::new(`C:a/b/././.`, path_env: PathEnv.POSIX).str_view()! == `C:a/b`);
assert(path::new(`C:a/b/../../../c`, path_env: PathEnv.WIN32).str_view()! == `C:..\c`);
assert(path::new(`C:./a`, path_env: PathEnv.WIN32).str_view()! == `C:a`);
assert(path::new(`C:./a`, path_env: PathEnv.POSIX).str_view()! == `C:./a`);
assert(path::new(`C:./`, path_env: PathEnv.WIN32).str_view()! == `C:`);
assert(path::new(`C:./`, path_env: PathEnv.POSIX).str_view()! == `C:.`);
assert(path::new(`C:../a`, path_env: PathEnv.POSIX).str_view()! == `C:../a`);
assert(path::new(`C:../a`, path_env: PathEnv.WIN32).str_view()! == `C:..\a`);
assert(path::new(`C:..`, path_env: PathEnv.POSIX).str_view()! == `C:..`);
assert(path::new(`C:..`, path_env: PathEnv.WIN32).str_view()! == `C:..`);
assert(path::new(`C:`, path_env: PathEnv.WIN32).str_view()! == `C:`);
assert(path::new(`C:`, path_env: PathEnv.POSIX).str_view()! == `C:`);
assert(path::new(`\\server\foo/a`, .path_env = PathEnv.WIN32).str_view()! == `\\server\foo\a`);
assert(path::new(`\\server\foo/a`, .path_env = PathEnv.POSIX).str_view()! == `\\server\foo/a`);
assert(path::new(`\\server\foo\a\b\..\c`, .path_env = PathEnv.WIN32).str_view()! == `\\server\foo\a\c`);
assert(path::new(`\\server\foo\a\b\..\..\c`, .path_env = PathEnv.WIN32).str_view()! == `\\server\foo\c`);
assert(path::new(`\\server\foo\a\b\..`, .path_env = PathEnv.WIN32).str_view()! == `\\server\foo\a`);
assert(path::new(`\\server\foo\a\..`, .path_env = PathEnv.WIN32).str_view()! == `\\server\foo\`);
assert(path::new(`\\server\foo\a\b\..\c\..\d`, .path_env = PathEnv.WIN32).str_view()! == `\\server\foo\a\d`);
assert(path::new(`\\server\foo\a\b\\d`, .path_env = PathEnv.WIN32).str_view()! == `\\server\foo\a\b\d`);
assert(path::new(`\\server\foo\a\b\.\.\.`, .path_env = PathEnv.WIN32).str_view()! == `\\server\foo\a\b`);
assert(path::new(`\\server\foo\.\a`, .path_env = PathEnv.WIN32).str_view()! == `\\server\foo\a`);
assert(path::new(`\\server\foo\.`, .path_env = PathEnv.WIN32).str_view()! == `\\server\foo\`);
assert(path::new(`\\server\foo\`, .path_env = PathEnv.WIN32).str_view()! == `\\server\foo\`);
assert(path::new(`\\server\foo/a`, path_env: PathEnv.WIN32).str_view()! == `\\server\foo\a`);
assert(path::new(`\\server\foo/a`, path_env: PathEnv.POSIX).str_view()! == `\\server\foo/a`);
assert(path::new(`\\server\foo\a\b\..\c`, path_env: PathEnv.WIN32).str_view()! == `\\server\foo\a\c`);
assert(path::new(`\\server\foo\a\b\..\..\c`, path_env: PathEnv.WIN32).str_view()! == `\\server\foo\c`);
assert(path::new(`\\server\foo\a\b\..`, path_env: PathEnv.WIN32).str_view()! == `\\server\foo\a`);
assert(path::new(`\\server\foo\a\..`, path_env: PathEnv.WIN32).str_view()! == `\\server\foo\`);
assert(path::new(`\\server\foo\a\b\..\c\..\d`, path_env: PathEnv.WIN32).str_view()! == `\\server\foo\a\d`);
assert(path::new(`\\server\foo\a\b\\d`, path_env: PathEnv.WIN32).str_view()! == `\\server\foo\a\b\d`);
assert(path::new(`\\server\foo\a\b\.\.\.`, path_env: PathEnv.WIN32).str_view()! == `\\server\foo\a\b`);
assert(path::new(`\\server\foo\.\a`, path_env: PathEnv.WIN32).str_view()! == `\\server\foo\a`);
assert(path::new(`\\server\foo\.`, path_env: PathEnv.WIN32).str_view()! == `\\server\foo\`);
assert(path::new(`\\server\foo\`, path_env: PathEnv.WIN32).str_view()! == `\\server\foo\`);
}
fn void! test_extension()
{
assert(@catch(path::new(`C:`, .path_env = PathEnv.WIN32).extension()));
assert(@catch(path::new(`C:`, .path_env = PathEnv.POSIX).extension()));
assert(@catch(path::new(`file`, .path_env = PathEnv.WIN32).extension()));
assert(@catch(path::new(`file`, .path_env = PathEnv.POSIX).extension()));
assert(@catch(path::new(`C:\temp\foo.bar\README`, .path_env = PathEnv.WIN32).extension()));
assert(@catch(path::new(`C:`, path_env: PathEnv.WIN32).extension()));
assert(@catch(path::new(`C:`, path_env: PathEnv.POSIX).extension()));
assert(@catch(path::new(`file`, path_env: PathEnv.WIN32).extension()));
assert(@catch(path::new(`file`, path_env: PathEnv.POSIX).extension()));
assert(@catch(path::new(`C:\temp\foo.bar\README`, path_env: PathEnv.WIN32).extension()));
assert(path::new_windows("file.txt").extension()! == "txt");
assert(path::new_posix("file.txt").extension()! == "txt");
@@ -241,7 +241,7 @@ fn void! test_extension()
fn void! test_has_extension()
{
assert(!path::new(`C:\temp\foo.bar\README`, .path_env = PathEnv.WIN32)!.has_extension(`bar\README`));
assert(!path::new(`C:\temp\foo.bar\README`, path_env: PathEnv.WIN32)!.has_extension(`bar\README`));
assert(path::new_windows("file.txt")!.has_extension("txt"));
assert(path::new_posix("file.txt")!.has_extension("txt"));