mirror of
https://github.com/boostorg/parser.git
synced 2026-01-21 17:12:16 +00:00
2306 lines
92 KiB
C++
2306 lines
92 KiB
C++
// WARNING! This file is generated.
|
|
// Copyright (C) 2018 T. Zachary Laine
|
|
//
|
|
// Distributed under 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)
|
|
#include <boost/parser/parser.hpp>
|
|
|
|
#include <boost/mpl/assert.hpp>
|
|
#include <boost/type_traits/is_same.hpp>
|
|
|
|
#include <gtest/gtest.h>
|
|
|
|
|
|
using namespace boost::parser;
|
|
using boost::is_same;
|
|
using std::optional;
|
|
using std::variant;
|
|
using boost::hana::tuple;
|
|
|
|
char const g_chars[] = "";
|
|
auto g_first = std::begin(g_chars);
|
|
auto const g_last = std::end(g_chars);
|
|
|
|
|
|
TEST(parser, generated_030_000)
|
|
{
|
|
{
|
|
constexpr auto parser = -(*char_ >> eps >> eps >> *char_) | -(-int_ >> *char_ >> -int_ >> *char_);
|
|
using attr_t = decltype(parse(g_first, g_last, parser));
|
|
BOOST_MPL_ASSERT((is_same<attr_t, optional<variant<optional<std::vector<char>>, optional<tuple<optional<int>, std::vector<char>, optional<int>, std::vector<char>>>>>>));
|
|
|
|
std::string const str = "cbcb";
|
|
auto first = str.begin();
|
|
auto const last = str.end();
|
|
attr_t const attr = parse(first, last, parser);
|
|
EXPECT_TRUE(attr);
|
|
|
|
constexpr auto fail_parser = parser >> repeat(Inf)[int_];
|
|
first = str.begin();
|
|
auto const fail_attr = parse(first, last, fail_parser);
|
|
EXPECT_FALSE(fail_attr);
|
|
{
|
|
decltype(parse(first, last, fail_parser)) attr;
|
|
auto const copy = attr;
|
|
EXPECT_FALSE(parse(first, last, fail_parser, attr));
|
|
EXPECT_EQ(attr, copy);
|
|
}
|
|
}
|
|
{
|
|
constexpr auto parser = (*char_ | eps | eps | *char_) >> (-int_ | *char_ | -int_ | *char_);
|
|
using attr_t = decltype(parse(g_first, g_last, parser));
|
|
BOOST_MPL_ASSERT((is_same<attr_t, optional<tuple<optional<std::vector<char>>, variant<optional<int>, std::vector<char>>>>>));
|
|
|
|
std::string const str = "cb3";
|
|
auto first = str.begin();
|
|
auto const last = str.end();
|
|
attr_t const attr = parse(first, last, parser);
|
|
EXPECT_TRUE(attr);
|
|
|
|
constexpr auto fail_parser = parser >> repeat(Inf)[int_];
|
|
first = str.begin();
|
|
auto const fail_attr = parse(first, last, fail_parser);
|
|
EXPECT_FALSE(fail_attr);
|
|
{
|
|
decltype(parse(first, last, fail_parser)) attr;
|
|
auto const copy = attr;
|
|
EXPECT_FALSE(parse(first, last, fail_parser, attr));
|
|
EXPECT_EQ(attr, copy);
|
|
}
|
|
}
|
|
{
|
|
constexpr auto parser = (*char_ >> eps >> eps >> *char_) | (-int_ >> *char_);
|
|
using attr_t = decltype(parse(g_first, g_last, parser));
|
|
BOOST_MPL_ASSERT((is_same<attr_t, optional<variant<std::vector<char>, tuple<optional<int>, std::vector<char>>>>>));
|
|
|
|
std::string const str = "cbcb";
|
|
auto first = str.begin();
|
|
auto const last = str.end();
|
|
attr_t const attr = parse(first, last, parser);
|
|
EXPECT_TRUE(attr);
|
|
|
|
constexpr auto fail_parser = parser >> repeat(Inf)[int_];
|
|
first = str.begin();
|
|
auto const fail_attr = parse(first, last, fail_parser);
|
|
EXPECT_FALSE(fail_attr);
|
|
{
|
|
decltype(parse(first, last, fail_parser)) attr;
|
|
auto const copy = attr;
|
|
EXPECT_FALSE(parse(first, last, fail_parser, attr));
|
|
EXPECT_EQ(attr, copy);
|
|
}
|
|
}
|
|
{
|
|
constexpr auto parser = -(*char_ | eps | eps | *char_) >> (-int_ | *char_);
|
|
using attr_t = decltype(parse(g_first, g_last, parser));
|
|
BOOST_MPL_ASSERT((is_same<attr_t, optional<tuple<optional<std::vector<char>>, variant<optional<int>, std::vector<char>>>>>));
|
|
|
|
std::string const str = "cb3";
|
|
auto first = str.begin();
|
|
auto const last = str.end();
|
|
attr_t const attr = parse(first, last, parser);
|
|
EXPECT_TRUE(attr);
|
|
|
|
constexpr auto fail_parser = parser >> repeat(Inf)[int_];
|
|
first = str.begin();
|
|
auto const fail_attr = parse(first, last, fail_parser);
|
|
EXPECT_FALSE(fail_attr);
|
|
{
|
|
decltype(parse(first, last, fail_parser)) attr;
|
|
auto const copy = attr;
|
|
EXPECT_FALSE(parse(first, last, fail_parser, attr));
|
|
EXPECT_EQ(attr, copy);
|
|
}
|
|
}
|
|
{
|
|
constexpr auto parser = (*char_ >> eps >> eps >> *char_) | -(-int_ >> *char_ >> -int_ >> eps);
|
|
using attr_t = decltype(parse(g_first, g_last, parser));
|
|
BOOST_MPL_ASSERT((is_same<attr_t, optional<variant<std::vector<char>, optional<tuple<optional<int>, std::vector<char>, optional<int>>>>>>));
|
|
|
|
std::string const str = "cbcb";
|
|
auto first = str.begin();
|
|
auto const last = str.end();
|
|
attr_t const attr = parse(first, last, parser);
|
|
EXPECT_TRUE(attr);
|
|
|
|
constexpr auto fail_parser = parser >> repeat(Inf)[int_];
|
|
first = str.begin();
|
|
auto const fail_attr = parse(first, last, fail_parser);
|
|
EXPECT_FALSE(fail_attr);
|
|
{
|
|
decltype(parse(first, last, fail_parser)) attr;
|
|
auto const copy = attr;
|
|
EXPECT_FALSE(parse(first, last, fail_parser, attr));
|
|
EXPECT_EQ(attr, copy);
|
|
}
|
|
}
|
|
}
|
|
|
|
TEST(parser, generated_030_001)
|
|
{
|
|
{
|
|
constexpr auto parser = (*char_ | eps | eps | *char_) >> (-int_ | *char_ | -int_ | eps);
|
|
using attr_t = decltype(parse(g_first, g_last, parser));
|
|
BOOST_MPL_ASSERT((is_same<attr_t, optional<tuple<optional<std::vector<char>>, optional<variant<optional<int>, std::vector<char>>>>>>));
|
|
|
|
std::string const str = "cb3";
|
|
auto first = str.begin();
|
|
auto const last = str.end();
|
|
attr_t const attr = parse(first, last, parser);
|
|
EXPECT_TRUE(attr);
|
|
|
|
constexpr auto fail_parser = parser >> repeat(Inf)[int_];
|
|
first = str.begin();
|
|
auto const fail_attr = parse(first, last, fail_parser);
|
|
EXPECT_FALSE(fail_attr);
|
|
{
|
|
decltype(parse(first, last, fail_parser)) attr;
|
|
auto const copy = attr;
|
|
EXPECT_FALSE(parse(first, last, fail_parser, attr));
|
|
EXPECT_EQ(attr, copy);
|
|
}
|
|
}
|
|
{
|
|
constexpr auto parser = -(*char_ >> eps >> eps >> *char_) | (-int_ >> *char_ >> *char_ >> *char_);
|
|
using attr_t = decltype(parse(g_first, g_last, parser));
|
|
BOOST_MPL_ASSERT((is_same<attr_t, optional<variant<optional<std::vector<char>>, tuple<optional<int>, std::vector<char>>>>>));
|
|
|
|
std::string const str = "cbcb";
|
|
auto first = str.begin();
|
|
auto const last = str.end();
|
|
attr_t const attr = parse(first, last, parser);
|
|
EXPECT_TRUE(attr);
|
|
|
|
constexpr auto fail_parser = parser >> repeat(Inf)[int_];
|
|
first = str.begin();
|
|
auto const fail_attr = parse(first, last, fail_parser);
|
|
EXPECT_FALSE(fail_attr);
|
|
{
|
|
decltype(parse(first, last, fail_parser)) attr;
|
|
auto const copy = attr;
|
|
EXPECT_FALSE(parse(first, last, fail_parser, attr));
|
|
EXPECT_EQ(attr, copy);
|
|
}
|
|
}
|
|
{
|
|
constexpr auto parser = (*char_ | eps | eps | *char_) >> (-int_ | *char_ | *char_ | *char_);
|
|
using attr_t = decltype(parse(g_first, g_last, parser));
|
|
BOOST_MPL_ASSERT((is_same<attr_t, optional<tuple<optional<std::vector<char>>, variant<optional<int>, std::vector<char>>>>>));
|
|
|
|
std::string const str = "cb3";
|
|
auto first = str.begin();
|
|
auto const last = str.end();
|
|
attr_t const attr = parse(first, last, parser);
|
|
EXPECT_TRUE(attr);
|
|
|
|
constexpr auto fail_parser = parser >> repeat(Inf)[int_];
|
|
first = str.begin();
|
|
auto const fail_attr = parse(first, last, fail_parser);
|
|
EXPECT_FALSE(fail_attr);
|
|
{
|
|
decltype(parse(first, last, fail_parser)) attr;
|
|
auto const copy = attr;
|
|
EXPECT_FALSE(parse(first, last, fail_parser, attr));
|
|
EXPECT_EQ(attr, copy);
|
|
}
|
|
}
|
|
{
|
|
constexpr auto parser = (*char_ >> eps >> eps >> *char_) | -(-int_ >> eps >> eps >> -int_);
|
|
using attr_t = decltype(parse(g_first, g_last, parser));
|
|
BOOST_MPL_ASSERT((is_same<attr_t, optional<variant<std::vector<char>, optional<std::vector<optional<int>>>>>>));
|
|
|
|
std::string const str = "cbcb";
|
|
auto first = str.begin();
|
|
auto const last = str.end();
|
|
attr_t const attr = parse(first, last, parser);
|
|
EXPECT_TRUE(attr);
|
|
|
|
constexpr auto fail_parser = parser >> repeat(Inf)[int_];
|
|
first = str.begin();
|
|
auto const fail_attr = parse(first, last, fail_parser);
|
|
EXPECT_FALSE(fail_attr);
|
|
{
|
|
decltype(parse(first, last, fail_parser)) attr;
|
|
auto const copy = attr;
|
|
EXPECT_FALSE(parse(first, last, fail_parser, attr));
|
|
EXPECT_EQ(attr, copy);
|
|
}
|
|
}
|
|
{
|
|
constexpr auto parser = -(*char_ | eps | eps | *char_) >> (-int_ | eps | eps | -int_);
|
|
using attr_t = decltype(parse(g_first, g_last, parser));
|
|
BOOST_MPL_ASSERT((is_same<attr_t, optional<tuple<optional<std::vector<char>>, optional<int>>>>));
|
|
|
|
std::string const str = "cb3";
|
|
auto first = str.begin();
|
|
auto const last = str.end();
|
|
attr_t const attr = parse(first, last, parser);
|
|
EXPECT_TRUE(attr);
|
|
|
|
constexpr auto fail_parser = parser >> repeat(Inf)[int_];
|
|
first = str.begin();
|
|
auto const fail_attr = parse(first, last, fail_parser);
|
|
EXPECT_FALSE(fail_attr);
|
|
{
|
|
decltype(parse(first, last, fail_parser)) attr;
|
|
auto const copy = attr;
|
|
EXPECT_FALSE(parse(first, last, fail_parser, attr));
|
|
EXPECT_EQ(attr, copy);
|
|
}
|
|
}
|
|
}
|
|
|
|
TEST(parser, generated_030_002)
|
|
{
|
|
{
|
|
constexpr auto parser = (*char_ >> eps >> eps >> *char_) | (-int_ >> *char_ >> eps >> *char_);
|
|
using attr_t = decltype(parse(g_first, g_last, parser));
|
|
BOOST_MPL_ASSERT((is_same<attr_t, optional<variant<std::vector<char>, tuple<optional<int>, std::vector<char>>>>>));
|
|
|
|
std::string const str = "cbcb";
|
|
auto first = str.begin();
|
|
auto const last = str.end();
|
|
attr_t const attr = parse(first, last, parser);
|
|
EXPECT_TRUE(attr);
|
|
|
|
constexpr auto fail_parser = parser >> repeat(Inf)[int_];
|
|
first = str.begin();
|
|
auto const fail_attr = parse(first, last, fail_parser);
|
|
EXPECT_FALSE(fail_attr);
|
|
{
|
|
decltype(parse(first, last, fail_parser)) attr;
|
|
auto const copy = attr;
|
|
EXPECT_FALSE(parse(first, last, fail_parser, attr));
|
|
EXPECT_EQ(attr, copy);
|
|
}
|
|
}
|
|
{
|
|
constexpr auto parser = (*char_ | eps | eps | *char_) >> (-int_ | *char_ | eps | *char_);
|
|
using attr_t = decltype(parse(g_first, g_last, parser));
|
|
BOOST_MPL_ASSERT((is_same<attr_t, optional<tuple<optional<std::vector<char>>, optional<variant<optional<int>, std::vector<char>>>>>>));
|
|
|
|
std::string const str = "cb3";
|
|
auto first = str.begin();
|
|
auto const last = str.end();
|
|
attr_t const attr = parse(first, last, parser);
|
|
EXPECT_TRUE(attr);
|
|
|
|
constexpr auto fail_parser = parser >> repeat(Inf)[int_];
|
|
first = str.begin();
|
|
auto const fail_attr = parse(first, last, fail_parser);
|
|
EXPECT_FALSE(fail_attr);
|
|
{
|
|
decltype(parse(first, last, fail_parser)) attr;
|
|
auto const copy = attr;
|
|
EXPECT_FALSE(parse(first, last, fail_parser, attr));
|
|
EXPECT_EQ(attr, copy);
|
|
}
|
|
}
|
|
{
|
|
constexpr auto parser = -(*char_ >> eps >> eps >> *char_) | -(-int_ >> eps >> *char_);
|
|
using attr_t = decltype(parse(g_first, g_last, parser));
|
|
BOOST_MPL_ASSERT((is_same<attr_t, optional<variant<optional<std::vector<char>>, optional<tuple<optional<int>, std::vector<char>>>>>>));
|
|
|
|
std::string const str = "cbcb";
|
|
auto first = str.begin();
|
|
auto const last = str.end();
|
|
attr_t const attr = parse(first, last, parser);
|
|
EXPECT_TRUE(attr);
|
|
|
|
constexpr auto fail_parser = parser >> repeat(Inf)[int_];
|
|
first = str.begin();
|
|
auto const fail_attr = parse(first, last, fail_parser);
|
|
EXPECT_FALSE(fail_attr);
|
|
{
|
|
decltype(parse(first, last, fail_parser)) attr;
|
|
auto const copy = attr;
|
|
EXPECT_FALSE(parse(first, last, fail_parser, attr));
|
|
EXPECT_EQ(attr, copy);
|
|
}
|
|
}
|
|
{
|
|
constexpr auto parser = (*char_ | eps | eps | *char_) >> (-int_ | eps | *char_);
|
|
using attr_t = decltype(parse(g_first, g_last, parser));
|
|
BOOST_MPL_ASSERT((is_same<attr_t, optional<tuple<optional<std::vector<char>>, optional<variant<optional<int>, std::vector<char>>>>>>));
|
|
|
|
std::string const str = "cb3";
|
|
auto first = str.begin();
|
|
auto const last = str.end();
|
|
attr_t const attr = parse(first, last, parser);
|
|
EXPECT_TRUE(attr);
|
|
|
|
constexpr auto fail_parser = parser >> repeat(Inf)[int_];
|
|
first = str.begin();
|
|
auto const fail_attr = parse(first, last, fail_parser);
|
|
EXPECT_FALSE(fail_attr);
|
|
{
|
|
decltype(parse(first, last, fail_parser)) attr;
|
|
auto const copy = attr;
|
|
EXPECT_FALSE(parse(first, last, fail_parser, attr));
|
|
EXPECT_EQ(attr, copy);
|
|
}
|
|
}
|
|
{
|
|
constexpr auto parser = (*char_ >> eps >> eps >> *char_) | (eps >> -int_ >> -int_ >> *char_);
|
|
using attr_t = decltype(parse(g_first, g_last, parser));
|
|
BOOST_MPL_ASSERT((is_same<attr_t, optional<variant<std::vector<char>, tuple<std::vector<optional<int>>, std::vector<char>>>>>));
|
|
|
|
std::string const str = "cbcb";
|
|
auto first = str.begin();
|
|
auto const last = str.end();
|
|
attr_t const attr = parse(first, last, parser);
|
|
EXPECT_TRUE(attr);
|
|
|
|
constexpr auto fail_parser = parser >> repeat(Inf)[int_];
|
|
first = str.begin();
|
|
auto const fail_attr = parse(first, last, fail_parser);
|
|
EXPECT_FALSE(fail_attr);
|
|
{
|
|
decltype(parse(first, last, fail_parser)) attr;
|
|
auto const copy = attr;
|
|
EXPECT_FALSE(parse(first, last, fail_parser, attr));
|
|
EXPECT_EQ(attr, copy);
|
|
}
|
|
}
|
|
}
|
|
|
|
TEST(parser, generated_030_003)
|
|
{
|
|
{
|
|
constexpr auto parser = -(*char_ | eps | eps | *char_) >> (eps | -int_ | -int_ | *char_);
|
|
using attr_t = decltype(parse(g_first, g_last, parser));
|
|
BOOST_MPL_ASSERT((is_same<attr_t, optional<tuple<optional<std::vector<char>>, optional<variant<optional<int>, std::vector<char>>>>>>));
|
|
|
|
std::string const str = "cb";
|
|
auto first = str.begin();
|
|
auto const last = str.end();
|
|
attr_t const attr = parse(first, last, parser);
|
|
EXPECT_TRUE(attr);
|
|
|
|
constexpr auto fail_parser = parser >> repeat(Inf)[int_];
|
|
first = str.begin();
|
|
auto const fail_attr = parse(first, last, fail_parser);
|
|
EXPECT_FALSE(fail_attr);
|
|
{
|
|
decltype(parse(first, last, fail_parser)) attr;
|
|
auto const copy = attr;
|
|
EXPECT_FALSE(parse(first, last, fail_parser, attr));
|
|
EXPECT_EQ(attr, copy);
|
|
}
|
|
}
|
|
{
|
|
constexpr auto parser = (*char_ >> eps >> eps >> *char_) | -(*char_ >> eps >> eps);
|
|
using attr_t = decltype(parse(g_first, g_last, parser));
|
|
BOOST_MPL_ASSERT((is_same<attr_t, optional<variant<std::vector<char>, optional<std::vector<char>>>>>));
|
|
|
|
std::string const str = "cbcb";
|
|
auto first = str.begin();
|
|
auto const last = str.end();
|
|
attr_t const attr = parse(first, last, parser);
|
|
EXPECT_TRUE(attr);
|
|
|
|
constexpr auto fail_parser = parser >> repeat(Inf)[int_];
|
|
first = str.begin();
|
|
auto const fail_attr = parse(first, last, fail_parser);
|
|
EXPECT_FALSE(fail_attr);
|
|
{
|
|
decltype(parse(first, last, fail_parser)) attr;
|
|
auto const copy = attr;
|
|
EXPECT_FALSE(parse(first, last, fail_parser, attr));
|
|
EXPECT_EQ(attr, copy);
|
|
}
|
|
}
|
|
{
|
|
constexpr auto parser = (*char_ | eps | eps | *char_) >> (*char_ | eps | eps);
|
|
using attr_t = decltype(parse(g_first, g_last, parser));
|
|
BOOST_MPL_ASSERT((is_same<attr_t, optional<std::vector<optional<std::vector<char>>>>>));
|
|
|
|
std::string const str = "cbcb";
|
|
auto first = str.begin();
|
|
auto const last = str.end();
|
|
attr_t const attr = parse(first, last, parser);
|
|
EXPECT_TRUE(attr);
|
|
|
|
constexpr auto fail_parser = parser >> repeat(Inf)[int_];
|
|
first = str.begin();
|
|
auto const fail_attr = parse(first, last, fail_parser);
|
|
EXPECT_FALSE(fail_attr);
|
|
{
|
|
decltype(parse(first, last, fail_parser)) attr;
|
|
auto const copy = attr;
|
|
EXPECT_FALSE(parse(first, last, fail_parser, attr));
|
|
EXPECT_EQ(attr, copy);
|
|
}
|
|
}
|
|
{
|
|
constexpr auto parser = -(*char_ >> eps >> eps >> *char_) | (*char_ >> -int_ >> *char_ >> -int_);
|
|
using attr_t = decltype(parse(g_first, g_last, parser));
|
|
BOOST_MPL_ASSERT((is_same<attr_t, optional<variant<optional<std::vector<char>>, tuple<std::vector<char>, optional<int>, std::vector<char>, optional<int>>>>>));
|
|
|
|
std::string const str = "cbcb";
|
|
auto first = str.begin();
|
|
auto const last = str.end();
|
|
attr_t const attr = parse(first, last, parser);
|
|
EXPECT_TRUE(attr);
|
|
|
|
constexpr auto fail_parser = parser >> repeat(Inf)[int_];
|
|
first = str.begin();
|
|
auto const fail_attr = parse(first, last, fail_parser);
|
|
EXPECT_FALSE(fail_attr);
|
|
{
|
|
decltype(parse(first, last, fail_parser)) attr;
|
|
auto const copy = attr;
|
|
EXPECT_FALSE(parse(first, last, fail_parser, attr));
|
|
EXPECT_EQ(attr, copy);
|
|
}
|
|
}
|
|
{
|
|
constexpr auto parser = (*char_ | eps | eps | *char_) >> (*char_ | -int_ | *char_ | -int_);
|
|
using attr_t = decltype(parse(g_first, g_last, parser));
|
|
BOOST_MPL_ASSERT((is_same<attr_t, optional<tuple<optional<std::vector<char>>, variant<std::vector<char>, optional<int>>>>>));
|
|
|
|
std::string const str = "cbcb";
|
|
auto first = str.begin();
|
|
auto const last = str.end();
|
|
attr_t const attr = parse(first, last, parser);
|
|
EXPECT_TRUE(attr);
|
|
|
|
constexpr auto fail_parser = parser >> repeat(Inf)[int_];
|
|
first = str.begin();
|
|
auto const fail_attr = parse(first, last, fail_parser);
|
|
EXPECT_FALSE(fail_attr);
|
|
{
|
|
decltype(parse(first, last, fail_parser)) attr;
|
|
auto const copy = attr;
|
|
EXPECT_FALSE(parse(first, last, fail_parser, attr));
|
|
EXPECT_EQ(attr, copy);
|
|
}
|
|
}
|
|
}
|
|
|
|
TEST(parser, generated_030_004)
|
|
{
|
|
{
|
|
constexpr auto parser = (*char_ >> eps >> eps >> *char_) | -(-int_ >> *char_ >> -int_ >> -int_);
|
|
using attr_t = decltype(parse(g_first, g_last, parser));
|
|
BOOST_MPL_ASSERT((is_same<attr_t, optional<variant<std::vector<char>, optional<tuple<optional<int>, std::vector<char>, std::vector<optional<int>>>>>>>));
|
|
|
|
std::string const str = "cbcb";
|
|
auto first = str.begin();
|
|
auto const last = str.end();
|
|
attr_t const attr = parse(first, last, parser);
|
|
EXPECT_TRUE(attr);
|
|
|
|
constexpr auto fail_parser = parser >> repeat(Inf)[int_];
|
|
first = str.begin();
|
|
auto const fail_attr = parse(first, last, fail_parser);
|
|
EXPECT_FALSE(fail_attr);
|
|
{
|
|
decltype(parse(first, last, fail_parser)) attr;
|
|
auto const copy = attr;
|
|
EXPECT_FALSE(parse(first, last, fail_parser, attr));
|
|
EXPECT_EQ(attr, copy);
|
|
}
|
|
}
|
|
{
|
|
constexpr auto parser = -(*char_ | eps | eps | *char_) >> (-int_ | *char_ | -int_ | -int_);
|
|
using attr_t = decltype(parse(g_first, g_last, parser));
|
|
BOOST_MPL_ASSERT((is_same<attr_t, optional<tuple<optional<std::vector<char>>, variant<optional<int>, std::vector<char>>>>>));
|
|
|
|
std::string const str = "cb3";
|
|
auto first = str.begin();
|
|
auto const last = str.end();
|
|
attr_t const attr = parse(first, last, parser);
|
|
EXPECT_TRUE(attr);
|
|
|
|
constexpr auto fail_parser = parser >> repeat(Inf)[int_];
|
|
first = str.begin();
|
|
auto const fail_attr = parse(first, last, fail_parser);
|
|
EXPECT_FALSE(fail_attr);
|
|
{
|
|
decltype(parse(first, last, fail_parser)) attr;
|
|
auto const copy = attr;
|
|
EXPECT_FALSE(parse(first, last, fail_parser, attr));
|
|
EXPECT_EQ(attr, copy);
|
|
}
|
|
}
|
|
{
|
|
constexpr auto parser = (*char_ >> eps >> eps >> *char_) | (eps >> -int_ >> -int_ >> eps);
|
|
using attr_t = decltype(parse(g_first, g_last, parser));
|
|
BOOST_MPL_ASSERT((is_same<attr_t, optional<variant<std::vector<char>, std::vector<optional<int>>>>>));
|
|
|
|
std::string const str = "cbcb";
|
|
auto first = str.begin();
|
|
auto const last = str.end();
|
|
attr_t const attr = parse(first, last, parser);
|
|
EXPECT_TRUE(attr);
|
|
|
|
constexpr auto fail_parser = parser >> repeat(Inf)[int_];
|
|
first = str.begin();
|
|
auto const fail_attr = parse(first, last, fail_parser);
|
|
EXPECT_FALSE(fail_attr);
|
|
{
|
|
decltype(parse(first, last, fail_parser)) attr;
|
|
auto const copy = attr;
|
|
EXPECT_FALSE(parse(first, last, fail_parser, attr));
|
|
EXPECT_EQ(attr, copy);
|
|
}
|
|
}
|
|
{
|
|
constexpr auto parser = (*char_ | eps | eps | *char_) >> (eps | -int_ | -int_ | eps);
|
|
using attr_t = decltype(parse(g_first, g_last, parser));
|
|
BOOST_MPL_ASSERT((is_same<attr_t, optional<tuple<optional<std::vector<char>>, optional<int>>>>));
|
|
|
|
std::string const str = "cb";
|
|
auto first = str.begin();
|
|
auto const last = str.end();
|
|
attr_t const attr = parse(first, last, parser);
|
|
EXPECT_TRUE(attr);
|
|
|
|
constexpr auto fail_parser = parser >> repeat(Inf)[int_];
|
|
first = str.begin();
|
|
auto const fail_attr = parse(first, last, fail_parser);
|
|
EXPECT_FALSE(fail_attr);
|
|
{
|
|
decltype(parse(first, last, fail_parser)) attr;
|
|
auto const copy = attr;
|
|
EXPECT_FALSE(parse(first, last, fail_parser, attr));
|
|
EXPECT_EQ(attr, copy);
|
|
}
|
|
}
|
|
{
|
|
constexpr auto parser = -(eps >> *char_ >> -int_ >> *char_) | -(eps >> *char_ >> *char_ >> -int_);
|
|
using attr_t = decltype(parse(g_first, g_last, parser));
|
|
BOOST_MPL_ASSERT((is_same<attr_t, optional<variant<optional<tuple<std::vector<char>, optional<int>, std::vector<char>>>, optional<tuple<std::vector<char>, optional<int>>>>>>));
|
|
|
|
std::string const str = "cb3cb";
|
|
auto first = str.begin();
|
|
auto const last = str.end();
|
|
attr_t const attr = parse(first, last, parser);
|
|
EXPECT_TRUE(attr);
|
|
|
|
constexpr auto fail_parser = parser >> repeat(Inf)[int_];
|
|
first = str.begin();
|
|
auto const fail_attr = parse(first, last, fail_parser);
|
|
EXPECT_FALSE(fail_attr);
|
|
{
|
|
decltype(parse(first, last, fail_parser)) attr;
|
|
auto const copy = attr;
|
|
EXPECT_FALSE(parse(first, last, fail_parser, attr));
|
|
EXPECT_EQ(attr, copy);
|
|
}
|
|
}
|
|
}
|
|
|
|
TEST(parser, generated_030_005)
|
|
{
|
|
{
|
|
constexpr auto parser = (eps | *char_ | -int_ | *char_) >> (eps | *char_ | *char_ | -int_);
|
|
using attr_t = decltype(parse(g_first, g_last, parser));
|
|
BOOST_MPL_ASSERT((is_same<attr_t, optional<std::vector<optional<variant<std::vector<char>, optional<int>>>>>>));
|
|
|
|
std::string const str = "";
|
|
auto first = str.begin();
|
|
auto const last = str.end();
|
|
attr_t const attr = parse(first, last, parser);
|
|
EXPECT_TRUE(attr);
|
|
|
|
constexpr auto fail_parser = parser >> repeat(Inf)[int_];
|
|
first = str.begin();
|
|
auto const fail_attr = parse(first, last, fail_parser);
|
|
EXPECT_FALSE(fail_attr);
|
|
{
|
|
decltype(parse(first, last, fail_parser)) attr;
|
|
auto const copy = attr;
|
|
EXPECT_FALSE(parse(first, last, fail_parser, attr));
|
|
EXPECT_EQ(attr, copy);
|
|
}
|
|
}
|
|
{
|
|
constexpr auto parser = (eps >> *char_ >> -int_ >> *char_) | (eps >> eps);
|
|
using attr_t = decltype(parse(g_first, g_last, parser));
|
|
BOOST_MPL_ASSERT((is_same<attr_t, optional<optional<tuple<std::vector<char>, optional<int>, std::vector<char>>>>>));
|
|
|
|
std::string const str = "cb3cb";
|
|
auto first = str.begin();
|
|
auto const last = str.end();
|
|
attr_t const attr = parse(first, last, parser);
|
|
EXPECT_TRUE(attr);
|
|
|
|
constexpr auto fail_parser = parser >> repeat(Inf)[int_];
|
|
first = str.begin();
|
|
auto const fail_attr = parse(first, last, fail_parser);
|
|
EXPECT_FALSE(fail_attr);
|
|
{
|
|
decltype(parse(first, last, fail_parser)) attr;
|
|
auto const copy = attr;
|
|
EXPECT_FALSE(parse(first, last, fail_parser, attr));
|
|
EXPECT_EQ(attr, copy);
|
|
}
|
|
}
|
|
{
|
|
constexpr auto parser = -(eps | *char_ | -int_ | *char_) >> (eps | eps);
|
|
using attr_t = decltype(parse(g_first, g_last, parser));
|
|
BOOST_MPL_ASSERT((is_same<attr_t, optional<optional<variant<std::vector<char>, optional<int>>>>>));
|
|
|
|
std::string const str = "";
|
|
auto first = str.begin();
|
|
auto const last = str.end();
|
|
attr_t const attr = parse(first, last, parser);
|
|
EXPECT_TRUE(attr);
|
|
|
|
constexpr auto fail_parser = parser >> repeat(Inf)[int_];
|
|
first = str.begin();
|
|
auto const fail_attr = parse(first, last, fail_parser);
|
|
EXPECT_FALSE(fail_attr);
|
|
{
|
|
decltype(parse(first, last, fail_parser)) attr;
|
|
auto const copy = attr;
|
|
EXPECT_FALSE(parse(first, last, fail_parser, attr));
|
|
EXPECT_EQ(attr, copy);
|
|
}
|
|
}
|
|
{
|
|
constexpr auto parser = (eps >> *char_ >> -int_ >> *char_) | -(*char_ >> *char_ >> -int_ >> eps);
|
|
using attr_t = decltype(parse(g_first, g_last, parser));
|
|
BOOST_MPL_ASSERT((is_same<attr_t, optional<variant<tuple<std::vector<char>, optional<int>, std::vector<char>>, optional<tuple<std::vector<char>, optional<int>>>>>>));
|
|
|
|
std::string const str = "cb3cb";
|
|
auto first = str.begin();
|
|
auto const last = str.end();
|
|
attr_t const attr = parse(first, last, parser);
|
|
EXPECT_TRUE(attr);
|
|
|
|
constexpr auto fail_parser = parser >> repeat(Inf)[int_];
|
|
first = str.begin();
|
|
auto const fail_attr = parse(first, last, fail_parser);
|
|
EXPECT_FALSE(fail_attr);
|
|
{
|
|
decltype(parse(first, last, fail_parser)) attr;
|
|
auto const copy = attr;
|
|
EXPECT_FALSE(parse(first, last, fail_parser, attr));
|
|
EXPECT_EQ(attr, copy);
|
|
}
|
|
}
|
|
{
|
|
constexpr auto parser = (eps | *char_ | -int_ | *char_) >> (*char_ | *char_ | -int_ | eps);
|
|
using attr_t = decltype(parse(g_first, g_last, parser));
|
|
BOOST_MPL_ASSERT((is_same<attr_t, optional<std::vector<optional<variant<std::vector<char>, optional<int>>>>>>));
|
|
|
|
std::string const str = "cb";
|
|
auto first = str.begin();
|
|
auto const last = str.end();
|
|
attr_t const attr = parse(first, last, parser);
|
|
EXPECT_TRUE(attr);
|
|
|
|
constexpr auto fail_parser = parser >> repeat(Inf)[int_];
|
|
first = str.begin();
|
|
auto const fail_attr = parse(first, last, fail_parser);
|
|
EXPECT_FALSE(fail_attr);
|
|
{
|
|
decltype(parse(first, last, fail_parser)) attr;
|
|
auto const copy = attr;
|
|
EXPECT_FALSE(parse(first, last, fail_parser, attr));
|
|
EXPECT_EQ(attr, copy);
|
|
}
|
|
}
|
|
}
|
|
|
|
TEST(parser, generated_030_006)
|
|
{
|
|
{
|
|
constexpr auto parser = -(eps >> *char_ >> -int_ >> *char_) | (*char_ >> -int_ >> eps >> *char_);
|
|
using attr_t = decltype(parse(g_first, g_last, parser));
|
|
BOOST_MPL_ASSERT((is_same<attr_t, optional<variant<optional<tuple<std::vector<char>, optional<int>, std::vector<char>>>, tuple<std::vector<char>, optional<int>, std::vector<char>>>>>));
|
|
|
|
std::string const str = "cb3cb";
|
|
auto first = str.begin();
|
|
auto const last = str.end();
|
|
attr_t const attr = parse(first, last, parser);
|
|
EXPECT_TRUE(attr);
|
|
|
|
constexpr auto fail_parser = parser >> repeat(Inf)[int_];
|
|
first = str.begin();
|
|
auto const fail_attr = parse(first, last, fail_parser);
|
|
EXPECT_FALSE(fail_attr);
|
|
{
|
|
decltype(parse(first, last, fail_parser)) attr;
|
|
auto const copy = attr;
|
|
EXPECT_FALSE(parse(first, last, fail_parser, attr));
|
|
EXPECT_EQ(attr, copy);
|
|
}
|
|
}
|
|
{
|
|
constexpr auto parser = (eps | *char_ | -int_ | *char_) >> (*char_ | -int_ | eps | *char_);
|
|
using attr_t = decltype(parse(g_first, g_last, parser));
|
|
BOOST_MPL_ASSERT((is_same<attr_t, optional<std::vector<optional<variant<std::vector<char>, optional<int>>>>>>));
|
|
|
|
std::string const str = "cb";
|
|
auto first = str.begin();
|
|
auto const last = str.end();
|
|
attr_t const attr = parse(first, last, parser);
|
|
EXPECT_TRUE(attr);
|
|
|
|
constexpr auto fail_parser = parser >> repeat(Inf)[int_];
|
|
first = str.begin();
|
|
auto const fail_attr = parse(first, last, fail_parser);
|
|
EXPECT_FALSE(fail_attr);
|
|
{
|
|
decltype(parse(first, last, fail_parser)) attr;
|
|
auto const copy = attr;
|
|
EXPECT_FALSE(parse(first, last, fail_parser, attr));
|
|
EXPECT_EQ(attr, copy);
|
|
}
|
|
}
|
|
{
|
|
constexpr auto parser = (eps >> *char_ >> -int_ >> *char_) | -(-int_ >> eps >> eps);
|
|
using attr_t = decltype(parse(g_first, g_last, parser));
|
|
BOOST_MPL_ASSERT((is_same<attr_t, optional<variant<tuple<std::vector<char>, optional<int>, std::vector<char>>, optional<int>>>>));
|
|
|
|
std::string const str = "cb3cb";
|
|
auto first = str.begin();
|
|
auto const last = str.end();
|
|
attr_t const attr = parse(first, last, parser);
|
|
EXPECT_TRUE(attr);
|
|
|
|
constexpr auto fail_parser = parser >> repeat(Inf)[int_];
|
|
first = str.begin();
|
|
auto const fail_attr = parse(first, last, fail_parser);
|
|
EXPECT_FALSE(fail_attr);
|
|
{
|
|
decltype(parse(first, last, fail_parser)) attr;
|
|
auto const copy = attr;
|
|
EXPECT_FALSE(parse(first, last, fail_parser, attr));
|
|
EXPECT_EQ(attr, copy);
|
|
}
|
|
}
|
|
{
|
|
constexpr auto parser = -(eps | *char_ | -int_ | *char_) >> (-int_ | eps | eps);
|
|
using attr_t = decltype(parse(g_first, g_last, parser));
|
|
BOOST_MPL_ASSERT((is_same<attr_t, optional<tuple<optional<variant<std::vector<char>, optional<int>>>, optional<int>>>>));
|
|
|
|
std::string const str = "3";
|
|
auto first = str.begin();
|
|
auto const last = str.end();
|
|
attr_t const attr = parse(first, last, parser);
|
|
EXPECT_TRUE(attr);
|
|
|
|
constexpr auto fail_parser = parser >> repeat(Inf)[int_];
|
|
first = str.begin();
|
|
auto const fail_attr = parse(first, last, fail_parser);
|
|
EXPECT_FALSE(fail_attr);
|
|
{
|
|
decltype(parse(first, last, fail_parser)) attr;
|
|
auto const copy = attr;
|
|
EXPECT_FALSE(parse(first, last, fail_parser, attr));
|
|
EXPECT_EQ(attr, copy);
|
|
}
|
|
}
|
|
{
|
|
constexpr auto parser = (eps >> *char_ >> -int_ >> *char_) | (-int_ >> eps >> eps >> *char_);
|
|
using attr_t = decltype(parse(g_first, g_last, parser));
|
|
BOOST_MPL_ASSERT((is_same<attr_t, optional<variant<tuple<std::vector<char>, optional<int>, std::vector<char>>, tuple<optional<int>, std::vector<char>>>>>));
|
|
|
|
std::string const str = "cb3cb";
|
|
auto first = str.begin();
|
|
auto const last = str.end();
|
|
attr_t const attr = parse(first, last, parser);
|
|
EXPECT_TRUE(attr);
|
|
|
|
constexpr auto fail_parser = parser >> repeat(Inf)[int_];
|
|
first = str.begin();
|
|
auto const fail_attr = parse(first, last, fail_parser);
|
|
EXPECT_FALSE(fail_attr);
|
|
{
|
|
decltype(parse(first, last, fail_parser)) attr;
|
|
auto const copy = attr;
|
|
EXPECT_FALSE(parse(first, last, fail_parser, attr));
|
|
EXPECT_EQ(attr, copy);
|
|
}
|
|
}
|
|
}
|
|
|
|
TEST(parser, generated_030_007)
|
|
{
|
|
{
|
|
constexpr auto parser = (eps | *char_ | -int_ | *char_) >> (-int_ | eps | eps | *char_);
|
|
using attr_t = decltype(parse(g_first, g_last, parser));
|
|
BOOST_MPL_ASSERT((is_same<attr_t, optional<tuple<optional<variant<std::vector<char>, optional<int>>>, optional<variant<optional<int>, std::vector<char>>>>>>));
|
|
|
|
std::string const str = "3";
|
|
auto first = str.begin();
|
|
auto const last = str.end();
|
|
attr_t const attr = parse(first, last, parser);
|
|
EXPECT_TRUE(attr);
|
|
|
|
constexpr auto fail_parser = parser >> repeat(Inf)[int_];
|
|
first = str.begin();
|
|
auto const fail_attr = parse(first, last, fail_parser);
|
|
EXPECT_FALSE(fail_attr);
|
|
{
|
|
decltype(parse(first, last, fail_parser)) attr;
|
|
auto const copy = attr;
|
|
EXPECT_FALSE(parse(first, last, fail_parser, attr));
|
|
EXPECT_EQ(attr, copy);
|
|
}
|
|
}
|
|
{
|
|
constexpr auto parser = -(eps >> *char_ >> -int_ >> *char_) | -(-int_ >> -int_ >> eps >> eps);
|
|
using attr_t = decltype(parse(g_first, g_last, parser));
|
|
BOOST_MPL_ASSERT((is_same<attr_t, optional<variant<optional<tuple<std::vector<char>, optional<int>, std::vector<char>>>, optional<std::vector<optional<int>>>>>>));
|
|
|
|
std::string const str = "cb3cb";
|
|
auto first = str.begin();
|
|
auto const last = str.end();
|
|
attr_t const attr = parse(first, last, parser);
|
|
EXPECT_TRUE(attr);
|
|
|
|
constexpr auto fail_parser = parser >> repeat(Inf)[int_];
|
|
first = str.begin();
|
|
auto const fail_attr = parse(first, last, fail_parser);
|
|
EXPECT_FALSE(fail_attr);
|
|
{
|
|
decltype(parse(first, last, fail_parser)) attr;
|
|
auto const copy = attr;
|
|
EXPECT_FALSE(parse(first, last, fail_parser, attr));
|
|
EXPECT_EQ(attr, copy);
|
|
}
|
|
}
|
|
{
|
|
constexpr auto parser = (eps | *char_ | -int_ | *char_) >> (-int_ | -int_ | eps | eps);
|
|
using attr_t = decltype(parse(g_first, g_last, parser));
|
|
BOOST_MPL_ASSERT((is_same<attr_t, optional<tuple<optional<variant<std::vector<char>, optional<int>>>, optional<int>>>>));
|
|
|
|
std::string const str = "3";
|
|
auto first = str.begin();
|
|
auto const last = str.end();
|
|
attr_t const attr = parse(first, last, parser);
|
|
EXPECT_TRUE(attr);
|
|
|
|
constexpr auto fail_parser = parser >> repeat(Inf)[int_];
|
|
first = str.begin();
|
|
auto const fail_attr = parse(first, last, fail_parser);
|
|
EXPECT_FALSE(fail_attr);
|
|
{
|
|
decltype(parse(first, last, fail_parser)) attr;
|
|
auto const copy = attr;
|
|
EXPECT_FALSE(parse(first, last, fail_parser, attr));
|
|
EXPECT_EQ(attr, copy);
|
|
}
|
|
}
|
|
{
|
|
constexpr auto parser = (eps >> *char_ >> -int_ >> *char_) | (-int_ >> eps >> *char_ >> *char_);
|
|
using attr_t = decltype(parse(g_first, g_last, parser));
|
|
BOOST_MPL_ASSERT((is_same<attr_t, optional<variant<tuple<std::vector<char>, optional<int>, std::vector<char>>, tuple<optional<int>, std::vector<char>>>>>));
|
|
|
|
std::string const str = "cb3cb";
|
|
auto first = str.begin();
|
|
auto const last = str.end();
|
|
attr_t const attr = parse(first, last, parser);
|
|
EXPECT_TRUE(attr);
|
|
|
|
constexpr auto fail_parser = parser >> repeat(Inf)[int_];
|
|
first = str.begin();
|
|
auto const fail_attr = parse(first, last, fail_parser);
|
|
EXPECT_FALSE(fail_attr);
|
|
{
|
|
decltype(parse(first, last, fail_parser)) attr;
|
|
auto const copy = attr;
|
|
EXPECT_FALSE(parse(first, last, fail_parser, attr));
|
|
EXPECT_EQ(attr, copy);
|
|
}
|
|
}
|
|
{
|
|
constexpr auto parser = -(eps | *char_ | -int_ | *char_) >> (-int_ | eps | *char_ | *char_);
|
|
using attr_t = decltype(parse(g_first, g_last, parser));
|
|
BOOST_MPL_ASSERT((is_same<attr_t, optional<tuple<optional<variant<std::vector<char>, optional<int>>>, optional<variant<optional<int>, std::vector<char>>>>>>));
|
|
|
|
std::string const str = "3";
|
|
auto first = str.begin();
|
|
auto const last = str.end();
|
|
attr_t const attr = parse(first, last, parser);
|
|
EXPECT_TRUE(attr);
|
|
|
|
constexpr auto fail_parser = parser >> repeat(Inf)[int_];
|
|
first = str.begin();
|
|
auto const fail_attr = parse(first, last, fail_parser);
|
|
EXPECT_FALSE(fail_attr);
|
|
{
|
|
decltype(parse(first, last, fail_parser)) attr;
|
|
auto const copy = attr;
|
|
EXPECT_FALSE(parse(first, last, fail_parser, attr));
|
|
EXPECT_EQ(attr, copy);
|
|
}
|
|
}
|
|
}
|
|
|
|
TEST(parser, generated_030_008)
|
|
{
|
|
{
|
|
constexpr auto parser = (eps >> *char_ >> -int_ >> *char_) | -(-int_ >> -int_ >> eps >> *char_);
|
|
using attr_t = decltype(parse(g_first, g_last, parser));
|
|
BOOST_MPL_ASSERT((is_same<attr_t, optional<variant<tuple<std::vector<char>, optional<int>, std::vector<char>>, optional<tuple<std::vector<optional<int>>, std::vector<char>>>>>>));
|
|
|
|
std::string const str = "cb3cb";
|
|
auto first = str.begin();
|
|
auto const last = str.end();
|
|
attr_t const attr = parse(first, last, parser);
|
|
EXPECT_TRUE(attr);
|
|
|
|
constexpr auto fail_parser = parser >> repeat(Inf)[int_];
|
|
first = str.begin();
|
|
auto const fail_attr = parse(first, last, fail_parser);
|
|
EXPECT_FALSE(fail_attr);
|
|
{
|
|
decltype(parse(first, last, fail_parser)) attr;
|
|
auto const copy = attr;
|
|
EXPECT_FALSE(parse(first, last, fail_parser, attr));
|
|
EXPECT_EQ(attr, copy);
|
|
}
|
|
}
|
|
{
|
|
constexpr auto parser = (eps | *char_ | -int_ | *char_) >> (-int_ | -int_ | eps | *char_);
|
|
using attr_t = decltype(parse(g_first, g_last, parser));
|
|
BOOST_MPL_ASSERT((is_same<attr_t, optional<tuple<optional<variant<std::vector<char>, optional<int>>>, optional<variant<optional<int>, std::vector<char>>>>>>));
|
|
|
|
std::string const str = "3";
|
|
auto first = str.begin();
|
|
auto const last = str.end();
|
|
attr_t const attr = parse(first, last, parser);
|
|
EXPECT_TRUE(attr);
|
|
|
|
constexpr auto fail_parser = parser >> repeat(Inf)[int_];
|
|
first = str.begin();
|
|
auto const fail_attr = parse(first, last, fail_parser);
|
|
EXPECT_FALSE(fail_attr);
|
|
{
|
|
decltype(parse(first, last, fail_parser)) attr;
|
|
auto const copy = attr;
|
|
EXPECT_FALSE(parse(first, last, fail_parser, attr));
|
|
EXPECT_EQ(attr, copy);
|
|
}
|
|
}
|
|
{
|
|
constexpr auto parser = -(eps >> *char_ >> -int_ >> *char_) | (eps >> -int_ >> eps >> -int_);
|
|
using attr_t = decltype(parse(g_first, g_last, parser));
|
|
BOOST_MPL_ASSERT((is_same<attr_t, optional<variant<optional<tuple<std::vector<char>, optional<int>, std::vector<char>>>, std::vector<optional<int>>>>>));
|
|
|
|
std::string const str = "cb3cb";
|
|
auto first = str.begin();
|
|
auto const last = str.end();
|
|
attr_t const attr = parse(first, last, parser);
|
|
EXPECT_TRUE(attr);
|
|
|
|
constexpr auto fail_parser = parser >> repeat(Inf)[int_];
|
|
first = str.begin();
|
|
auto const fail_attr = parse(first, last, fail_parser);
|
|
EXPECT_FALSE(fail_attr);
|
|
{
|
|
decltype(parse(first, last, fail_parser)) attr;
|
|
auto const copy = attr;
|
|
EXPECT_FALSE(parse(first, last, fail_parser, attr));
|
|
EXPECT_EQ(attr, copy);
|
|
}
|
|
}
|
|
{
|
|
constexpr auto parser = (eps | *char_ | -int_ | *char_) >> (eps | -int_ | eps | -int_);
|
|
using attr_t = decltype(parse(g_first, g_last, parser));
|
|
BOOST_MPL_ASSERT((is_same<attr_t, optional<tuple<optional<variant<std::vector<char>, optional<int>>>, optional<int>>>>));
|
|
|
|
std::string const str = "";
|
|
auto first = str.begin();
|
|
auto const last = str.end();
|
|
attr_t const attr = parse(first, last, parser);
|
|
EXPECT_TRUE(attr);
|
|
|
|
constexpr auto fail_parser = parser >> repeat(Inf)[int_];
|
|
first = str.begin();
|
|
auto const fail_attr = parse(first, last, fail_parser);
|
|
EXPECT_FALSE(fail_attr);
|
|
{
|
|
decltype(parse(first, last, fail_parser)) attr;
|
|
auto const copy = attr;
|
|
EXPECT_FALSE(parse(first, last, fail_parser, attr));
|
|
EXPECT_EQ(attr, copy);
|
|
}
|
|
}
|
|
{
|
|
constexpr auto parser = (eps >> *char_ >> -int_ >> *char_) | -(*char_ >> eps >> -int_ >> eps);
|
|
using attr_t = decltype(parse(g_first, g_last, parser));
|
|
BOOST_MPL_ASSERT((is_same<attr_t, optional<variant<tuple<std::vector<char>, optional<int>, std::vector<char>>, optional<tuple<std::vector<char>, optional<int>>>>>>));
|
|
|
|
std::string const str = "cb3cb";
|
|
auto first = str.begin();
|
|
auto const last = str.end();
|
|
attr_t const attr = parse(first, last, parser);
|
|
EXPECT_TRUE(attr);
|
|
|
|
constexpr auto fail_parser = parser >> repeat(Inf)[int_];
|
|
first = str.begin();
|
|
auto const fail_attr = parse(first, last, fail_parser);
|
|
EXPECT_FALSE(fail_attr);
|
|
{
|
|
decltype(parse(first, last, fail_parser)) attr;
|
|
auto const copy = attr;
|
|
EXPECT_FALSE(parse(first, last, fail_parser, attr));
|
|
EXPECT_EQ(attr, copy);
|
|
}
|
|
}
|
|
}
|
|
|
|
TEST(parser, generated_030_009)
|
|
{
|
|
{
|
|
constexpr auto parser = -(eps | *char_ | -int_ | *char_) >> (*char_ | eps | -int_ | eps);
|
|
using attr_t = decltype(parse(g_first, g_last, parser));
|
|
BOOST_MPL_ASSERT((is_same<attr_t, optional<std::vector<optional<variant<std::vector<char>, optional<int>>>>>>));
|
|
|
|
std::string const str = "cb";
|
|
auto first = str.begin();
|
|
auto const last = str.end();
|
|
attr_t const attr = parse(first, last, parser);
|
|
EXPECT_TRUE(attr);
|
|
|
|
constexpr auto fail_parser = parser >> repeat(Inf)[int_];
|
|
first = str.begin();
|
|
auto const fail_attr = parse(first, last, fail_parser);
|
|
EXPECT_FALSE(fail_attr);
|
|
{
|
|
decltype(parse(first, last, fail_parser)) attr;
|
|
auto const copy = attr;
|
|
EXPECT_FALSE(parse(first, last, fail_parser, attr));
|
|
EXPECT_EQ(attr, copy);
|
|
}
|
|
}
|
|
{
|
|
constexpr auto parser = (eps >> *char_ >> -int_ >> *char_) | (*char_ >> eps >> eps >> eps);
|
|
using attr_t = decltype(parse(g_first, g_last, parser));
|
|
BOOST_MPL_ASSERT((is_same<attr_t, optional<variant<tuple<std::vector<char>, optional<int>, std::vector<char>>, std::vector<char>>>>));
|
|
|
|
std::string const str = "cb3cb";
|
|
auto first = str.begin();
|
|
auto const last = str.end();
|
|
attr_t const attr = parse(first, last, parser);
|
|
EXPECT_TRUE(attr);
|
|
|
|
constexpr auto fail_parser = parser >> repeat(Inf)[int_];
|
|
first = str.begin();
|
|
auto const fail_attr = parse(first, last, fail_parser);
|
|
EXPECT_FALSE(fail_attr);
|
|
{
|
|
decltype(parse(first, last, fail_parser)) attr;
|
|
auto const copy = attr;
|
|
EXPECT_FALSE(parse(first, last, fail_parser, attr));
|
|
EXPECT_EQ(attr, copy);
|
|
}
|
|
}
|
|
{
|
|
constexpr auto parser = (eps | *char_ | -int_ | *char_) >> (*char_ | eps | eps | eps);
|
|
using attr_t = decltype(parse(g_first, g_last, parser));
|
|
BOOST_MPL_ASSERT((is_same<attr_t, optional<tuple<optional<variant<std::vector<char>, optional<int>>>, optional<std::vector<char>>>>>));
|
|
|
|
std::string const str = "cb";
|
|
auto first = str.begin();
|
|
auto const last = str.end();
|
|
attr_t const attr = parse(first, last, parser);
|
|
EXPECT_TRUE(attr);
|
|
|
|
constexpr auto fail_parser = parser >> repeat(Inf)[int_];
|
|
first = str.begin();
|
|
auto const fail_attr = parse(first, last, fail_parser);
|
|
EXPECT_FALSE(fail_attr);
|
|
{
|
|
decltype(parse(first, last, fail_parser)) attr;
|
|
auto const copy = attr;
|
|
EXPECT_FALSE(parse(first, last, fail_parser, attr));
|
|
EXPECT_EQ(attr, copy);
|
|
}
|
|
}
|
|
{
|
|
constexpr auto parser = -(eps >> *char_ >> -int_ >> *char_) | -(eps >> *char_ >> -int_);
|
|
using attr_t = decltype(parse(g_first, g_last, parser));
|
|
BOOST_MPL_ASSERT((is_same<attr_t, optional<variant<optional<tuple<std::vector<char>, optional<int>, std::vector<char>>>, optional<tuple<std::vector<char>, optional<int>>>>>>));
|
|
|
|
std::string const str = "cb3cb";
|
|
auto first = str.begin();
|
|
auto const last = str.end();
|
|
attr_t const attr = parse(first, last, parser);
|
|
EXPECT_TRUE(attr);
|
|
|
|
constexpr auto fail_parser = parser >> repeat(Inf)[int_];
|
|
first = str.begin();
|
|
auto const fail_attr = parse(first, last, fail_parser);
|
|
EXPECT_FALSE(fail_attr);
|
|
{
|
|
decltype(parse(first, last, fail_parser)) attr;
|
|
auto const copy = attr;
|
|
EXPECT_FALSE(parse(first, last, fail_parser, attr));
|
|
EXPECT_EQ(attr, copy);
|
|
}
|
|
}
|
|
{
|
|
constexpr auto parser = (eps | *char_ | -int_ | *char_) >> (eps | *char_ | -int_);
|
|
using attr_t = decltype(parse(g_first, g_last, parser));
|
|
BOOST_MPL_ASSERT((is_same<attr_t, optional<std::vector<optional<variant<std::vector<char>, optional<int>>>>>>));
|
|
|
|
std::string const str = "";
|
|
auto first = str.begin();
|
|
auto const last = str.end();
|
|
attr_t const attr = parse(first, last, parser);
|
|
EXPECT_TRUE(attr);
|
|
|
|
constexpr auto fail_parser = parser >> repeat(Inf)[int_];
|
|
first = str.begin();
|
|
auto const fail_attr = parse(first, last, fail_parser);
|
|
EXPECT_FALSE(fail_attr);
|
|
{
|
|
decltype(parse(first, last, fail_parser)) attr;
|
|
auto const copy = attr;
|
|
EXPECT_FALSE(parse(first, last, fail_parser, attr));
|
|
EXPECT_EQ(attr, copy);
|
|
}
|
|
}
|
|
}
|
|
|
|
TEST(parser, generated_030_010)
|
|
{
|
|
{
|
|
constexpr auto parser = (eps >> *char_ >> -int_ >> *char_) | (*char_ >> eps >> eps >> *char_);
|
|
using attr_t = decltype(parse(g_first, g_last, parser));
|
|
BOOST_MPL_ASSERT((is_same<attr_t, optional<variant<tuple<std::vector<char>, optional<int>, std::vector<char>>, std::vector<char>>>>));
|
|
|
|
std::string const str = "cb3cb";
|
|
auto first = str.begin();
|
|
auto const last = str.end();
|
|
attr_t const attr = parse(first, last, parser);
|
|
EXPECT_TRUE(attr);
|
|
|
|
constexpr auto fail_parser = parser >> repeat(Inf)[int_];
|
|
first = str.begin();
|
|
auto const fail_attr = parse(first, last, fail_parser);
|
|
EXPECT_FALSE(fail_attr);
|
|
{
|
|
decltype(parse(first, last, fail_parser)) attr;
|
|
auto const copy = attr;
|
|
EXPECT_FALSE(parse(first, last, fail_parser, attr));
|
|
EXPECT_EQ(attr, copy);
|
|
}
|
|
}
|
|
{
|
|
constexpr auto parser = -(eps | *char_ | -int_ | *char_) >> (*char_ | eps | eps | *char_);
|
|
using attr_t = decltype(parse(g_first, g_last, parser));
|
|
BOOST_MPL_ASSERT((is_same<attr_t, optional<tuple<optional<variant<std::vector<char>, optional<int>>>, optional<std::vector<char>>>>>));
|
|
|
|
std::string const str = "cb";
|
|
auto first = str.begin();
|
|
auto const last = str.end();
|
|
attr_t const attr = parse(first, last, parser);
|
|
EXPECT_TRUE(attr);
|
|
|
|
constexpr auto fail_parser = parser >> repeat(Inf)[int_];
|
|
first = str.begin();
|
|
auto const fail_attr = parse(first, last, fail_parser);
|
|
EXPECT_FALSE(fail_attr);
|
|
{
|
|
decltype(parse(first, last, fail_parser)) attr;
|
|
auto const copy = attr;
|
|
EXPECT_FALSE(parse(first, last, fail_parser, attr));
|
|
EXPECT_EQ(attr, copy);
|
|
}
|
|
}
|
|
{
|
|
constexpr auto parser = (eps >> *char_ >> -int_ >> *char_) | -(eps >> *char_ >> -int_ >> *char_);
|
|
using attr_t = decltype(parse(g_first, g_last, parser));
|
|
BOOST_MPL_ASSERT((is_same<attr_t, optional<variant<tuple<std::vector<char>, optional<int>, std::vector<char>>, optional<tuple<std::vector<char>, optional<int>, std::vector<char>>>>>>));
|
|
|
|
std::string const str = "cb3cb";
|
|
auto first = str.begin();
|
|
auto const last = str.end();
|
|
attr_t const attr = parse(first, last, parser);
|
|
EXPECT_TRUE(attr);
|
|
|
|
constexpr auto fail_parser = parser >> repeat(Inf)[int_];
|
|
first = str.begin();
|
|
auto const fail_attr = parse(first, last, fail_parser);
|
|
EXPECT_FALSE(fail_attr);
|
|
{
|
|
decltype(parse(first, last, fail_parser)) attr;
|
|
auto const copy = attr;
|
|
EXPECT_FALSE(parse(first, last, fail_parser, attr));
|
|
EXPECT_EQ(attr, copy);
|
|
}
|
|
}
|
|
{
|
|
constexpr auto parser = (eps | *char_ | -int_ | *char_) >> (eps | *char_ | -int_ | *char_);
|
|
using attr_t = decltype(parse(g_first, g_last, parser));
|
|
BOOST_MPL_ASSERT((is_same<attr_t, optional<std::vector<optional<variant<std::vector<char>, optional<int>>>>>>));
|
|
|
|
std::string const str = "";
|
|
auto first = str.begin();
|
|
auto const last = str.end();
|
|
attr_t const attr = parse(first, last, parser);
|
|
EXPECT_TRUE(attr);
|
|
|
|
constexpr auto fail_parser = parser >> repeat(Inf)[int_];
|
|
first = str.begin();
|
|
auto const fail_attr = parse(first, last, fail_parser);
|
|
EXPECT_FALSE(fail_attr);
|
|
{
|
|
decltype(parse(first, last, fail_parser)) attr;
|
|
auto const copy = attr;
|
|
EXPECT_FALSE(parse(first, last, fail_parser, attr));
|
|
EXPECT_EQ(attr, copy);
|
|
}
|
|
}
|
|
{
|
|
constexpr auto parser = -(eps >> *char_ >> -int_ >> *char_) | (*char_);
|
|
using attr_t = decltype(parse(g_first, g_last, parser));
|
|
BOOST_MPL_ASSERT((is_same<attr_t, optional<variant<optional<tuple<std::vector<char>, optional<int>, std::vector<char>>>, std::vector<char>>>>));
|
|
|
|
std::string const str = "cb3cb";
|
|
auto first = str.begin();
|
|
auto const last = str.end();
|
|
attr_t const attr = parse(first, last, parser);
|
|
EXPECT_TRUE(attr);
|
|
|
|
constexpr auto fail_parser = parser >> repeat(Inf)[int_];
|
|
first = str.begin();
|
|
auto const fail_attr = parse(first, last, fail_parser);
|
|
EXPECT_FALSE(fail_attr);
|
|
{
|
|
decltype(parse(first, last, fail_parser)) attr;
|
|
auto const copy = attr;
|
|
EXPECT_FALSE(parse(first, last, fail_parser, attr));
|
|
EXPECT_EQ(attr, copy);
|
|
}
|
|
}
|
|
}
|
|
|
|
TEST(parser, generated_030_011)
|
|
{
|
|
{
|
|
constexpr auto parser = (eps | *char_ | -int_ | *char_) >> (*char_);
|
|
using attr_t = decltype(parse(g_first, g_last, parser));
|
|
BOOST_MPL_ASSERT((is_same<attr_t, optional<tuple<optional<variant<std::vector<char>, optional<int>>>, std::vector<char>>>>));
|
|
|
|
std::string const str = "cb";
|
|
auto first = str.begin();
|
|
auto const last = str.end();
|
|
attr_t const attr = parse(first, last, parser);
|
|
EXPECT_TRUE(attr);
|
|
|
|
constexpr auto fail_parser = parser >> repeat(Inf)[int_];
|
|
first = str.begin();
|
|
auto const fail_attr = parse(first, last, fail_parser);
|
|
EXPECT_FALSE(fail_attr);
|
|
{
|
|
decltype(parse(first, last, fail_parser)) attr;
|
|
auto const copy = attr;
|
|
EXPECT_FALSE(parse(first, last, fail_parser, attr));
|
|
EXPECT_EQ(attr, copy);
|
|
}
|
|
}
|
|
{
|
|
constexpr auto parser = (eps >> *char_ >> -int_ >> *char_) | -(-int_ >> -int_);
|
|
using attr_t = decltype(parse(g_first, g_last, parser));
|
|
BOOST_MPL_ASSERT((is_same<attr_t, optional<variant<tuple<std::vector<char>, optional<int>, std::vector<char>>, optional<std::vector<optional<int>>>>>>));
|
|
|
|
std::string const str = "cb3cb";
|
|
auto first = str.begin();
|
|
auto const last = str.end();
|
|
attr_t const attr = parse(first, last, parser);
|
|
EXPECT_TRUE(attr);
|
|
|
|
constexpr auto fail_parser = parser >> repeat(Inf)[int_];
|
|
first = str.begin();
|
|
auto const fail_attr = parse(first, last, fail_parser);
|
|
EXPECT_FALSE(fail_attr);
|
|
{
|
|
decltype(parse(first, last, fail_parser)) attr;
|
|
auto const copy = attr;
|
|
EXPECT_FALSE(parse(first, last, fail_parser, attr));
|
|
EXPECT_EQ(attr, copy);
|
|
}
|
|
}
|
|
{
|
|
constexpr auto parser = -(eps | *char_ | -int_ | *char_) >> (-int_ | -int_);
|
|
using attr_t = decltype(parse(g_first, g_last, parser));
|
|
BOOST_MPL_ASSERT((is_same<attr_t, optional<tuple<optional<variant<std::vector<char>, optional<int>>>, optional<int>>>>));
|
|
|
|
std::string const str = "3";
|
|
auto first = str.begin();
|
|
auto const last = str.end();
|
|
attr_t const attr = parse(first, last, parser);
|
|
EXPECT_TRUE(attr);
|
|
|
|
constexpr auto fail_parser = parser >> repeat(Inf)[int_];
|
|
first = str.begin();
|
|
auto const fail_attr = parse(first, last, fail_parser);
|
|
EXPECT_FALSE(fail_attr);
|
|
{
|
|
decltype(parse(first, last, fail_parser)) attr;
|
|
auto const copy = attr;
|
|
EXPECT_FALSE(parse(first, last, fail_parser, attr));
|
|
EXPECT_EQ(attr, copy);
|
|
}
|
|
}
|
|
{
|
|
constexpr auto parser = (eps >> *char_ >> -int_ >> *char_) | (eps >> -int_ >> eps >> *char_);
|
|
using attr_t = decltype(parse(g_first, g_last, parser));
|
|
BOOST_MPL_ASSERT((is_same<attr_t, optional<variant<tuple<std::vector<char>, optional<int>, std::vector<char>>, tuple<optional<int>, std::vector<char>>>>>));
|
|
|
|
std::string const str = "cb3cb";
|
|
auto first = str.begin();
|
|
auto const last = str.end();
|
|
attr_t const attr = parse(first, last, parser);
|
|
EXPECT_TRUE(attr);
|
|
|
|
constexpr auto fail_parser = parser >> repeat(Inf)[int_];
|
|
first = str.begin();
|
|
auto const fail_attr = parse(first, last, fail_parser);
|
|
EXPECT_FALSE(fail_attr);
|
|
{
|
|
decltype(parse(first, last, fail_parser)) attr;
|
|
auto const copy = attr;
|
|
EXPECT_FALSE(parse(first, last, fail_parser, attr));
|
|
EXPECT_EQ(attr, copy);
|
|
}
|
|
}
|
|
{
|
|
constexpr auto parser = (eps | *char_ | -int_ | *char_) >> (eps | -int_ | eps | *char_);
|
|
using attr_t = decltype(parse(g_first, g_last, parser));
|
|
BOOST_MPL_ASSERT((is_same<attr_t, optional<tuple<optional<variant<std::vector<char>, optional<int>>>, optional<variant<optional<int>, std::vector<char>>>>>>));
|
|
|
|
std::string const str = "";
|
|
auto first = str.begin();
|
|
auto const last = str.end();
|
|
attr_t const attr = parse(first, last, parser);
|
|
EXPECT_TRUE(attr);
|
|
|
|
constexpr auto fail_parser = parser >> repeat(Inf)[int_];
|
|
first = str.begin();
|
|
auto const fail_attr = parse(first, last, fail_parser);
|
|
EXPECT_FALSE(fail_attr);
|
|
{
|
|
decltype(parse(first, last, fail_parser)) attr;
|
|
auto const copy = attr;
|
|
EXPECT_FALSE(parse(first, last, fail_parser, attr));
|
|
EXPECT_EQ(attr, copy);
|
|
}
|
|
}
|
|
}
|
|
|
|
TEST(parser, generated_030_012)
|
|
{
|
|
{
|
|
constexpr auto parser = -(eps >> *char_ >> -int_ >> *char_) | -(eps >> -int_ >> -int_);
|
|
using attr_t = decltype(parse(g_first, g_last, parser));
|
|
BOOST_MPL_ASSERT((is_same<attr_t, optional<variant<optional<tuple<std::vector<char>, optional<int>, std::vector<char>>>, optional<std::vector<optional<int>>>>>>));
|
|
|
|
std::string const str = "cb3cb";
|
|
auto first = str.begin();
|
|
auto const last = str.end();
|
|
attr_t const attr = parse(first, last, parser);
|
|
EXPECT_TRUE(attr);
|
|
|
|
constexpr auto fail_parser = parser >> repeat(Inf)[int_];
|
|
first = str.begin();
|
|
auto const fail_attr = parse(first, last, fail_parser);
|
|
EXPECT_FALSE(fail_attr);
|
|
{
|
|
decltype(parse(first, last, fail_parser)) attr;
|
|
auto const copy = attr;
|
|
EXPECT_FALSE(parse(first, last, fail_parser, attr));
|
|
EXPECT_EQ(attr, copy);
|
|
}
|
|
}
|
|
{
|
|
constexpr auto parser = (eps | *char_ | -int_ | *char_) >> (eps | -int_ | -int_);
|
|
using attr_t = decltype(parse(g_first, g_last, parser));
|
|
BOOST_MPL_ASSERT((is_same<attr_t, optional<tuple<optional<variant<std::vector<char>, optional<int>>>, optional<int>>>>));
|
|
|
|
std::string const str = "";
|
|
auto first = str.begin();
|
|
auto const last = str.end();
|
|
attr_t const attr = parse(first, last, parser);
|
|
EXPECT_TRUE(attr);
|
|
|
|
constexpr auto fail_parser = parser >> repeat(Inf)[int_];
|
|
first = str.begin();
|
|
auto const fail_attr = parse(first, last, fail_parser);
|
|
EXPECT_FALSE(fail_attr);
|
|
{
|
|
decltype(parse(first, last, fail_parser)) attr;
|
|
auto const copy = attr;
|
|
EXPECT_FALSE(parse(first, last, fail_parser, attr));
|
|
EXPECT_EQ(attr, copy);
|
|
}
|
|
}
|
|
{
|
|
constexpr auto parser = (eps >> *char_ >> -int_ >> *char_) | (*char_ >> -int_ >> eps >> -int_);
|
|
using attr_t = decltype(parse(g_first, g_last, parser));
|
|
BOOST_MPL_ASSERT((is_same<attr_t, optional<variant<tuple<std::vector<char>, optional<int>, std::vector<char>>, tuple<std::vector<char>, std::vector<optional<int>>>>>>));
|
|
|
|
std::string const str = "cb3cb";
|
|
auto first = str.begin();
|
|
auto const last = str.end();
|
|
attr_t const attr = parse(first, last, parser);
|
|
EXPECT_TRUE(attr);
|
|
|
|
constexpr auto fail_parser = parser >> repeat(Inf)[int_];
|
|
first = str.begin();
|
|
auto const fail_attr = parse(first, last, fail_parser);
|
|
EXPECT_FALSE(fail_attr);
|
|
{
|
|
decltype(parse(first, last, fail_parser)) attr;
|
|
auto const copy = attr;
|
|
EXPECT_FALSE(parse(first, last, fail_parser, attr));
|
|
EXPECT_EQ(attr, copy);
|
|
}
|
|
}
|
|
{
|
|
constexpr auto parser = -(eps | *char_ | -int_ | *char_) >> (*char_ | -int_ | eps | -int_);
|
|
using attr_t = decltype(parse(g_first, g_last, parser));
|
|
BOOST_MPL_ASSERT((is_same<attr_t, optional<std::vector<optional<variant<std::vector<char>, optional<int>>>>>>));
|
|
|
|
std::string const str = "cb";
|
|
auto first = str.begin();
|
|
auto const last = str.end();
|
|
attr_t const attr = parse(first, last, parser);
|
|
EXPECT_TRUE(attr);
|
|
|
|
constexpr auto fail_parser = parser >> repeat(Inf)[int_];
|
|
first = str.begin();
|
|
auto const fail_attr = parse(first, last, fail_parser);
|
|
EXPECT_FALSE(fail_attr);
|
|
{
|
|
decltype(parse(first, last, fail_parser)) attr;
|
|
auto const copy = attr;
|
|
EXPECT_FALSE(parse(first, last, fail_parser, attr));
|
|
EXPECT_EQ(attr, copy);
|
|
}
|
|
}
|
|
{
|
|
constexpr auto parser = (eps >> *char_ >> -int_ >> *char_) | -(-int_ >> eps >> *char_ >> -int_);
|
|
using attr_t = decltype(parse(g_first, g_last, parser));
|
|
BOOST_MPL_ASSERT((is_same<attr_t, optional<variant<tuple<std::vector<char>, optional<int>, std::vector<char>>, optional<tuple<optional<int>, std::vector<char>, optional<int>>>>>>));
|
|
|
|
std::string const str = "cb3cb";
|
|
auto first = str.begin();
|
|
auto const last = str.end();
|
|
attr_t const attr = parse(first, last, parser);
|
|
EXPECT_TRUE(attr);
|
|
|
|
constexpr auto fail_parser = parser >> repeat(Inf)[int_];
|
|
first = str.begin();
|
|
auto const fail_attr = parse(first, last, fail_parser);
|
|
EXPECT_FALSE(fail_attr);
|
|
{
|
|
decltype(parse(first, last, fail_parser)) attr;
|
|
auto const copy = attr;
|
|
EXPECT_FALSE(parse(first, last, fail_parser, attr));
|
|
EXPECT_EQ(attr, copy);
|
|
}
|
|
}
|
|
}
|
|
|
|
TEST(parser, generated_030_013)
|
|
{
|
|
{
|
|
constexpr auto parser = (eps | *char_ | -int_ | *char_) >> (-int_ | eps | *char_ | -int_);
|
|
using attr_t = decltype(parse(g_first, g_last, parser));
|
|
BOOST_MPL_ASSERT((is_same<attr_t, optional<tuple<optional<variant<std::vector<char>, optional<int>>>, optional<variant<optional<int>, std::vector<char>>>>>>));
|
|
|
|
std::string const str = "3";
|
|
auto first = str.begin();
|
|
auto const last = str.end();
|
|
attr_t const attr = parse(first, last, parser);
|
|
EXPECT_TRUE(attr);
|
|
|
|
constexpr auto fail_parser = parser >> repeat(Inf)[int_];
|
|
first = str.begin();
|
|
auto const fail_attr = parse(first, last, fail_parser);
|
|
EXPECT_FALSE(fail_attr);
|
|
{
|
|
decltype(parse(first, last, fail_parser)) attr;
|
|
auto const copy = attr;
|
|
EXPECT_FALSE(parse(first, last, fail_parser, attr));
|
|
EXPECT_EQ(attr, copy);
|
|
}
|
|
}
|
|
{
|
|
constexpr auto parser = -(eps >> *char_ >> -int_ >> *char_) | (*char_ >> eps >> *char_ >> -int_);
|
|
using attr_t = decltype(parse(g_first, g_last, parser));
|
|
BOOST_MPL_ASSERT((is_same<attr_t, optional<variant<optional<tuple<std::vector<char>, optional<int>, std::vector<char>>>, tuple<std::vector<char>, optional<int>>>>>));
|
|
|
|
std::string const str = "cb3cb";
|
|
auto first = str.begin();
|
|
auto const last = str.end();
|
|
attr_t const attr = parse(first, last, parser);
|
|
EXPECT_TRUE(attr);
|
|
|
|
constexpr auto fail_parser = parser >> repeat(Inf)[int_];
|
|
first = str.begin();
|
|
auto const fail_attr = parse(first, last, fail_parser);
|
|
EXPECT_FALSE(fail_attr);
|
|
{
|
|
decltype(parse(first, last, fail_parser)) attr;
|
|
auto const copy = attr;
|
|
EXPECT_FALSE(parse(first, last, fail_parser, attr));
|
|
EXPECT_EQ(attr, copy);
|
|
}
|
|
}
|
|
{
|
|
constexpr auto parser = (eps | *char_ | -int_ | *char_) >> (*char_ | eps | *char_ | -int_);
|
|
using attr_t = decltype(parse(g_first, g_last, parser));
|
|
BOOST_MPL_ASSERT((is_same<attr_t, optional<std::vector<optional<variant<std::vector<char>, optional<int>>>>>>));
|
|
|
|
std::string const str = "cb";
|
|
auto first = str.begin();
|
|
auto const last = str.end();
|
|
attr_t const attr = parse(first, last, parser);
|
|
EXPECT_TRUE(attr);
|
|
|
|
constexpr auto fail_parser = parser >> repeat(Inf)[int_];
|
|
first = str.begin();
|
|
auto const fail_attr = parse(first, last, fail_parser);
|
|
EXPECT_FALSE(fail_attr);
|
|
{
|
|
decltype(parse(first, last, fail_parser)) attr;
|
|
auto const copy = attr;
|
|
EXPECT_FALSE(parse(first, last, fail_parser, attr));
|
|
EXPECT_EQ(attr, copy);
|
|
}
|
|
}
|
|
{
|
|
constexpr auto parser = (eps >> *char_ >> -int_ >> *char_) | -(*char_ >> *char_);
|
|
using attr_t = decltype(parse(g_first, g_last, parser));
|
|
BOOST_MPL_ASSERT((is_same<attr_t, optional<variant<tuple<std::vector<char>, optional<int>, std::vector<char>>, optional<std::vector<char>>>>>));
|
|
|
|
std::string const str = "cb3cb";
|
|
auto first = str.begin();
|
|
auto const last = str.end();
|
|
attr_t const attr = parse(first, last, parser);
|
|
EXPECT_TRUE(attr);
|
|
|
|
constexpr auto fail_parser = parser >> repeat(Inf)[int_];
|
|
first = str.begin();
|
|
auto const fail_attr = parse(first, last, fail_parser);
|
|
EXPECT_FALSE(fail_attr);
|
|
{
|
|
decltype(parse(first, last, fail_parser)) attr;
|
|
auto const copy = attr;
|
|
EXPECT_FALSE(parse(first, last, fail_parser, attr));
|
|
EXPECT_EQ(attr, copy);
|
|
}
|
|
}
|
|
{
|
|
constexpr auto parser = -(eps | *char_ | -int_ | *char_) >> (*char_ | *char_);
|
|
using attr_t = decltype(parse(g_first, g_last, parser));
|
|
BOOST_MPL_ASSERT((is_same<attr_t, optional<tuple<optional<variant<std::vector<char>, optional<int>>>, std::vector<char>>>>));
|
|
|
|
std::string const str = "cb";
|
|
auto first = str.begin();
|
|
auto const last = str.end();
|
|
attr_t const attr = parse(first, last, parser);
|
|
EXPECT_TRUE(attr);
|
|
|
|
constexpr auto fail_parser = parser >> repeat(Inf)[int_];
|
|
first = str.begin();
|
|
auto const fail_attr = parse(first, last, fail_parser);
|
|
EXPECT_FALSE(fail_attr);
|
|
{
|
|
decltype(parse(first, last, fail_parser)) attr;
|
|
auto const copy = attr;
|
|
EXPECT_FALSE(parse(first, last, fail_parser, attr));
|
|
EXPECT_EQ(attr, copy);
|
|
}
|
|
}
|
|
}
|
|
|
|
TEST(parser, generated_030_014)
|
|
{
|
|
{
|
|
constexpr auto parser = (eps >> *char_ >> -int_ >> *char_) | (-int_ >> eps >> -int_ >> eps);
|
|
using attr_t = decltype(parse(g_first, g_last, parser));
|
|
BOOST_MPL_ASSERT((is_same<attr_t, optional<variant<tuple<std::vector<char>, optional<int>, std::vector<char>>, std::vector<optional<int>>>>>));
|
|
|
|
std::string const str = "cb3cb";
|
|
auto first = str.begin();
|
|
auto const last = str.end();
|
|
attr_t const attr = parse(first, last, parser);
|
|
EXPECT_TRUE(attr);
|
|
|
|
constexpr auto fail_parser = parser >> repeat(Inf)[int_];
|
|
first = str.begin();
|
|
auto const fail_attr = parse(first, last, fail_parser);
|
|
EXPECT_FALSE(fail_attr);
|
|
{
|
|
decltype(parse(first, last, fail_parser)) attr;
|
|
auto const copy = attr;
|
|
EXPECT_FALSE(parse(first, last, fail_parser, attr));
|
|
EXPECT_EQ(attr, copy);
|
|
}
|
|
}
|
|
{
|
|
constexpr auto parser = (eps | *char_ | -int_ | *char_) >> (-int_ | eps | -int_ | eps);
|
|
using attr_t = decltype(parse(g_first, g_last, parser));
|
|
BOOST_MPL_ASSERT((is_same<attr_t, optional<tuple<optional<variant<std::vector<char>, optional<int>>>, optional<int>>>>));
|
|
|
|
std::string const str = "3";
|
|
auto first = str.begin();
|
|
auto const last = str.end();
|
|
attr_t const attr = parse(first, last, parser);
|
|
EXPECT_TRUE(attr);
|
|
|
|
constexpr auto fail_parser = parser >> repeat(Inf)[int_];
|
|
first = str.begin();
|
|
auto const fail_attr = parse(first, last, fail_parser);
|
|
EXPECT_FALSE(fail_attr);
|
|
{
|
|
decltype(parse(first, last, fail_parser)) attr;
|
|
auto const copy = attr;
|
|
EXPECT_FALSE(parse(first, last, fail_parser, attr));
|
|
EXPECT_EQ(attr, copy);
|
|
}
|
|
}
|
|
{
|
|
constexpr auto parser = -(eps >> *char_ >> -int_ >> *char_) | -(-int_ >> eps >> -int_ >> *char_);
|
|
using attr_t = decltype(parse(g_first, g_last, parser));
|
|
BOOST_MPL_ASSERT((is_same<attr_t, optional<variant<optional<tuple<std::vector<char>, optional<int>, std::vector<char>>>, optional<tuple<std::vector<optional<int>>, std::vector<char>>>>>>));
|
|
|
|
std::string const str = "cb3cb";
|
|
auto first = str.begin();
|
|
auto const last = str.end();
|
|
attr_t const attr = parse(first, last, parser);
|
|
EXPECT_TRUE(attr);
|
|
|
|
constexpr auto fail_parser = parser >> repeat(Inf)[int_];
|
|
first = str.begin();
|
|
auto const fail_attr = parse(first, last, fail_parser);
|
|
EXPECT_FALSE(fail_attr);
|
|
{
|
|
decltype(parse(first, last, fail_parser)) attr;
|
|
auto const copy = attr;
|
|
EXPECT_FALSE(parse(first, last, fail_parser, attr));
|
|
EXPECT_EQ(attr, copy);
|
|
}
|
|
}
|
|
{
|
|
constexpr auto parser = (eps | *char_ | -int_ | *char_) >> (-int_ | eps | -int_ | *char_);
|
|
using attr_t = decltype(parse(g_first, g_last, parser));
|
|
BOOST_MPL_ASSERT((is_same<attr_t, optional<tuple<optional<variant<std::vector<char>, optional<int>>>, optional<variant<optional<int>, std::vector<char>>>>>>));
|
|
|
|
std::string const str = "3";
|
|
auto first = str.begin();
|
|
auto const last = str.end();
|
|
attr_t const attr = parse(first, last, parser);
|
|
EXPECT_TRUE(attr);
|
|
|
|
constexpr auto fail_parser = parser >> repeat(Inf)[int_];
|
|
first = str.begin();
|
|
auto const fail_attr = parse(first, last, fail_parser);
|
|
EXPECT_FALSE(fail_attr);
|
|
{
|
|
decltype(parse(first, last, fail_parser)) attr;
|
|
auto const copy = attr;
|
|
EXPECT_FALSE(parse(first, last, fail_parser, attr));
|
|
EXPECT_EQ(attr, copy);
|
|
}
|
|
}
|
|
{
|
|
constexpr auto parser = (eps >> *char_ >> -int_ >> *char_) | (eps >> eps >> *char_);
|
|
using attr_t = decltype(parse(g_first, g_last, parser));
|
|
BOOST_MPL_ASSERT((is_same<attr_t, optional<variant<tuple<std::vector<char>, optional<int>, std::vector<char>>, std::vector<char>>>>));
|
|
|
|
std::string const str = "cb3cb";
|
|
auto first = str.begin();
|
|
auto const last = str.end();
|
|
attr_t const attr = parse(first, last, parser);
|
|
EXPECT_TRUE(attr);
|
|
|
|
constexpr auto fail_parser = parser >> repeat(Inf)[int_];
|
|
first = str.begin();
|
|
auto const fail_attr = parse(first, last, fail_parser);
|
|
EXPECT_FALSE(fail_attr);
|
|
{
|
|
decltype(parse(first, last, fail_parser)) attr;
|
|
auto const copy = attr;
|
|
EXPECT_FALSE(parse(first, last, fail_parser, attr));
|
|
EXPECT_EQ(attr, copy);
|
|
}
|
|
}
|
|
}
|
|
|
|
TEST(parser, generated_030_015)
|
|
{
|
|
{
|
|
constexpr auto parser = -(eps | *char_ | -int_ | *char_) >> (eps | eps | *char_);
|
|
using attr_t = decltype(parse(g_first, g_last, parser));
|
|
BOOST_MPL_ASSERT((is_same<attr_t, optional<tuple<optional<variant<std::vector<char>, optional<int>>>, optional<std::vector<char>>>>>));
|
|
|
|
std::string const str = "";
|
|
auto first = str.begin();
|
|
auto const last = str.end();
|
|
attr_t const attr = parse(first, last, parser);
|
|
EXPECT_TRUE(attr);
|
|
|
|
constexpr auto fail_parser = parser >> repeat(Inf)[int_];
|
|
first = str.begin();
|
|
auto const fail_attr = parse(first, last, fail_parser);
|
|
EXPECT_FALSE(fail_attr);
|
|
{
|
|
decltype(parse(first, last, fail_parser)) attr;
|
|
auto const copy = attr;
|
|
EXPECT_FALSE(parse(first, last, fail_parser, attr));
|
|
EXPECT_EQ(attr, copy);
|
|
}
|
|
}
|
|
{
|
|
constexpr auto parser = (eps >> *char_ >> -int_ >> *char_) | -(-int_ >> -int_ >> *char_ >> -int_);
|
|
using attr_t = decltype(parse(g_first, g_last, parser));
|
|
BOOST_MPL_ASSERT((is_same<attr_t, optional<variant<tuple<std::vector<char>, optional<int>, std::vector<char>>, optional<tuple<std::vector<optional<int>>, std::vector<char>, optional<int>>>>>>));
|
|
|
|
std::string const str = "cb3cb";
|
|
auto first = str.begin();
|
|
auto const last = str.end();
|
|
attr_t const attr = parse(first, last, parser);
|
|
EXPECT_TRUE(attr);
|
|
|
|
constexpr auto fail_parser = parser >> repeat(Inf)[int_];
|
|
first = str.begin();
|
|
auto const fail_attr = parse(first, last, fail_parser);
|
|
EXPECT_FALSE(fail_attr);
|
|
{
|
|
decltype(parse(first, last, fail_parser)) attr;
|
|
auto const copy = attr;
|
|
EXPECT_FALSE(parse(first, last, fail_parser, attr));
|
|
EXPECT_EQ(attr, copy);
|
|
}
|
|
}
|
|
{
|
|
constexpr auto parser = (eps | *char_ | -int_ | *char_) >> (-int_ | -int_ | *char_ | -int_);
|
|
using attr_t = decltype(parse(g_first, g_last, parser));
|
|
BOOST_MPL_ASSERT((is_same<attr_t, optional<tuple<optional<variant<std::vector<char>, optional<int>>>, variant<optional<int>, std::vector<char>>>>>));
|
|
|
|
std::string const str = "3";
|
|
auto first = str.begin();
|
|
auto const last = str.end();
|
|
attr_t const attr = parse(first, last, parser);
|
|
EXPECT_TRUE(attr);
|
|
|
|
constexpr auto fail_parser = parser >> repeat(Inf)[int_];
|
|
first = str.begin();
|
|
auto const fail_attr = parse(first, last, fail_parser);
|
|
EXPECT_FALSE(fail_attr);
|
|
{
|
|
decltype(parse(first, last, fail_parser)) attr;
|
|
auto const copy = attr;
|
|
EXPECT_FALSE(parse(first, last, fail_parser, attr));
|
|
EXPECT_EQ(attr, copy);
|
|
}
|
|
}
|
|
{
|
|
constexpr auto parser = -(eps >> *char_ >> -int_ >> *char_) | (eps >> *char_ >> eps >> -int_);
|
|
using attr_t = decltype(parse(g_first, g_last, parser));
|
|
BOOST_MPL_ASSERT((is_same<attr_t, optional<variant<optional<tuple<std::vector<char>, optional<int>, std::vector<char>>>, tuple<std::vector<char>, optional<int>>>>>));
|
|
|
|
std::string const str = "cb3cb";
|
|
auto first = str.begin();
|
|
auto const last = str.end();
|
|
attr_t const attr = parse(first, last, parser);
|
|
EXPECT_TRUE(attr);
|
|
|
|
constexpr auto fail_parser = parser >> repeat(Inf)[int_];
|
|
first = str.begin();
|
|
auto const fail_attr = parse(first, last, fail_parser);
|
|
EXPECT_FALSE(fail_attr);
|
|
{
|
|
decltype(parse(first, last, fail_parser)) attr;
|
|
auto const copy = attr;
|
|
EXPECT_FALSE(parse(first, last, fail_parser, attr));
|
|
EXPECT_EQ(attr, copy);
|
|
}
|
|
}
|
|
{
|
|
constexpr auto parser = (eps | *char_ | -int_ | *char_) >> (eps | *char_ | eps | -int_);
|
|
using attr_t = decltype(parse(g_first, g_last, parser));
|
|
BOOST_MPL_ASSERT((is_same<attr_t, optional<std::vector<optional<variant<std::vector<char>, optional<int>>>>>>));
|
|
|
|
std::string const str = "";
|
|
auto first = str.begin();
|
|
auto const last = str.end();
|
|
attr_t const attr = parse(first, last, parser);
|
|
EXPECT_TRUE(attr);
|
|
|
|
constexpr auto fail_parser = parser >> repeat(Inf)[int_];
|
|
first = str.begin();
|
|
auto const fail_attr = parse(first, last, fail_parser);
|
|
EXPECT_FALSE(fail_attr);
|
|
{
|
|
decltype(parse(first, last, fail_parser)) attr;
|
|
auto const copy = attr;
|
|
EXPECT_FALSE(parse(first, last, fail_parser, attr));
|
|
EXPECT_EQ(attr, copy);
|
|
}
|
|
}
|
|
}
|
|
|
|
TEST(parser, generated_030_016)
|
|
{
|
|
{
|
|
constexpr auto parser = (eps >> *char_ >> -int_ >> *char_) | -(-int_ >> *char_ >> eps >> eps);
|
|
using attr_t = decltype(parse(g_first, g_last, parser));
|
|
BOOST_MPL_ASSERT((is_same<attr_t, optional<variant<tuple<std::vector<char>, optional<int>, std::vector<char>>, optional<tuple<optional<int>, std::vector<char>>>>>>));
|
|
|
|
std::string const str = "cb3cb";
|
|
auto first = str.begin();
|
|
auto const last = str.end();
|
|
attr_t const attr = parse(first, last, parser);
|
|
EXPECT_TRUE(attr);
|
|
|
|
constexpr auto fail_parser = parser >> repeat(Inf)[int_];
|
|
first = str.begin();
|
|
auto const fail_attr = parse(first, last, fail_parser);
|
|
EXPECT_FALSE(fail_attr);
|
|
{
|
|
decltype(parse(first, last, fail_parser)) attr;
|
|
auto const copy = attr;
|
|
EXPECT_FALSE(parse(first, last, fail_parser, attr));
|
|
EXPECT_EQ(attr, copy);
|
|
}
|
|
}
|
|
{
|
|
constexpr auto parser = -(eps | *char_ | -int_ | *char_) >> (-int_ | *char_ | eps | eps);
|
|
using attr_t = decltype(parse(g_first, g_last, parser));
|
|
BOOST_MPL_ASSERT((is_same<attr_t, optional<tuple<optional<variant<std::vector<char>, optional<int>>>, optional<variant<optional<int>, std::vector<char>>>>>>));
|
|
|
|
std::string const str = "3";
|
|
auto first = str.begin();
|
|
auto const last = str.end();
|
|
attr_t const attr = parse(first, last, parser);
|
|
EXPECT_TRUE(attr);
|
|
|
|
constexpr auto fail_parser = parser >> repeat(Inf)[int_];
|
|
first = str.begin();
|
|
auto const fail_attr = parse(first, last, fail_parser);
|
|
EXPECT_FALSE(fail_attr);
|
|
{
|
|
decltype(parse(first, last, fail_parser)) attr;
|
|
auto const copy = attr;
|
|
EXPECT_FALSE(parse(first, last, fail_parser, attr));
|
|
EXPECT_EQ(attr, copy);
|
|
}
|
|
}
|
|
{
|
|
constexpr auto parser = (eps >> *char_ >> -int_ >> *char_) | (eps >> -int_ >> *char_ >> eps);
|
|
using attr_t = decltype(parse(g_first, g_last, parser));
|
|
BOOST_MPL_ASSERT((is_same<attr_t, optional<variant<tuple<std::vector<char>, optional<int>, std::vector<char>>, tuple<optional<int>, std::vector<char>>>>>));
|
|
|
|
std::string const str = "cb3cb";
|
|
auto first = str.begin();
|
|
auto const last = str.end();
|
|
attr_t const attr = parse(first, last, parser);
|
|
EXPECT_TRUE(attr);
|
|
|
|
constexpr auto fail_parser = parser >> repeat(Inf)[int_];
|
|
first = str.begin();
|
|
auto const fail_attr = parse(first, last, fail_parser);
|
|
EXPECT_FALSE(fail_attr);
|
|
{
|
|
decltype(parse(first, last, fail_parser)) attr;
|
|
auto const copy = attr;
|
|
EXPECT_FALSE(parse(first, last, fail_parser, attr));
|
|
EXPECT_EQ(attr, copy);
|
|
}
|
|
}
|
|
{
|
|
constexpr auto parser = (eps | *char_ | -int_ | *char_) >> (eps | -int_ | *char_ | eps);
|
|
using attr_t = decltype(parse(g_first, g_last, parser));
|
|
BOOST_MPL_ASSERT((is_same<attr_t, optional<tuple<optional<variant<std::vector<char>, optional<int>>>, optional<variant<optional<int>, std::vector<char>>>>>>));
|
|
|
|
std::string const str = "";
|
|
auto first = str.begin();
|
|
auto const last = str.end();
|
|
attr_t const attr = parse(first, last, parser);
|
|
EXPECT_TRUE(attr);
|
|
|
|
constexpr auto fail_parser = parser >> repeat(Inf)[int_];
|
|
first = str.begin();
|
|
auto const fail_attr = parse(first, last, fail_parser);
|
|
EXPECT_FALSE(fail_attr);
|
|
{
|
|
decltype(parse(first, last, fail_parser)) attr;
|
|
auto const copy = attr;
|
|
EXPECT_FALSE(parse(first, last, fail_parser, attr));
|
|
EXPECT_EQ(attr, copy);
|
|
}
|
|
}
|
|
{
|
|
constexpr auto parser = -(eps >> *char_ >> -int_ >> *char_) | -(-int_ >> eps);
|
|
using attr_t = decltype(parse(g_first, g_last, parser));
|
|
BOOST_MPL_ASSERT((is_same<attr_t, optional<variant<optional<tuple<std::vector<char>, optional<int>, std::vector<char>>>, optional<int>>>>));
|
|
|
|
std::string const str = "cb3cb";
|
|
auto first = str.begin();
|
|
auto const last = str.end();
|
|
attr_t const attr = parse(first, last, parser);
|
|
EXPECT_TRUE(attr);
|
|
|
|
constexpr auto fail_parser = parser >> repeat(Inf)[int_];
|
|
first = str.begin();
|
|
auto const fail_attr = parse(first, last, fail_parser);
|
|
EXPECT_FALSE(fail_attr);
|
|
{
|
|
decltype(parse(first, last, fail_parser)) attr;
|
|
auto const copy = attr;
|
|
EXPECT_FALSE(parse(first, last, fail_parser, attr));
|
|
EXPECT_EQ(attr, copy);
|
|
}
|
|
}
|
|
}
|
|
|
|
TEST(parser, generated_030_017)
|
|
{
|
|
{
|
|
constexpr auto parser = (eps | *char_ | -int_ | *char_) >> (-int_ | eps);
|
|
using attr_t = decltype(parse(g_first, g_last, parser));
|
|
BOOST_MPL_ASSERT((is_same<attr_t, optional<tuple<optional<variant<std::vector<char>, optional<int>>>, optional<int>>>>));
|
|
|
|
std::string const str = "3";
|
|
auto first = str.begin();
|
|
auto const last = str.end();
|
|
attr_t const attr = parse(first, last, parser);
|
|
EXPECT_TRUE(attr);
|
|
|
|
constexpr auto fail_parser = parser >> repeat(Inf)[int_];
|
|
first = str.begin();
|
|
auto const fail_attr = parse(first, last, fail_parser);
|
|
EXPECT_FALSE(fail_attr);
|
|
{
|
|
decltype(parse(first, last, fail_parser)) attr;
|
|
auto const copy = attr;
|
|
EXPECT_FALSE(parse(first, last, fail_parser, attr));
|
|
EXPECT_EQ(attr, copy);
|
|
}
|
|
}
|
|
{
|
|
constexpr auto parser = (eps >> *char_ >> -int_ >> *char_) | (-int_ >> *char_ >> *char_ >> -int_);
|
|
using attr_t = decltype(parse(g_first, g_last, parser));
|
|
BOOST_MPL_ASSERT((is_same<attr_t, optional<variant<tuple<std::vector<char>, optional<int>, std::vector<char>>, tuple<optional<int>, std::vector<char>, optional<int>>>>>));
|
|
|
|
std::string const str = "cb3cb";
|
|
auto first = str.begin();
|
|
auto const last = str.end();
|
|
attr_t const attr = parse(first, last, parser);
|
|
EXPECT_TRUE(attr);
|
|
|
|
constexpr auto fail_parser = parser >> repeat(Inf)[int_];
|
|
first = str.begin();
|
|
auto const fail_attr = parse(first, last, fail_parser);
|
|
EXPECT_FALSE(fail_attr);
|
|
{
|
|
decltype(parse(first, last, fail_parser)) attr;
|
|
auto const copy = attr;
|
|
EXPECT_FALSE(parse(first, last, fail_parser, attr));
|
|
EXPECT_EQ(attr, copy);
|
|
}
|
|
}
|
|
{
|
|
constexpr auto parser = -(eps | *char_ | -int_ | *char_) >> (-int_ | *char_ | *char_ | -int_);
|
|
using attr_t = decltype(parse(g_first, g_last, parser));
|
|
BOOST_MPL_ASSERT((is_same<attr_t, optional<tuple<optional<variant<std::vector<char>, optional<int>>>, variant<optional<int>, std::vector<char>>>>>));
|
|
|
|
std::string const str = "3";
|
|
auto first = str.begin();
|
|
auto const last = str.end();
|
|
attr_t const attr = parse(first, last, parser);
|
|
EXPECT_TRUE(attr);
|
|
|
|
constexpr auto fail_parser = parser >> repeat(Inf)[int_];
|
|
first = str.begin();
|
|
auto const fail_attr = parse(first, last, fail_parser);
|
|
EXPECT_FALSE(fail_attr);
|
|
{
|
|
decltype(parse(first, last, fail_parser)) attr;
|
|
auto const copy = attr;
|
|
EXPECT_FALSE(parse(first, last, fail_parser, attr));
|
|
EXPECT_EQ(attr, copy);
|
|
}
|
|
}
|
|
{
|
|
constexpr auto parser = (eps >> *char_ >> -int_ >> *char_) | -(eps >> -int_ >> eps);
|
|
using attr_t = decltype(parse(g_first, g_last, parser));
|
|
BOOST_MPL_ASSERT((is_same<attr_t, optional<variant<tuple<std::vector<char>, optional<int>, std::vector<char>>, optional<int>>>>));
|
|
|
|
std::string const str = "cb3cb";
|
|
auto first = str.begin();
|
|
auto const last = str.end();
|
|
attr_t const attr = parse(first, last, parser);
|
|
EXPECT_TRUE(attr);
|
|
|
|
constexpr auto fail_parser = parser >> repeat(Inf)[int_];
|
|
first = str.begin();
|
|
auto const fail_attr = parse(first, last, fail_parser);
|
|
EXPECT_FALSE(fail_attr);
|
|
{
|
|
decltype(parse(first, last, fail_parser)) attr;
|
|
auto const copy = attr;
|
|
EXPECT_FALSE(parse(first, last, fail_parser, attr));
|
|
EXPECT_EQ(attr, copy);
|
|
}
|
|
}
|
|
{
|
|
constexpr auto parser = (eps | *char_ | -int_ | *char_) >> (eps | -int_ | eps);
|
|
using attr_t = decltype(parse(g_first, g_last, parser));
|
|
BOOST_MPL_ASSERT((is_same<attr_t, optional<tuple<optional<variant<std::vector<char>, optional<int>>>, optional<int>>>>));
|
|
|
|
std::string const str = "";
|
|
auto first = str.begin();
|
|
auto const last = str.end();
|
|
attr_t const attr = parse(first, last, parser);
|
|
EXPECT_TRUE(attr);
|
|
|
|
constexpr auto fail_parser = parser >> repeat(Inf)[int_];
|
|
first = str.begin();
|
|
auto const fail_attr = parse(first, last, fail_parser);
|
|
EXPECT_FALSE(fail_attr);
|
|
{
|
|
decltype(parse(first, last, fail_parser)) attr;
|
|
auto const copy = attr;
|
|
EXPECT_FALSE(parse(first, last, fail_parser, attr));
|
|
EXPECT_EQ(attr, copy);
|
|
}
|
|
}
|
|
}
|
|
|
|
TEST(parser, generated_030_018)
|
|
{
|
|
{
|
|
constexpr auto parser = -(eps >> *char_ >> -int_ >> *char_) | (*char_ >> -int_ >> -int_);
|
|
using attr_t = decltype(parse(g_first, g_last, parser));
|
|
BOOST_MPL_ASSERT((is_same<attr_t, optional<variant<optional<tuple<std::vector<char>, optional<int>, std::vector<char>>>, tuple<std::vector<char>, std::vector<optional<int>>>>>>));
|
|
|
|
std::string const str = "cb3cb";
|
|
auto first = str.begin();
|
|
auto const last = str.end();
|
|
attr_t const attr = parse(first, last, parser);
|
|
EXPECT_TRUE(attr);
|
|
|
|
constexpr auto fail_parser = parser >> repeat(Inf)[int_];
|
|
first = str.begin();
|
|
auto const fail_attr = parse(first, last, fail_parser);
|
|
EXPECT_FALSE(fail_attr);
|
|
{
|
|
decltype(parse(first, last, fail_parser)) attr;
|
|
auto const copy = attr;
|
|
EXPECT_FALSE(parse(first, last, fail_parser, attr));
|
|
EXPECT_EQ(attr, copy);
|
|
}
|
|
}
|
|
{
|
|
constexpr auto parser = (eps | *char_ | -int_ | *char_) >> (*char_ | -int_ | -int_);
|
|
using attr_t = decltype(parse(g_first, g_last, parser));
|
|
BOOST_MPL_ASSERT((is_same<attr_t, optional<tuple<optional<variant<std::vector<char>, optional<int>>>, variant<std::vector<char>, optional<int>>>>>));
|
|
|
|
std::string const str = "cb";
|
|
auto first = str.begin();
|
|
auto const last = str.end();
|
|
attr_t const attr = parse(first, last, parser);
|
|
EXPECT_TRUE(attr);
|
|
|
|
constexpr auto fail_parser = parser >> repeat(Inf)[int_];
|
|
first = str.begin();
|
|
auto const fail_attr = parse(first, last, fail_parser);
|
|
EXPECT_FALSE(fail_attr);
|
|
{
|
|
decltype(parse(first, last, fail_parser)) attr;
|
|
auto const copy = attr;
|
|
EXPECT_FALSE(parse(first, last, fail_parser, attr));
|
|
EXPECT_EQ(attr, copy);
|
|
}
|
|
}
|
|
{
|
|
constexpr auto parser = (eps >> *char_ >> -int_ >> *char_) | -(-int_ >> *char_ >> eps);
|
|
using attr_t = decltype(parse(g_first, g_last, parser));
|
|
BOOST_MPL_ASSERT((is_same<attr_t, optional<variant<tuple<std::vector<char>, optional<int>, std::vector<char>>, optional<tuple<optional<int>, std::vector<char>>>>>>));
|
|
|
|
std::string const str = "cb3cb";
|
|
auto first = str.begin();
|
|
auto const last = str.end();
|
|
attr_t const attr = parse(first, last, parser);
|
|
EXPECT_TRUE(attr);
|
|
|
|
constexpr auto fail_parser = parser >> repeat(Inf)[int_];
|
|
first = str.begin();
|
|
auto const fail_attr = parse(first, last, fail_parser);
|
|
EXPECT_FALSE(fail_attr);
|
|
{
|
|
decltype(parse(first, last, fail_parser)) attr;
|
|
auto const copy = attr;
|
|
EXPECT_FALSE(parse(first, last, fail_parser, attr));
|
|
EXPECT_EQ(attr, copy);
|
|
}
|
|
}
|
|
{
|
|
constexpr auto parser = -(eps | *char_ | -int_ | *char_) >> (-int_ | *char_ | eps);
|
|
using attr_t = decltype(parse(g_first, g_last, parser));
|
|
BOOST_MPL_ASSERT((is_same<attr_t, optional<tuple<optional<variant<std::vector<char>, optional<int>>>, optional<variant<optional<int>, std::vector<char>>>>>>));
|
|
|
|
std::string const str = "3";
|
|
auto first = str.begin();
|
|
auto const last = str.end();
|
|
attr_t const attr = parse(first, last, parser);
|
|
EXPECT_TRUE(attr);
|
|
|
|
constexpr auto fail_parser = parser >> repeat(Inf)[int_];
|
|
first = str.begin();
|
|
auto const fail_attr = parse(first, last, fail_parser);
|
|
EXPECT_FALSE(fail_attr);
|
|
{
|
|
decltype(parse(first, last, fail_parser)) attr;
|
|
auto const copy = attr;
|
|
EXPECT_FALSE(parse(first, last, fail_parser, attr));
|
|
EXPECT_EQ(attr, copy);
|
|
}
|
|
}
|
|
{
|
|
constexpr auto parser = (eps >> *char_ >> -int_ >> *char_) | (-int_ >> -int_ >> *char_ >> *char_);
|
|
using attr_t = decltype(parse(g_first, g_last, parser));
|
|
BOOST_MPL_ASSERT((is_same<attr_t, optional<variant<tuple<std::vector<char>, optional<int>, std::vector<char>>, tuple<std::vector<optional<int>>, std::vector<char>>>>>));
|
|
|
|
std::string const str = "cb3cb";
|
|
auto first = str.begin();
|
|
auto const last = str.end();
|
|
attr_t const attr = parse(first, last, parser);
|
|
EXPECT_TRUE(attr);
|
|
|
|
constexpr auto fail_parser = parser >> repeat(Inf)[int_];
|
|
first = str.begin();
|
|
auto const fail_attr = parse(first, last, fail_parser);
|
|
EXPECT_FALSE(fail_attr);
|
|
{
|
|
decltype(parse(first, last, fail_parser)) attr;
|
|
auto const copy = attr;
|
|
EXPECT_FALSE(parse(first, last, fail_parser, attr));
|
|
EXPECT_EQ(attr, copy);
|
|
}
|
|
}
|
|
}
|
|
|
|
TEST(parser, generated_030_019)
|
|
{
|
|
{
|
|
constexpr auto parser = (eps | *char_ | -int_ | *char_) >> (-int_ | -int_ | *char_ | *char_);
|
|
using attr_t = decltype(parse(g_first, g_last, parser));
|
|
BOOST_MPL_ASSERT((is_same<attr_t, optional<tuple<optional<variant<std::vector<char>, optional<int>>>, variant<optional<int>, std::vector<char>>>>>));
|
|
|
|
std::string const str = "3";
|
|
auto first = str.begin();
|
|
auto const last = str.end();
|
|
attr_t const attr = parse(first, last, parser);
|
|
EXPECT_TRUE(attr);
|
|
|
|
constexpr auto fail_parser = parser >> repeat(Inf)[int_];
|
|
first = str.begin();
|
|
auto const fail_attr = parse(first, last, fail_parser);
|
|
EXPECT_FALSE(fail_attr);
|
|
{
|
|
decltype(parse(first, last, fail_parser)) attr;
|
|
auto const copy = attr;
|
|
EXPECT_FALSE(parse(first, last, fail_parser, attr));
|
|
EXPECT_EQ(attr, copy);
|
|
}
|
|
}
|
|
{
|
|
constexpr auto parser = -(eps >> *char_ >> -int_ >> *char_) | -(*char_ >> -int_ >> -int_ >> -int_);
|
|
using attr_t = decltype(parse(g_first, g_last, parser));
|
|
BOOST_MPL_ASSERT((is_same<attr_t, optional<variant<optional<tuple<std::vector<char>, optional<int>, std::vector<char>>>, optional<tuple<std::vector<char>, std::vector<optional<int>>>>>>>));
|
|
|
|
std::string const str = "cb3cb";
|
|
auto first = str.begin();
|
|
auto const last = str.end();
|
|
attr_t const attr = parse(first, last, parser);
|
|
EXPECT_TRUE(attr);
|
|
|
|
constexpr auto fail_parser = parser >> repeat(Inf)[int_];
|
|
first = str.begin();
|
|
auto const fail_attr = parse(first, last, fail_parser);
|
|
EXPECT_FALSE(fail_attr);
|
|
{
|
|
decltype(parse(first, last, fail_parser)) attr;
|
|
auto const copy = attr;
|
|
EXPECT_FALSE(parse(first, last, fail_parser, attr));
|
|
EXPECT_EQ(attr, copy);
|
|
}
|
|
}
|
|
{
|
|
constexpr auto parser = (eps | *char_ | -int_ | *char_) >> (*char_ | -int_ | -int_ | -int_);
|
|
using attr_t = decltype(parse(g_first, g_last, parser));
|
|
BOOST_MPL_ASSERT((is_same<attr_t, optional<tuple<optional<variant<std::vector<char>, optional<int>>>, variant<std::vector<char>, optional<int>>>>>));
|
|
|
|
std::string const str = "cb";
|
|
auto first = str.begin();
|
|
auto const last = str.end();
|
|
attr_t const attr = parse(first, last, parser);
|
|
EXPECT_TRUE(attr);
|
|
|
|
constexpr auto fail_parser = parser >> repeat(Inf)[int_];
|
|
first = str.begin();
|
|
auto const fail_attr = parse(first, last, fail_parser);
|
|
EXPECT_FALSE(fail_attr);
|
|
{
|
|
decltype(parse(first, last, fail_parser)) attr;
|
|
auto const copy = attr;
|
|
EXPECT_FALSE(parse(first, last, fail_parser, attr));
|
|
EXPECT_EQ(attr, copy);
|
|
}
|
|
}
|
|
{
|
|
constexpr auto parser = (eps >> *char_ >> -int_ >> *char_) | (eps >> -int_ >> *char_ >> -int_);
|
|
using attr_t = decltype(parse(g_first, g_last, parser));
|
|
BOOST_MPL_ASSERT((is_same<attr_t, optional<variant<tuple<std::vector<char>, optional<int>, std::vector<char>>, tuple<optional<int>, std::vector<char>, optional<int>>>>>));
|
|
|
|
std::string const str = "cb3cb";
|
|
auto first = str.begin();
|
|
auto const last = str.end();
|
|
attr_t const attr = parse(first, last, parser);
|
|
EXPECT_TRUE(attr);
|
|
|
|
constexpr auto fail_parser = parser >> repeat(Inf)[int_];
|
|
first = str.begin();
|
|
auto const fail_attr = parse(first, last, fail_parser);
|
|
EXPECT_FALSE(fail_attr);
|
|
{
|
|
decltype(parse(first, last, fail_parser)) attr;
|
|
auto const copy = attr;
|
|
EXPECT_FALSE(parse(first, last, fail_parser, attr));
|
|
EXPECT_EQ(attr, copy);
|
|
}
|
|
}
|
|
{
|
|
constexpr auto parser = -(eps | *char_ | -int_ | *char_) >> (eps | -int_ | *char_ | -int_);
|
|
using attr_t = decltype(parse(g_first, g_last, parser));
|
|
BOOST_MPL_ASSERT((is_same<attr_t, optional<tuple<optional<variant<std::vector<char>, optional<int>>>, optional<variant<optional<int>, std::vector<char>>>>>>));
|
|
|
|
std::string const str = "";
|
|
auto first = str.begin();
|
|
auto const last = str.end();
|
|
attr_t const attr = parse(first, last, parser);
|
|
EXPECT_TRUE(attr);
|
|
|
|
constexpr auto fail_parser = parser >> repeat(Inf)[int_];
|
|
first = str.begin();
|
|
auto const fail_attr = parse(first, last, fail_parser);
|
|
EXPECT_FALSE(fail_attr);
|
|
{
|
|
decltype(parse(first, last, fail_parser)) attr;
|
|
auto const copy = attr;
|
|
EXPECT_FALSE(parse(first, last, fail_parser, attr));
|
|
EXPECT_EQ(attr, copy);
|
|
}
|
|
}
|
|
}
|
|
|