本文整理汇总了C++中spirit_test类的典型用法代码示例。如果您正苦于以下问题:C++ spirit_test类的具体用法?C++ spirit_test怎么用?C++ spirit_test使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了spirit_test类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: main
int
main()
{
namespace karma = boost::spirit::karma;
using spirit_test::test;
using namespace boost::spirit;
using namespace boost::spirit::karma;
namespace phx = boost::phoenix;
{
BOOST_TEST(test("123", karma::lazy(phx::val(int_)), 123));
}
{
int result = 123;
BOOST_TEST(test("123", karma::lazy(phx::val(int_))[_1 = phx::ref(result)]));
}
// {
// typedef spirit_test::output_iterator<char>::type outiter_type;
// rule<outiter_type, void(std::string)> r;
//
// r = char_('<') << karma::lazy(_r1) << '>' << "</" << karma::lazy(_r1) << '>';
//
// std::string tag("tag"), foo("foo");
// BOOST_TEST(test("<tag></tag>", r (phx::ref(tag))));
// BOOST_TEST(!test("<foo></bar>", r (phx::ref(foo))));
// }
return boost::report_errors();
}
示例2: main
int
main()
{
using spirit_test::test_attr;
using spirit_test::test;
using boost::spirit::x3::rule;
using boost::spirit::x3::int_;
using boost::spirit::x3::with;
{ // injecting data into the context in the grammar
int val = 0;
auto r = rule<my_rule_class, char const*>() =
'(' > int_ > ',' > int_ > ')'
;
auto start =
with<my_tag>(std::ref(val)) [ r ]
;
BOOST_TEST(test("(123,456)", start));
BOOST_TEST(!test("(abc,def)", start));
BOOST_TEST(val == 2);
}
return boost::report_errors();
}
示例3: main
int main ()
{
using spirit_test::test;
{
using boost::spirit::karma::int_;
data1 b(800, 600);
BOOST_TEST(test("width: 800\nheight: 600\n",
"width: " << int_ << "\n" << "height: " << int_ << "\n", b));
}
{
using boost::spirit::karma::char_;
using boost::spirit::karma::string;
data2 d("test");
BOOST_TEST(test("data: test\n", "data: " << +char_ << "\n", d));
BOOST_TEST(test("data: test\n", "data: " << string << "\n", d));
}
{
using boost::spirit::karma::double_;
BOOST_TEST(test("x=0.0\n", "x=" << double_ << "\n", data3(0)));
BOOST_TEST(test("x=1.1\n", "x=" << double_ << "\n", data3(1.1)));
BOOST_TEST(test("x=1.0e10\n", "x=" << double_ << "\n", data3(1e10)));
BOOST_TEST(test("x=inf\n", "x=" << double_ << "\n",
data3(std::numeric_limits<double>::infinity())));
if (std::numeric_limits<double>::has_quiet_NaN) {
BOOST_TEST(test("x=nan\n", "x=" << double_ << "\n",
data3(std::numeric_limits<double>::quiet_NaN())));
}
if (std::numeric_limits<double>::has_signaling_NaN) {
BOOST_TEST(test("x=nan\n", "x=" << double_ << "\n",
data3(std::numeric_limits<double>::signaling_NaN())));
}
}
{
using boost::spirit::karma::double_;
using boost::spirit::karma::int_;
using boost::spirit::karma::string;
data4 d;
d.b_ = 10;
BOOST_TEST(test(
"Testing: b: 10.0\n",
"Testing: " << -("a: " << int_ << "\n")
<< -("b: " << double_ << "\n")
<< -("c: " << string << "\n"), d));
}
return boost::report_errors();
}
示例4: main
int
main()
{
using boost::spirit::x3::ascii::char_;
using boost::spirit::x3::ascii::space;
using boost::spirit::x3::lit;
using spirit_test::test;
using spirit_test::test_attr;
// Basic tests
{
BOOST_TEST(test("b", char_ - 'a'));
BOOST_TEST(!test("a", char_ - 'a'));
BOOST_TEST(test("/* abcdefghijk */", "/*" >> *(char_ - "*/") >> "*/"));
BOOST_TEST(!test("switch", lit("switch") - "switch"));
}
// Test attributes
{
char attr;
BOOST_TEST(test_attr("xg", (char_ - 'g') >> 'g', attr));
BOOST_TEST(attr == 'x');
}
// Test handling of container attributes
{
std::string attr;
BOOST_TEST(test_attr("abcdefg", *(char_ - 'g') >> 'g', attr));
BOOST_TEST(attr == "abcdef");
}
{
using boost::spirit::x3::_attr;
std::string s;
BOOST_TEST(test(
"/*abcdefghijk*/"
, "/*" >> *(char_ - "*/")[([&](auto& ctx){ s += _attr(ctx); })] >> "*/"
));
BOOST_TEST(s == "abcdefghijk");
s.clear();
BOOST_TEST(test(
" /*abcdefghijk*/"
, "/*" >> *(char_ - "*/")[([&](auto& ctx){ s += _attr(ctx); })] >> "*/"
, space
));
BOOST_TEST(s == "abcdefghijk");
}
return boost::report_errors();
}
示例5: main
int
main()
{
using spirit_test::test;
using boost::spirit::int_;
{
BOOST_TEST((test("1234", &int_, false)));
BOOST_TEST((!test("abcd", &int_)));
}
return boost::report_errors();
}
示例6: main
int
main()
{
using spirit_test::test;
using boost::spirit::x3::eol;
{
BOOST_TEST((test("\r\n", eol)));
BOOST_TEST((test("\r", eol)));
BOOST_TEST((test("\n", eol)));
BOOST_TEST((!test("\n\r", eol)));
BOOST_TEST((!test("", eol)));
}
return boost::report_errors();
}
示例7: main
int
main()
{
using spirit_test::test;
using boost::spirit::x3::eoi;
{
BOOST_TEST((test("", eoi)));
BOOST_TEST(!(test("x", eoi)));
}
{
BOOST_TEST(what(eoi) == "eoi");
}
return boost::report_errors();
}
示例8: main
int main()
{
using spirit_test::test_attr;
using spirit_test::test;
using namespace boost::spirit::x3::ascii;
using boost::spirit::x3::rule;
using boost::spirit::x3::int_;
using boost::spirit::x3::lit;
{ // synth attribute value-init
std::string s;
typedef rule<class r, std::string> rule_type;
auto rdef = rule_type()
= alpha [f()]
;
BOOST_TEST(test_attr("abcdef", +rdef, s));
BOOST_TEST(s == "abcdef");
}
{ // synth attribute value-init
std::string s;
typedef rule<class r, std::string> rule_type;
auto rdef = rule_type() =
alpha /
[](auto& ctx)
{
_val(ctx) += _attr(ctx);
}
;
BOOST_TEST(test_attr("abcdef", +rdef, s));
BOOST_TEST(s == "abcdef");
}
return boost::report_errors();
}
示例9: main
int
main()
{
using spirit_test::test;
using namespace boost::spirit;
{
BOOST_TEST(test("", eps));
}
{ // test action
using namespace boost::phoenix;
BOOST_TEST(test("", eps(val(true))));
BOOST_TEST(!test("", eps(val(false))));
}
return boost::report_errors();
}
示例10: main
int
main()
{
using spirit_test::test;
using spirit_test::test_attr;
using boost::spirit::x3::ascii::space;
using boost::spirit::x3::ascii::space_type;
using boost::spirit::x3::ascii::char_;
using boost::spirit::x3::ascii::alpha;
using boost::spirit::x3::lexeme;
using boost::spirit::x3::skip;
using boost::spirit::x3::lit;
{
BOOST_TEST((test("a b c d", skip(space)[*char_])));
}
{ // test attribute
std::string s;
BOOST_TEST((test_attr("a b c d", skip(space)[*char_], s)));
BOOST_TEST(s == "abcd");
}
{ // reskip
BOOST_TEST((test("ab c d", lexeme[lit('a') >> 'b' >> skip[lit('c') >> 'd']], space)));
BOOST_TEST((test("abcd", lexeme[lit('a') >> 'b' >> skip[lit('c') >> 'd']], space)));
BOOST_TEST(!(test("a bcd", lexeme[lit('a') >> 'b' >> skip[lit('c') >> 'd']], space)));
BOOST_TEST((test("ab c d", lexeme[lexeme[lit('a') >> 'b' >> skip[lit('c') >> 'd']]], space)));
BOOST_TEST((test("abcd", lexeme[lexeme[lit('a') >> 'b' >> skip[lit('c') >> 'd']]], space)));
BOOST_TEST(!(test("a bcd", lexeme[lexeme[lit('a') >> 'b' >> skip[lit('c') >> 'd']]], space)));
}
//~ { // lazy skip
//~ using boost::phoenix::val;
//~ BOOST_TEST((test("a b c d", skip(val(space))[*char_])));
//~ }
return boost::report_errors();
}
示例11: main
int
main()
{
using spirit_test::test;
using spirit_test::test_attr;
using boost::spirit::qi::lit;
using boost::spirit::qi::no_case;
using boost::spirit::qi::char_;
using boost::spirit::qi::encoding;
namespace char_encoding = boost::spirit::char_encoding;
encoding<char_encoding::iso8859_1> iso8859_1;
{ // test extended ASCII characters
BOOST_TEST(test("\xC1", iso8859_1[no_case['\xE1']]));
BOOST_TEST(test("\xC1", iso8859_1[no_case[char_('\xE1')]]));
BOOST_TEST(test("\xC9", iso8859_1[no_case[char_("\xE5-\xEF")]]));
BOOST_TEST(!test("\xFF", iso8859_1[no_case[char_("\xE5-\xEF")]]));
BOOST_TEST(test("\xC1\xE1", iso8859_1[no_case["\xE1\xC1"]]));
BOOST_TEST(test("\xC1\xE1", iso8859_1[no_case[lit("\xE1\xC1")]]));
}
return boost::report_errors();
}
示例12: main
int main()
{
using spirit_test::test;
using spirit_test::test_attr;
using namespace boost::spirit::x3::ascii;
using boost::spirit::x3::raw;
using boost::spirit::x3::eps;
using boost::spirit::x3::_attr;
{
boost::iterator_range<char const*> range;
std::string str;
BOOST_TEST((test_attr("spirit_test_123", raw[alpha >> *(alnum | '_')], range)));
BOOST_TEST((std::string(range.begin(), range.end()) == "spirit_test_123"));
BOOST_TEST((test_attr(" spirit", raw[*alpha], range, space)));
BOOST_TEST((range.size() == 6));
}
{
std::string str;
BOOST_TEST((test_attr("spirit_test_123", raw[alpha >> *(alnum | '_')], str)));
BOOST_TEST((str == "spirit_test_123"));
}
{
boost::iterator_range<char const*> range;
BOOST_TEST((test("x", raw[alpha])));
BOOST_TEST((test_attr("x", raw[alpha], range)));
}
{
boost::iterator_range<char const*> range;
BOOST_TEST((test("x", raw[alpha][ ([&](auto& ctx){ range = _attr(ctx); }) ])));
BOOST_TEST(range.size() == 1 && *range.begin() == 'x');
}
return boost::report_errors();
}
示例13: main
int main()
{
namespace qi = boost::spirit::qi;
namespace phoenix = boost::phoenix;
using spirit_test::test_attr;
{
qi::rule<char const*, std::string()> r;
r %= (+qi::char_)[phoenix::bind(&f, qi::_1)];
std::string attr;
BOOST_TEST(test_attr("abcdef", r, attr));
BOOST_TEST(attr == "abcdef");
}
return boost::report_errors();
}
示例14: main
int
main()
{
using spirit_test::test_attr;
namespace qi = boost::spirit::qi;
using qi::attr;
using qi::double_;
{
double d = 0.0;
BOOST_TEST(test_attr("", attr(1.0), d) && d == 1.0);
double d1 = 1.0;
BOOST_TEST(test_attr("", attr(d1), d) && d == 1.0);
std::pair<double, double> p;
BOOST_TEST(test_attr("1.0", double_ >> attr(1.0), p) &&
p.first == 1.0 && p.second == 1.0);
char c = '\0';
BOOST_TEST(test_attr("", attr('a'), c) && c == 'a');
std::string str;
BOOST_TEST(test_attr("", attr("test"), str) && str == "test");
}
{ // testing lazy constructs
using boost::phoenix::val;
using boost::phoenix::ref;
double d = 0.0;
BOOST_TEST(test_attr("", attr(val(1.0)), d) && d == 1.0);
double d1 = 2.0;
BOOST_TEST(test_attr("", attr(ref(d1)), d) && d == 2.0);
}
{
std::string s;
BOOST_TEST(test_attr("s", "s" >> qi::attr(std::string("123")), s) &&
s == "123");
}
return boost::report_errors();
}
示例15: main
int
main()
{
using spirit_test::test;
using spirit_test::test_attr;
using boost::spirit::qi::lit;
using boost::spirit::qi::no_case;
using boost::spirit::qi::char_;
using boost::spirit::qi::encoding;
namespace char_encoding = boost::spirit::char_encoding;
encoding<char_encoding::iso8859_1> iso8859_1;
// needed for VC7.1 only
#if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1310))
#pragma setlocale("french")
#endif
{
BOOST_TEST(test("Á", iso8859_1[no_case['á']]));
BOOST_TEST(test("Á", iso8859_1[no_case[char_('á')]]));
}
{
BOOST_TEST(test("É", iso8859_1[no_case[char_("å-ï")]]));
BOOST_TEST(!test("ÿ", iso8859_1[no_case[char_("å-ï")]]));
}
{
BOOST_TEST(test("Áá", iso8859_1[no_case["áÁ"]]));
BOOST_TEST(test("Áá", iso8859_1[no_case[lit("áÁ")]]));
}
#if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1310))
#pragma setlocale("")
#endif
return boost::report_errors();
}