mirror of
https://github.com/boostorg/parser.git
synced 2026-02-23 16:02:08 +00:00
Add overloads of repeat() that take a parser param; the given parser is used
as a separator. Implements #231.
This commit is contained in:
288
test/parser.cpp
288
test/parser.cpp
@@ -1092,6 +1092,72 @@ int main()
|
||||
|
||||
// repeat
|
||||
{
|
||||
{
|
||||
constexpr auto parser = repeat(2)[string("zs")];
|
||||
|
||||
{
|
||||
std::string str = "";
|
||||
std::vector<std::string> chars;
|
||||
BOOST_TEST(!parse(str, parser, chars));
|
||||
BOOST_TEST(chars == std::vector<std::string>{});
|
||||
|
||||
{
|
||||
std::optional<std::vector<std::string>> const chars =
|
||||
parse(str, parser);
|
||||
BOOST_TEST(!chars);
|
||||
}
|
||||
}
|
||||
{
|
||||
std::string str = "z";
|
||||
std::vector<std::string> chars;
|
||||
BOOST_TEST(!parse(str, parser, chars));
|
||||
BOOST_TEST(chars == std::vector<std::string>{});
|
||||
|
||||
{
|
||||
std::optional<std::vector<std::string>> const chars =
|
||||
parse(str, parser);
|
||||
BOOST_TEST(!chars);
|
||||
}
|
||||
}
|
||||
{
|
||||
std::string str = "zs";
|
||||
std::vector<std::string> chars;
|
||||
BOOST_TEST(!parse(str, parser, chars));
|
||||
BOOST_TEST(chars == std::vector<std::string>{});
|
||||
|
||||
{
|
||||
std::optional<std::vector<std::string>> const chars =
|
||||
parse(str, parser);
|
||||
BOOST_TEST(!chars);
|
||||
}
|
||||
}
|
||||
{
|
||||
std::string str = "zszs";
|
||||
std::vector<std::string> chars;
|
||||
BOOST_TEST(parse(str, parser, chars));
|
||||
BOOST_TEST(chars == std::vector<std::string>({"zs", "zs"}));
|
||||
|
||||
{
|
||||
std::optional<std::vector<std::string>> const chars =
|
||||
parse(str, parser);
|
||||
BOOST_TEST(chars);
|
||||
BOOST_TEST(
|
||||
*chars == std::vector<std::string>({"zs", "zs"}));
|
||||
}
|
||||
}
|
||||
{
|
||||
std::string str = "zszszs";
|
||||
std::vector<std::string> chars;
|
||||
BOOST_TEST(!parse(str, parser, chars));
|
||||
BOOST_TEST(chars == std::vector<std::string>{});
|
||||
|
||||
{
|
||||
std::optional<std::vector<std::string>> const chars =
|
||||
parse(str, parser);
|
||||
BOOST_TEST(!chars);
|
||||
}
|
||||
}
|
||||
}
|
||||
{
|
||||
constexpr auto parser = repeat(2, 3)[string("zs")];
|
||||
|
||||
@@ -1145,6 +1211,228 @@ int main()
|
||||
*chars == std::vector<std::string>({"zs", "zs"}));
|
||||
}
|
||||
}
|
||||
{
|
||||
std::string str = "zszszs";
|
||||
std::vector<std::string> chars;
|
||||
BOOST_TEST(parse(str, parser, chars));
|
||||
BOOST_TEST(
|
||||
chars == std::vector<std::string>({"zs", "zs", "zs"}));
|
||||
|
||||
{
|
||||
std::optional<std::vector<std::string>> const chars =
|
||||
parse(str, parser);
|
||||
BOOST_TEST(chars);
|
||||
BOOST_TEST(
|
||||
*chars == std::vector<std::string>({"zs", "zs", "zs"}));
|
||||
}
|
||||
}
|
||||
{
|
||||
std::string str = "zszszszs";
|
||||
std::vector<std::string> chars;
|
||||
BOOST_TEST(!parse(str, parser, chars));
|
||||
BOOST_TEST(chars == std::vector<std::string>{});
|
||||
|
||||
{
|
||||
std::optional<std::vector<std::string>> const chars =
|
||||
parse(str, parser);
|
||||
BOOST_TEST(!chars);
|
||||
}
|
||||
}
|
||||
}
|
||||
{
|
||||
auto parser = repeat(2, char_(','))[string("zs")];
|
||||
|
||||
{
|
||||
std::string str = "";
|
||||
std::vector<std::string> chars;
|
||||
BOOST_TEST(!parse(str, parser, chars));
|
||||
BOOST_TEST(chars == std::vector<std::string>{});
|
||||
|
||||
{
|
||||
std::optional<std::vector<std::string>> const chars =
|
||||
parse(str, parser);
|
||||
BOOST_TEST(!chars);
|
||||
}
|
||||
}
|
||||
{
|
||||
std::string str = "z";
|
||||
std::vector<std::string> chars;
|
||||
BOOST_TEST(!parse(str, parser, chars));
|
||||
BOOST_TEST(chars == std::vector<std::string>{});
|
||||
|
||||
{
|
||||
std::optional<std::vector<std::string>> const chars =
|
||||
parse(str, parser);
|
||||
BOOST_TEST(!chars);
|
||||
}
|
||||
}
|
||||
{
|
||||
std::string str = "zs";
|
||||
std::vector<std::string> chars;
|
||||
BOOST_TEST(!parse(str, parser, chars));
|
||||
BOOST_TEST(chars == std::vector<std::string>{});
|
||||
|
||||
{
|
||||
std::optional<std::vector<std::string>> const chars =
|
||||
parse(str, parser);
|
||||
BOOST_TEST(!chars);
|
||||
}
|
||||
}
|
||||
{
|
||||
std::string str = "zszs";
|
||||
std::vector<std::string> chars;
|
||||
BOOST_TEST(!parse(str, parser, chars));
|
||||
BOOST_TEST(chars == std::vector<std::string>());
|
||||
|
||||
{
|
||||
std::optional<std::vector<std::string>> const chars =
|
||||
parse(str, parser);
|
||||
BOOST_TEST(!chars);
|
||||
}
|
||||
}
|
||||
{
|
||||
std::string str = "zs,zs";
|
||||
std::vector<std::string> chars;
|
||||
BOOST_TEST(parse(str, parser, chars));
|
||||
BOOST_TEST(chars == std::vector<std::string>({"zs", "zs"}));
|
||||
|
||||
{
|
||||
std::optional<std::vector<std::string>> const chars =
|
||||
parse(str, parser);
|
||||
BOOST_TEST(chars);
|
||||
BOOST_TEST(
|
||||
*chars == std::vector<std::string>({"zs", "zs"}));
|
||||
}
|
||||
}
|
||||
{
|
||||
std::string str = "zs,zs,";
|
||||
std::vector<std::string> chars;
|
||||
BOOST_TEST(!parse(str, parser, chars));
|
||||
BOOST_TEST(chars == std::vector<std::string>());
|
||||
|
||||
{
|
||||
std::optional<std::vector<std::string>> const chars =
|
||||
parse(str, parser);
|
||||
BOOST_TEST(!chars);
|
||||
}
|
||||
}
|
||||
{
|
||||
std::string str = "zs,zs,zs";
|
||||
std::vector<std::string> chars;
|
||||
BOOST_TEST(!parse(str, parser, chars));
|
||||
BOOST_TEST(chars == std::vector<std::string>());
|
||||
|
||||
{
|
||||
std::optional<std::vector<std::string>> const chars =
|
||||
parse(str, parser);
|
||||
BOOST_TEST(!chars);
|
||||
}
|
||||
}
|
||||
}
|
||||
{
|
||||
auto parser = repeat(2, 3, char_(','))[string("zs")];
|
||||
|
||||
{
|
||||
std::string str = "";
|
||||
std::vector<std::string> chars;
|
||||
BOOST_TEST(!parse(str, parser, chars));
|
||||
BOOST_TEST(chars == std::vector<std::string>{});
|
||||
|
||||
{
|
||||
std::optional<std::vector<std::string>> const chars =
|
||||
parse(str, parser);
|
||||
BOOST_TEST(!chars);
|
||||
}
|
||||
}
|
||||
{
|
||||
std::string str = "z";
|
||||
std::vector<std::string> chars;
|
||||
BOOST_TEST(!parse(str, parser, chars));
|
||||
BOOST_TEST(chars == std::vector<std::string>{});
|
||||
|
||||
{
|
||||
std::optional<std::vector<std::string>> const chars =
|
||||
parse(str, parser);
|
||||
BOOST_TEST(!chars);
|
||||
}
|
||||
}
|
||||
{
|
||||
std::string str = "zs";
|
||||
std::vector<std::string> chars;
|
||||
BOOST_TEST(!parse(str, parser, chars));
|
||||
BOOST_TEST(chars == std::vector<std::string>{});
|
||||
|
||||
{
|
||||
std::optional<std::vector<std::string>> const chars =
|
||||
parse(str, parser);
|
||||
BOOST_TEST(!chars);
|
||||
}
|
||||
}
|
||||
{
|
||||
std::string str = "zs,";
|
||||
std::vector<std::string> chars;
|
||||
BOOST_TEST(!parse(str, parser, chars));
|
||||
BOOST_TEST(chars == std::vector<std::string>{});
|
||||
|
||||
{
|
||||
std::optional<std::vector<std::string>> const chars =
|
||||
parse(str, parser);
|
||||
BOOST_TEST(!chars);
|
||||
}
|
||||
}
|
||||
{
|
||||
std::string str = "zs,zs,";
|
||||
std::vector<std::string> chars;
|
||||
BOOST_TEST(!parse(str, parser, chars));
|
||||
BOOST_TEST(chars == std::vector<std::string>{});
|
||||
|
||||
{
|
||||
std::optional<std::vector<std::string>> const chars =
|
||||
parse(str, parser);
|
||||
BOOST_TEST(!chars);
|
||||
}
|
||||
}
|
||||
{
|
||||
std::string str = "zs,zs";
|
||||
std::vector<std::string> chars;
|
||||
BOOST_TEST(parse(str, parser, chars));
|
||||
BOOST_TEST(chars == std::vector<std::string>({"zs", "zs"}));
|
||||
|
||||
{
|
||||
std::optional<std::vector<std::string>> const chars =
|
||||
parse(str, parser);
|
||||
BOOST_TEST(chars);
|
||||
BOOST_TEST(
|
||||
*chars == std::vector<std::string>({"zs", "zs"}));
|
||||
}
|
||||
}
|
||||
{
|
||||
std::string str = "zs,zs,zs";
|
||||
std::vector<std::string> chars;
|
||||
BOOST_TEST(parse(str, parser, chars));
|
||||
BOOST_TEST(
|
||||
chars == std::vector<std::string>({"zs", "zs", "zs"}));
|
||||
|
||||
{
|
||||
std::optional<std::vector<std::string>> const chars =
|
||||
parse(str, parser);
|
||||
BOOST_TEST(chars);
|
||||
BOOST_TEST(
|
||||
*chars == std::vector<std::string>({"zs", "zs", "zs"}));
|
||||
}
|
||||
}
|
||||
{
|
||||
std::string str = "zs,zs,zs,zs";
|
||||
std::vector<std::string> chars;
|
||||
BOOST_TEST(!parse(str, parser, chars));
|
||||
BOOST_TEST(chars == std::vector<std::string>{});
|
||||
|
||||
{
|
||||
std::optional<std::vector<std::string>> const chars =
|
||||
parse(str, parser);
|
||||
BOOST_TEST(!chars);
|
||||
}
|
||||
}
|
||||
}
|
||||
{
|
||||
constexpr auto parser = *char_ >> eps >> *string("str");
|
||||
|
||||
Reference in New Issue
Block a user