#include <ostream> // https://github.com/doctest/doctest/issues/618
#include <vector>
-static bool
-operator==(std::pair<std::string, std::optional<std::string>> left,
- std::pair<std::string, std::optional<std::string>> right)
-{
- return left.first == right.first && left.second == right.second;
-}
-
-static bool
-operator==(std::pair<std::string_view, std::optional<std::string_view>> left,
- std::pair<std::string_view, std::optional<std::string_view>> right)
-{
- return left.first == right.first && left.second == right.second;
-}
-
TEST_SUITE_BEGIN("util");
TEST_CASE("util::format_argv_as_win32_command_string")
TEST_CASE("util::split_once")
{
- using std::make_pair;
+ using Result = std::pair<std::string, std::optional<std::string>>;
using std::nullopt;
using util::split_once;
SUBCASE("const char*")
{
- CHECK(split_once("", '=') == make_pair("", nullopt));
- CHECK(split_once("a", '=') == make_pair("a", nullopt));
- CHECK(split_once("=a", '=') == make_pair("", "a"));
- CHECK(split_once("a=", '=') == make_pair("a", ""));
- CHECK(split_once("a==", '=') == make_pair("a", "="));
- CHECK(split_once("a=b", '=') == make_pair("a", "b"));
- CHECK(split_once("a=b=", '=') == make_pair("a", "b="));
- CHECK(split_once("a=b=c", '=') == make_pair("a", "b=c"));
- CHECK(split_once("x y", ' ') == make_pair("x", "y"));
+ CHECK(split_once("", '=') == Result("", nullopt));
+ CHECK(split_once("a", '=') == Result("a", nullopt));
+ CHECK(split_once("=a", '=') == Result("", "a"));
+ CHECK(split_once("a=", '=') == Result("a", ""));
+ CHECK(split_once("a==", '=') == Result("a", "="));
+ CHECK(split_once("a=b", '=') == Result("a", "b"));
+ CHECK(split_once("a=b=", '=') == Result("a", "b="));
+ CHECK(split_once("a=b=c", '=') == Result("a", "b=c"));
+ CHECK(split_once("x y", ' ') == Result("x", "y"));
}
SUBCASE("std::string&&")
{
- CHECK(split_once(std::string(""), '=') == make_pair("", nullopt));
- CHECK(split_once(std::string("a"), '=') == make_pair("a", nullopt));
- CHECK(split_once(std::string("=a"), '=') == make_pair("", "a"));
- CHECK(split_once(std::string("a="), '=') == make_pair("a", ""));
- CHECK(split_once(std::string("a=="), '=') == make_pair("a", "="));
- CHECK(split_once(std::string("a=b"), '=') == make_pair("a", "b"));
- CHECK(split_once(std::string("a=b="), '=') == make_pair("a", "b="));
- CHECK(split_once(std::string("a=b=c"), '=') == make_pair("a", "b=c"));
- CHECK(split_once(std::string("x y"), ' ') == make_pair("x", "y"));
+ CHECK(split_once(std::string(""), '=') == Result("", nullopt));
+ CHECK(split_once(std::string("a"), '=') == Result("a", nullopt));
+ CHECK(split_once(std::string("=a"), '=') == Result("", "a"));
+ CHECK(split_once(std::string("a="), '=') == Result("a", ""));
+ CHECK(split_once(std::string("a=="), '=') == Result("a", "="));
+ CHECK(split_once(std::string("a=b"), '=') == Result("a", "b"));
+ CHECK(split_once(std::string("a=b="), '=') == Result("a", "b="));
+ CHECK(split_once(std::string("a=b=c"), '=') == Result("a", "b=c"));
+ CHECK(split_once(std::string("x y"), ' ') == Result("x", "y"));
}
SUBCASE("std::string_view")
{
- CHECK(split_once(std::string_view(""), '=') == make_pair("", nullopt));
- CHECK(split_once(std::string_view("a"), '=') == make_pair("a", nullopt));
- CHECK(split_once(std::string_view("=a"), '=') == make_pair("", "a"));
- CHECK(split_once(std::string_view("a="), '=') == make_pair("a", ""));
- CHECK(split_once(std::string_view("a=="), '=') == make_pair("a", "="));
- CHECK(split_once(std::string_view("a=b"), '=') == make_pair("a", "b"));
- CHECK(split_once(std::string_view("a=b="), '=') == make_pair("a", "b="));
- CHECK(split_once(std::string_view("a=b=c"), '=') == make_pair("a", "b=c"));
- CHECK(split_once(std::string_view("x y"), ' ') == make_pair("x", "y"));
+ CHECK(split_once(std::string_view(""), '=') == Result("", nullopt));
+ CHECK(split_once(std::string_view("a"), '=') == Result("a", nullopt));
+ CHECK(split_once(std::string_view("=a"), '=') == Result("", "a"));
+ CHECK(split_once(std::string_view("a="), '=') == Result("a", ""));
+ CHECK(split_once(std::string_view("a=="), '=') == Result("a", "="));
+ CHECK(split_once(std::string_view("a=b"), '=') == Result("a", "b"));
+ CHECK(split_once(std::string_view("a=b="), '=') == Result("a", "b="));
+ CHECK(split_once(std::string_view("a=b=c"), '=') == Result("a", "b=c"));
+ CHECK(split_once(std::string_view("x y"), ' ') == Result("x", "y"));
}
}
TEST_CASE("util::split_option_with_concat_path")
{
- using std::make_pair;
+ using Result = std::pair<std::string_view, std::optional<std::string_view>>;
using std::nullopt;
const auto split = util::split_option_with_concat_path;
- CHECK(split("-I/c/foo") == make_pair("-I", "/c/foo"));
- CHECK(split("-W,path/c/foo") == make_pair("-W,path", "/c/foo"));
- CHECK(split("-DMACRO") == make_pair("-DMACRO", nullopt));
+ CHECK(split("-I/c/foo") == Result("-I", "/c/foo"));
+ CHECK(split("-W,path/c/foo") == Result("-W,path", "/c/foo"));
+ CHECK(split("-DMACRO") == Result("-DMACRO", nullopt));
#ifdef _WIN32
- CHECK(split("-I/C:/foo") == make_pair("-I", "/C:/foo"));
- CHECK(split("-IC:/foo") == make_pair("-I", "C:/foo"));
- CHECK(split("-W,path/c:/foo") == make_pair("-W,path", "/c:/foo"));
- CHECK(split("-W,pathc:/foo") == make_pair("-W,path", "c:/foo"));
- CHECK(split("-opt:value") == make_pair("-opt:value", nullopt));
+ CHECK(split("-I/C:/foo") == Result("-I", "/C:/foo"));
+ CHECK(split("-IC:/foo") == Result("-I", "C:/foo"));
+ CHECK(split("-W,path/c:/foo") == Result("-W,path", "/c:/foo"));
+ CHECK(split("-W,pathc:/foo") == Result("-W,path", "c:/foo"));
+ CHECK(split("-opt:value") == Result("-opt:value", nullopt));
#endif
}