本文整理汇总了C++中spirit_test::test方法的典型用法代码示例。如果您正苦于以下问题:C++ spirit_test::test方法的具体用法?C++ spirit_test::test怎么用?C++ spirit_test::test使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类spirit_test
的用法示例。
在下文中一共展示了spirit_test::test方法的12个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: main
int main()
{
using spirit_test::test;
using spirit_test::test_delimited;
using boost::spirit::utree;
using boost::spirit::utree_type;
using boost::spirit::utf8_string_range_type;
using boost::spirit::utf8_string_type;
using boost::spirit::utf8_symbol_type;
using boost::spirit::karma::char_;
using boost::spirit::karma::bool_;
using boost::spirit::karma::int_;
using boost::spirit::karma::double_;
using boost::spirit::karma::string;
using boost::spirit::karma::space;
using boost::spirit::karma::rule;
typedef spirit_test::output_iterator<char>::type output_iterator;
// as_string
{
using boost::spirit::karma::digit;
using boost::spirit::karma::as_string;
utree ut("xy");
BOOST_TEST(test("xy", string, ut));
BOOST_TEST(test("xy", as_string[*char_], ut));
BOOST_TEST(test("x,y", as_string[char_ << ',' << char_], ut));
ut.clear();
ut.push_back("ab");
ut.push_back(1.2);
BOOST_TEST(test("ab1.2", as_string[*~digit] << double_, ut));
BOOST_TEST(test("a,b1.2", as_string[~digit % ','] << double_, ut));
}
// as
{
using boost::spirit::karma::digit;
using boost::spirit::karma::as;
typedef as<std::string> as_string_type;
as_string_type const as_string = as_string_type();
typedef as<utf8_symbol_type> as_symbol_type;
as_symbol_type const as_symbol = as_symbol_type();
utree ut("xy");
BOOST_TEST(test("xy", string, ut));
BOOST_TEST(test("xy", as_string[*char_], ut));
BOOST_TEST(test("x,y", as_string[char_ << ',' << char_], ut));
ut.clear();
ut.push_back("ab");
ut.push_back(1.2);
BOOST_TEST(test("ab1.2", as_string[*~digit] << double_, ut));
BOOST_TEST(test("a,b1.2", as_string[~digit % ','] << double_, ut));
ut = utf8_symbol_type("xy");
BOOST_TEST(test("xy", string, ut));
BOOST_TEST(test("xy", as_symbol[*char_], ut));
BOOST_TEST(test("x,y", as_symbol[char_ << ',' << char_], ut));
ut.clear();
ut.push_back(utf8_symbol_type("ab"));
ut.push_back(1.2);
BOOST_TEST(test("ab1.2", as_symbol[*~digit] << double_, ut));
BOOST_TEST(test("a,b1.2", as_symbol[~digit % ','] << double_, ut));
}
// typed basic_string rules
{
utree ut("buzz");
rule<output_iterator, utf8_string_type()> r1 = string;
rule<output_iterator, utf8_symbol_type()> r2 = string;
BOOST_TEST(test("buzz", r1, ut));
ut = utf8_symbol_type("bar");
BOOST_TEST(test("bar", r2, ut));
}
// parameterized karma::string
{
utree ut("foo");
rule<output_iterator, utf8_string_type()> r1 = string("foo");
BOOST_TEST(test("foo", string("foo"), ut));
BOOST_TEST(test("foo", r1, ut));
}
{
using boost::spirit::karma::verbatim;
using boost::spirit::karma::repeat;
using boost::spirit::karma::space;
using boost::spirit::karma::digit;
utree ut;
//.........这里部分代码省略.........
示例2: main
int
main()
{
using spirit_test::test_attr;
using spirit_test::test;
using namespace boost::spirit::ascii;
using namespace boost::spirit::qi::labels;
using boost::spirit::qi::locals;
using boost::spirit::qi::rule;
using boost::spirit::qi::int_;
using boost::spirit::qi::uint_;
using boost::spirit::qi::fail;
using boost::spirit::qi::on_error;
using boost::spirit::qi::debug;
using boost::spirit::qi::lit;
namespace phx = boost::phoenix;
{ // basic tests
rule<char const*> a, b, c, start;
a = 'a';
b = 'b';
c = 'c';
a.name("a");
b.name("b");
c.name("c");
start.name("start");
debug(a);
debug(b);
debug(c);
debug(start);
start = *(a | b | c);
BOOST_TEST(test("abcabcacb", start));
start = (a | b) >> (start | b);
BOOST_TEST(test("aaaabababaaabbb", start));
BOOST_TEST(test("aaaabababaaabba", start, false));
// ignore the skipper!
BOOST_TEST(test("aaaabababaaabba", start, space, false));
}
{ // basic tests with direct initialization
rule<char const*> a ('a');
rule<char const*> b ('b');
rule<char const*> c ('c');
rule<char const*> start = (a | b) >> (start | b);
BOOST_TEST(test("aaaabababaaabbb", start));
BOOST_TEST(test("aaaabababaaabba", start, false));
// ignore the skipper!
BOOST_TEST(test("aaaabababaaabba", start, space, false));
}
{ // basic tests w/ skipper
rule<char const*, space_type> a, b, c, start;
a = 'a';
b = 'b';
c = 'c';
a.name("a");
b.name("b");
c.name("c");
start.name("start");
debug(a);
debug(b);
debug(c);
debug(start);
start = *(a | b | c);
BOOST_TEST(test(" a b c a b c a c b ", start, space));
start = (a | b) >> (start | b);
BOOST_TEST(test(" a a a a b a b a b a a a b b b ", start, space));
BOOST_TEST(test(" a a a a b a b a b a a a b b a ", start, space, false));
}
{ // basic tests w/ skipper but no final post-skip
rule<char const*, space_type> a, b, c, start;
a = 'a';
b = 'b';
c = 'c';
a.name("a");
b.name("b");
c.name("c");
start.name("start");
//.........这里部分代码省略.........
示例3: main
int
main()
{
using spirit_test::test;
using spirit_test::test_attr;
using boost::spirit::x3::symbols;
using boost::spirit::x3::rule;
//~ using boost::spirit::x3::lazy;
//~ using boost::spirit::x3::_r1;
{ // construction from symbol array
char const* syms[] = {"Joel","Ruby","Tenji","Tutit","Kim","Joey"};
symbols<char, int> sym(syms);
BOOST_TEST((test("Joel", sym)));
BOOST_TEST((test("Ruby", sym)));
BOOST_TEST((test("Tenji", sym)));
BOOST_TEST((test("Tutit", sym)));
BOOST_TEST((test("Kim", sym)));
BOOST_TEST((test("Joey", sym)));
BOOST_TEST((!test("XXX", sym)));
}
{ // construction from 2 arrays
char const* syms[] = {"Joel","Ruby","Tenji","Tutit","Kim","Joey"};
int data[] = {1,2,3,4,5,6};
symbols<char, int> sym(syms, data);
int i;
BOOST_TEST((test_attr("Joel", sym, i)));
BOOST_TEST(i == 1);
BOOST_TEST((test_attr("Ruby", sym, i)));
BOOST_TEST(i == 2);
BOOST_TEST((test_attr("Tenji", sym, i)));
BOOST_TEST(i == 3);
BOOST_TEST((test_attr("Tutit", sym, i)));
BOOST_TEST(i == 4);
BOOST_TEST((test_attr("Kim", sym, i)));
BOOST_TEST(i == 5);
BOOST_TEST((test_attr("Joey", sym, i)));
BOOST_TEST(i == 6);
BOOST_TEST((!test_attr("XXX", sym, i)));
}
{ // allow std::string and other string types
symbols<> sym;
// const and non-const std::string
std::string a("abc");
std::string const b("def");
sym += a;
sym += b;
BOOST_TEST((test("abc", sym)));
BOOST_TEST((test("def", sym)));
sym = a;
BOOST_TEST((test("abc", sym)));
BOOST_TEST((!test("def", sym)));
// non-const C-style string
char arr[2]; arr[0] = 'a'; arr[1] = '\0';
sym = arr;
BOOST_TEST((test("a", sym)));
BOOST_TEST((!test("b", sym)));
// const and non-const custom string type
custom_string_c c('x');
custom_string_c const cc('y');
sym = c, cc;
BOOST_TEST((test("x", sym)));
BOOST_TEST((test("y", sym)));
BOOST_TEST((!test("z", sym)));
}
// $$$ Not yet implemented $$$
//~ {
//~ namespace phx = boost::phoenix;
//~ symbols<char, int> sym;
//~ sym.add
//~ ("a", 1)
//~ ("b", 2)
//~ ;
//~ rule<char const*, int(symbols<char, int>&)> r;
//~ r %= lazy(_r1);
//~ int i = 0;
//~ BOOST_TEST(test_attr("a", r(phx::ref(sym)), i));
//~ BOOST_TEST(i == 1);
//~ BOOST_TEST(test_attr("b", r(phx::ref(sym)), i));
//~ BOOST_TEST(i == 2);
//~ BOOST_TEST(!test("c", r(phx::ref(sym))));
//~ }
{ // find
symbols<char, int> sym;
sym.add("a", 1)("b", 2);
//.........这里部分代码省略.........
示例4: main
int
main()
{
using spirit_test::test_attr;
using spirit_test::test;
using namespace boost::spirit::ascii;
using boost::spirit::qi::repeat;
using boost::spirit::qi::inf;
using boost::spirit::qi::omit;
using boost::spirit::qi::int_;
using boost::spirit::qi::_1;
using boost::spirit::qi::lexeme;
{
BOOST_TEST(test("aaaaaaaa", repeat[char_])); // kleene synonym
BOOST_TEST(test("aaaaaaaa", repeat(8)[char_]));
BOOST_TEST(!test("aa", repeat(3)[char_]));
BOOST_TEST(test("aaa", repeat(3, 5)[char_]));
BOOST_TEST(test("aaaaa", repeat(3, 5)[char_]));
BOOST_TEST(!test("aaaaaa", repeat(3, 5)[char_]));
BOOST_TEST(!test("aa", repeat(3, 5)[char_]));
BOOST_TEST(test("aaa", repeat(3, inf)[char_]));
BOOST_TEST(test("aaaaa", repeat(3, inf)[char_]));
BOOST_TEST(test("aaaaaa", repeat(3, inf)[char_]));
BOOST_TEST(!test("aa", repeat(3, inf)[char_]));
}
{
std::string s;
BOOST_TEST(test_attr("aaaaaaaa", repeat[char_ >> char_], s)); // kleene synonym
BOOST_TEST(s == "aaaaaaaa");
s.clear();
BOOST_TEST(test_attr("aaaaaaaa", repeat(4)[char_ >> char_], s));
BOOST_TEST(s == "aaaaaaaa");
BOOST_TEST(!test("aa", repeat(3)[char_ >> char_]));
BOOST_TEST(!test("a", repeat(1)[char_ >> char_]));
s.clear();
BOOST_TEST(test_attr("aa", repeat(1, 3)[char_ >> char_], s));
BOOST_TEST(s == "aa");
s.clear();
BOOST_TEST(test_attr("aaaaaa", repeat(1, 3)[char_ >> char_], s));
BOOST_TEST(s == "aaaaaa");
BOOST_TEST(!test("aaaaaaa", repeat(1, 3)[char_ >> char_]));
BOOST_TEST(!test("a", repeat(1, 3)[char_ >> char_]));
s.clear();
BOOST_TEST(test_attr("aaaa", repeat(2, inf)[char_ >> char_], s));
BOOST_TEST(s == "aaaa");
s.clear();
BOOST_TEST(test_attr("aaaaaa", repeat(2, inf)[char_ >> char_], s));
BOOST_TEST(s == "aaaaaa");
BOOST_TEST(!test("aa", repeat(2, inf)[char_ >> char_]));
}
{ // from classic spirit tests
BOOST_TEST(test("", repeat(0, inf)['x']));
// repeat exact 8
#define rep8 repeat(8)[alpha] >> 'X'
BOOST_TEST(!test("abcdefgX", rep8, false));
BOOST_TEST(test("abcdefghX", rep8));
BOOST_TEST(!test("abcdefghiX", rep8, false));
BOOST_TEST(!test("abcdefgX", rep8, false));
BOOST_TEST(!test("aX", rep8, false));
// repeat 2 to 8
#define rep28 repeat(2, 8)[alpha] >> '*'
BOOST_TEST(test("abcdefg*", rep28));
BOOST_TEST(test("abcdefgh*", rep28));
BOOST_TEST(!test("abcdefghi*", rep28, false));
BOOST_TEST(!test("a*", rep28, false));
// repeat 2 or more
#define rep2_ repeat(2, inf)[alpha] >> '+'
BOOST_TEST(test("abcdefg+", rep2_));
BOOST_TEST(test("abcdefgh+", rep2_));
BOOST_TEST(test("abcdefghi+", rep2_));
BOOST_TEST(test("abcdefg+", rep2_));
BOOST_TEST(!test("a+", rep2_, false));
// repeat 0
#define rep0 repeat(0)[alpha] >> '/'
BOOST_TEST(test("/", rep0));
BOOST_TEST(!test("a/", rep0, false));
// repeat 0 or 1
#define rep01 repeat(0, 1)[alpha >> digit] >> '?'
BOOST_TEST(!test("abcdefg?", rep01, false));
BOOST_TEST(!test("a?", rep01, false));
BOOST_TEST(!test("1?", rep01, false));
//.........这里部分代码省略.........
示例5: main
int
main()
{
using spirit_test::test;
using spirit_test::test_attr;
using namespace boost::spirit::ascii;
using boost::spirit::qi::int_;
using boost::spirit::qi::omit;
using boost::spirit::qi::lit;
using boost::spirit::qi::_1;
using boost::spirit::qi::lexeme;
{
BOOST_TEST(test("aaaaaaaa", +char_));
BOOST_TEST(test("a", +char_));
BOOST_TEST(!test("", +char_));
BOOST_TEST(test("aaaaaaaa", +alpha));
BOOST_TEST(!test("aaaaaaaa", +upper));
}
{
BOOST_TEST(test(" a a aaa aa", +char_, space));
BOOST_TEST(test("12345 678 9 ", +digit, space));
}
{
BOOST_TEST(test("aBcdeFGH", no_case[+char_]));
BOOST_TEST(test("a B cde FGH ", no_case[+char_], space));
}
{
std::vector<int> v;
BOOST_TEST(test_attr("123 456 789 10", +int_, v, space) && 4 == v.size() &&
v[0] == 123 && v[1] == 456 && v[2] == 789 && v[3] == 10);
}
{
std::vector<std::string> v;
BOOST_TEST(test_attr("a b c d", +lexeme[+alpha], v, space) && 4 == v.size() &&
v[0] == "a" && v[1] == "b" && v[2] == "c" && v[3] == "d");
}
{
BOOST_TEST(test("Kim Kim Kim", +lit("Kim"), space));
}
{
// The following 2 tests show that omit does not inhibit explicit attributes
std::string s;
BOOST_TEST(test_attr("bbbb", omit[+char_('b')], s) && s == "bbbb");
s.clear();
BOOST_TEST(test_attr("b b b b ", omit[+char_('b')], s, space) && s == "bbbb");
}
{ // actions
namespace phx = boost::phoenix;
std::vector<char> v;
BOOST_TEST(test("bbbb", (+char_)[phx::ref(v) = _1]) && 4 == v.size() &&
v[0] == 'b' && v[1] == 'b' && v[2] == 'b' && v[3] == 'b');
}
{ // more actions
namespace phx = boost::phoenix;
std::vector<int> v;
BOOST_TEST(test("1 2 3", (+int_)[phx::ref(v) = _1], space) && 3 == v.size() &&
v[0] == 1 && v[1] == 2 && v[2] == 3);
}
{ // attribute customization
x_attr x;
test_attr("abcde", +char_, x);
}
return boost::report_errors();
}
示例6: main
int main()
{
using spirit_test::test_attr;
using spirit_test::test;
using boost::spirit::qi::bool_;
{
BOOST_TEST(test("true", bool_));
BOOST_TEST(test("false", bool_));
BOOST_TEST(!test("fasle", bool_));
}
{
using boost::spirit::qi::true_;
using boost::spirit::qi::false_;
BOOST_TEST(test("true", true_));
BOOST_TEST(!test("true", false_));
BOOST_TEST(test("false", false_));
BOOST_TEST(!test("false", true_));
}
{
using boost::spirit::qi::true_;
using boost::spirit::qi::false_;
using boost::spirit::qi::no_case;
BOOST_TEST(test("True", no_case[bool_]));
BOOST_TEST(test("False", no_case[bool_]));
BOOST_TEST(test("True", no_case[true_]));
BOOST_TEST(test("False", no_case[false_]));
}
{
bool b = false;
BOOST_TEST(test_attr("true", bool_, b) && b);
BOOST_TEST(test_attr("false", bool_, b) && !b);
BOOST_TEST(!test_attr("fasle", bool_, b));
}
{
typedef boost::spirit::qi::bool_parser<bool, backwards_bool_policies>
backwards_bool_type;
backwards_bool_type const backwards_bool = backwards_bool_type();
BOOST_TEST(test("true", backwards_bool));
BOOST_TEST(test("eurt", backwards_bool));
BOOST_TEST(!test("false", backwards_bool));
BOOST_TEST(!test("fasle", backwards_bool));
bool b = false;
BOOST_TEST(test_attr("true", backwards_bool, b) && b);
BOOST_TEST(test_attr("eurt", backwards_bool, b) && !b);
BOOST_TEST(!test_attr("false", backwards_bool, b));
BOOST_TEST(!test_attr("fasle", backwards_bool, b));
}
{
typedef boost::spirit::qi::bool_parser<test_bool_type>
bool_test_type;
bool_test_type const test_bool = bool_test_type();
BOOST_TEST(test("true", test_bool));
BOOST_TEST(test("false", test_bool));
BOOST_TEST(!test("fasle", test_bool));
test_bool_type b = false;
BOOST_TEST(test_attr("true", test_bool, b) && b.b);
BOOST_TEST(test_attr("false", test_bool, b) && !b.b);
BOOST_TEST(!test_attr("fasle", test_bool, b));
}
return boost::report_errors();
}
示例7: main
int main()
{
using spirit_test::test_attr;
using spirit_test::test;
using boost::spirit::qi::byte_;
using boost::spirit::qi::word;
using boost::spirit::qi::dword;
using boost::spirit::qi::big_word;
using boost::spirit::qi::big_dword;
using boost::spirit::qi::little_word;
using boost::spirit::qi::little_dword;
#ifdef BOOST_HAS_LONG_LONG
using boost::spirit::qi::qword;
using boost::spirit::qi::big_qword;
using boost::spirit::qi::little_qword;
#endif
boost::uint8_t uc;
boost::uint16_t us;
boost::uint32_t ui;
#ifdef BOOST_HAS_LONG_LONG
boost::uint64_t ul;
#endif
{ // test native endian binaries
#ifdef BOOST_LITTLE_ENDIAN
BOOST_TEST(test_attr("\x01", byte_, uc) && uc == 0x01);
BOOST_TEST(test_attr("\x01\x02", word, us) && us == 0x0201);
BOOST_TEST(test_attr("\x01\x02\x03\x04", dword, ui) && ui == 0x04030201);
#ifdef BOOST_HAS_LONG_LONG
BOOST_TEST(test_attr("\x01\x02\x03\x04\x05\x06\x07\x08", qword, ul) &&
ul == 0x0807060504030201LL);
#endif
#else
BOOST_TEST(test_attr("\x01", byte_, uc) && uc == 0x01);
BOOST_TEST(test_attr("\x01\x02", word, us) && us == 0x0102);
BOOST_TEST(test_attr("\x01\x02\x03\x04", dword, ui) && ui == 0x01020304);
#ifdef BOOST_HAS_LONG_LONG
BOOST_TEST(test_attr("\x01\x02\x03\x04\x05\x06\x07\x08", qword, ul) &&
ul == 0x0102030405060708LL);
#endif
#endif
}
{ // test native endian binaries
#ifdef BOOST_LITTLE_ENDIAN
BOOST_TEST(test("\x01", byte_(0x01)));
BOOST_TEST(test("\x01\x02", word(0x0201)));
BOOST_TEST(test("\x01\x02\x03\x04", dword(0x04030201)));
#ifdef BOOST_HAS_LONG_LONG
BOOST_TEST(test("\x01\x02\x03\x04\x05\x06\x07\x08",
qword(0x0807060504030201LL)));
#endif
#else
BOOST_TEST(test("\x01", byte_(0x01)));
BOOST_TEST(test("\x01\x02", word(0x0102)));
BOOST_TEST(test("\x01\x02\x03\x04", dword(0x01020304)));
#ifdef BOOST_HAS_LONG_LONG
BOOST_TEST(test("\x01\x02\x03\x04\x05\x06\x07\x08",
qword(0x0102030405060708LL)));
#endif
#endif
}
{ // test big endian binaries
BOOST_TEST(test_attr("\x01\x02", big_word, us) && us == 0x0102);
BOOST_TEST(test_attr("\x01\x02\x03\x04", big_dword, ui) && ui == 0x01020304);
#ifdef BOOST_HAS_LONG_LONG
BOOST_TEST(test_attr("\x01\x02\x03\x04\x05\x06\x07\x08", big_qword, ul)
&& ul == 0x0102030405060708LL);
#endif
}
{
BOOST_TEST(test("\x01\x02", big_word(0x0102)));
BOOST_TEST(test("\x01\x02\x03\x04", big_dword(0x01020304)));
#ifdef BOOST_HAS_LONG_LONG
BOOST_TEST(test("\x01\x02\x03\x04\x05\x06\x07\x08",
big_qword(0x0102030405060708LL)));
#endif
}
{ // test little endian binaries
BOOST_TEST(test_attr("\x01\x02", little_word, us) && us == 0x0201);
BOOST_TEST(test_attr("\x01\x02\x03\x04", little_dword, ui) && ui == 0x04030201);
#ifdef BOOST_HAS_LONG_LONG
BOOST_TEST(test_attr("\x01\x02\x03\x04\x05\x06\x07\x08", little_qword, ul)
&& ul == 0x0807060504030201LL);
#endif
}
{
BOOST_TEST(test("\x01\x02", little_word(0x0201)));
BOOST_TEST(test("\x01\x02\x03\x04", little_dword(0x04030201)));
#ifdef BOOST_HAS_LONG_LONG
BOOST_TEST(test("\x01\x02\x03\x04\x05\x06\x07\x08",
little_qword(0x0807060504030201LL)));
#endif
}
//.........这里部分代码省略.........
示例8: main
int
main()
{
using spirit_test::test;
using spirit_test::test_attr;
{
using namespace boost::spirit::ascii;
BOOST_TEST(test("1", alnum));
BOOST_TEST(!test(" ", alnum));
BOOST_TEST(!test("1", alpha));
BOOST_TEST(test("x", alpha));
BOOST_TEST(test(" ", blank));
BOOST_TEST(!test("x", blank));
BOOST_TEST(test("1", digit));
BOOST_TEST(!test("x", digit));
BOOST_TEST(test("a", lower));
BOOST_TEST(!test("A", lower));
BOOST_TEST(test("!", punct));
BOOST_TEST(!test("x", punct));
BOOST_TEST(test(" ", space));
BOOST_TEST(test("\n", space));
BOOST_TEST(test("\r", space));
BOOST_TEST(test("\t", space));
BOOST_TEST(test("A", upper));
BOOST_TEST(!test("a", upper));
BOOST_TEST(test("A", xdigit));
BOOST_TEST(test("0", xdigit));
BOOST_TEST(test("f", xdigit));
BOOST_TEST(!test("g", xdigit));
// should fail, not assert!
// $$$ Removing this test for now $$$
// BOOST_TEST(!test("\265", space));
}
{
using namespace boost::spirit::ascii;
BOOST_TEST(!test("1", ~alnum));
BOOST_TEST(test(" ", ~alnum));
BOOST_TEST(test("1", ~alpha));
BOOST_TEST(!test("x", ~alpha));
BOOST_TEST(!test(" ", ~blank));
BOOST_TEST(test("x", ~blank));
BOOST_TEST(!test("1", ~digit));
BOOST_TEST(test("x", ~digit));
BOOST_TEST(!test("a", ~lower));
BOOST_TEST(test("A", ~lower));
BOOST_TEST(!test("!", ~punct));
BOOST_TEST(test("x", ~punct));
BOOST_TEST(!test(" ", ~space));
BOOST_TEST(!test("\n", ~space));
BOOST_TEST(!test("\r", ~space));
BOOST_TEST(!test("\t", ~space));
BOOST_TEST(!test("A", ~upper));
BOOST_TEST(test("a", ~upper));
BOOST_TEST(!test("A", ~xdigit));
BOOST_TEST(!test("0", ~xdigit));
BOOST_TEST(!test("f", ~xdigit));
BOOST_TEST(test("g", ~xdigit));
}
{
// we use the hoisted qi namespace this time
using namespace boost::spirit::qi::iso8859_1;
BOOST_TEST(test("1", alnum));
BOOST_TEST(!test(" ", alnum));
BOOST_TEST(!test("1", alpha));
BOOST_TEST(test("x", alpha));
BOOST_TEST(test(" ", blank));
BOOST_TEST(!test("x", blank));
BOOST_TEST(test("1", digit));
BOOST_TEST(!test("x", digit));
BOOST_TEST(test("a", lower));
BOOST_TEST(!test("A", lower));
BOOST_TEST(test("!", punct));
BOOST_TEST(!test("x", punct));
BOOST_TEST(test(" ", space));
BOOST_TEST(test("\n", space));
BOOST_TEST(test("\r", space));
BOOST_TEST(test("\t", space));
BOOST_TEST(test("A", upper));
BOOST_TEST(!test("a", upper));
BOOST_TEST(test("A", xdigit));
BOOST_TEST(test("0", xdigit));
BOOST_TEST(test("f", xdigit));
BOOST_TEST(!test("g", xdigit));
// test extended ASCII characters
BOOST_TEST(test("\xE9", alpha));
BOOST_TEST(test("\xE9", lower));
BOOST_TEST(!test("\xE9", upper));
}
{
using namespace boost::spirit::standard;
BOOST_TEST(test("1", alnum));
BOOST_TEST(!test(" ", alnum));
BOOST_TEST(!test("1", alpha));
BOOST_TEST(test("x", alpha));
//.........这里部分代码省略.........
示例9: main
int
main()
{
using spirit_test::test;
using spirit_test::test_attr;
///////////////////////////////////////////////////////////////////////////
// parameterized unsigned tests
///////////////////////////////////////////////////////////////////////////
{
using boost::spirit::qi::uint_;
unsigned u;
BOOST_TEST(test("123456", uint_(123456)));
BOOST_TEST(!test("123456", uint_(654321)));
BOOST_TEST(test_attr("123456", uint_(123456), u));
BOOST_TEST(u == 123456);
BOOST_TEST(!test_attr("123456", uint_(654321), u));
BOOST_TEST(test(max_unsigned, uint_(UINT_MAX)));
BOOST_TEST(test_attr(max_unsigned, uint_(UINT_MAX), u));
BOOST_TEST(u == UINT_MAX);
}
///////////////////////////////////////////////////////////////////////////
// parameterized binary tests
///////////////////////////////////////////////////////////////////////////
{
using boost::spirit::qi::bin;
unsigned u;
BOOST_TEST(test("11111110", bin(0xFE)));
BOOST_TEST(!test("11111110", bin(0xEF)));
BOOST_TEST(test_attr("11111110", bin(0xFE), u));
BOOST_TEST(u == 0xFE);
BOOST_TEST(!test_attr("11111110", bin(0xEF), u));
BOOST_TEST(test(max_binary, bin(UINT_MAX)));
BOOST_TEST(test_attr(max_binary, bin(UINT_MAX), u));
BOOST_TEST(u == UINT_MAX);
}
///////////////////////////////////////////////////////////////////////////
// parameterized octal tests
///////////////////////////////////////////////////////////////////////////
{
using boost::spirit::qi::oct;
unsigned u;
BOOST_TEST(test("12545674515", oct(012545674515)));
BOOST_TEST(!test("12545674515", oct(051547654521)));
BOOST_TEST(test_attr("12545674515", oct(012545674515), u));
BOOST_TEST(u == 012545674515);
BOOST_TEST(!test_attr("12545674515", oct(051547654521), u));
BOOST_TEST(test(max_octal, oct(UINT_MAX)));
BOOST_TEST(test_attr(max_octal, oct(UINT_MAX), u));
BOOST_TEST(u == UINT_MAX);
}
///////////////////////////////////////////////////////////////////////////
// parameterized hex tests
///////////////////////////////////////////////////////////////////////////
{
using boost::spirit::qi::hex;
unsigned u;
BOOST_TEST(test("95BC8DF", hex(0x95BC8DF)));
BOOST_TEST(!test("95BC8DF", hex(0xFD8CB59)));
BOOST_TEST(test_attr("95BC8DF", hex(0x95BC8DF), u));
BOOST_TEST(u == 0x95BC8DF);
BOOST_TEST(!test_attr("95BC8DF", hex(0xFD8CB59), u));
BOOST_TEST(test("abcdef12", hex(0xabcdef12)));
BOOST_TEST(!test("abcdef12", hex(0x12fedcba)));
BOOST_TEST(test_attr("abcdef12", hex(0xabcdef12), u));
BOOST_TEST(u == 0xabcdef12);
BOOST_TEST(!test_attr("abcdef12", hex(0x12fedcba), u));
BOOST_TEST(test(max_hex, hex(UINT_MAX)));
BOOST_TEST(test_attr(max_hex, hex(UINT_MAX), u));
BOOST_TEST(u == UINT_MAX);
}
///////////////////////////////////////////////////////////////////////////
// parameterized action tests
///////////////////////////////////////////////////////////////////////////
{
using boost::phoenix::ref;
using boost::spirit::ascii::space;
using boost::spirit::qi::uint_;
using boost::spirit::qi::_1;
unsigned n, m;
BOOST_TEST(test("123", uint_(123)[ref(n) = _1]));
BOOST_TEST(n == 123);
BOOST_TEST(!test("123", uint_(321)[ref(n) = _1]));
BOOST_TEST(test_attr("789", uint_(789)[ref(n) = _1], m));
BOOST_TEST(n == 789 && m == 789);
BOOST_TEST(!test_attr("789", uint_(987)[ref(n) = _1], m));
//.........这里部分代码省略.........
示例10: main
int main()
{
using spirit_test::test;
using spirit_test::test_delimited;
using boost::spirit::utree;
using boost::spirit::utree_type;
using boost::spirit::utf8_string_range_type;
using boost::spirit::utf8_string_type;
using boost::spirit::utf8_symbol_type;
using boost::spirit::karma::char_;
using boost::spirit::karma::bool_;
using boost::spirit::karma::int_;
using boost::spirit::karma::double_;
using boost::spirit::karma::string;
using boost::spirit::karma::space;
using boost::spirit::karma::rule;
typedef spirit_test::output_iterator<char>::type output_iterator;
// primitive data types
{
utree ut('x');
BOOST_TEST(test("x", char_, ut));
ut = false;
BOOST_TEST(test("false", bool_, ut));
ut = 123;
BOOST_TEST(test("123", int_, ut));
ut = 123.45;
BOOST_TEST(test("123.45", double_, ut));
ut = "abc";
BOOST_TEST(test("abc", string, ut));
ut = utf8_symbol_type("xyz");
BOOST_TEST(test("xyz", string, ut));
}
// sequences
{
using boost::spirit::karma::digit;
using boost::spirit::karma::repeat;
utree ut;
ut.push_back('x');
ut.push_back('y');
BOOST_TEST(test("xy", char_ << char_, ut));
ut.clear();
ut.push_back(123);
ut.push_back(456);
BOOST_TEST(test_delimited("123 456 ", int_ << int_, ut, space));
ut.clear();
ut.push_back(1.23);
ut.push_back(4.56);
BOOST_TEST(test_delimited("1.23 4.56 ", double_ << double_, ut, space));
ut.clear();
ut.push_back(1.23);
ut.push_back("ab");
BOOST_TEST(test("1.23ab", double_ << string, ut));
ut.clear();
rule<output_iterator, double()> r1 = double_;
rule<output_iterator, utree()> r2 = double_;
// ( 1.23 "a" "b" )
ut.push_back(1.23);
ut.push_back('a');
ut.push_back('b');
BOOST_TEST(test("1.23ab", double_ << *char_, ut));
BOOST_TEST(test("1.23ab", r1 << *char_, ut));
BOOST_TEST(test("1.23ab", r2 << *char_, ut));
// ( ( 1.23 ) "a" "b" )
ut.clear();
utree ut1;
ut1.push_back(1.23);
ut.push_back(ut1);
ut.push_back('a');
ut.push_back('b');
BOOST_TEST(test("1.23ab", r1 << *char_, ut));
BOOST_TEST(test("1.23ab", r2 << *char_, ut));
// ( "a" "b" 1.23 )
ut.clear();
ut.push_back('a');
ut.push_back('b');
ut.push_back(1.23);
BOOST_TEST(test("ab1.23", repeat(2)[~digit] << double_, ut));
BOOST_TEST(test("ab1.23", repeat(2)[~digit] << r1, ut));
BOOST_TEST(test("ab1.23", repeat(2)[~digit] << r2, ut));
// ( "a" "b" ( 1.23 ) )
ut.clear();
//.........这里部分代码省略.........
示例11: main
int
main()
{
using spirit_test::test;
using spirit_test::test_attr;
///////////////////////////////////////////////////////////////////////////
// signed integer tests
///////////////////////////////////////////////////////////////////////////
{
using boost::spirit::x3::int_;
int i;
BOOST_TEST(test("123456", int_));
BOOST_TEST(test_attr("123456", int_, i));
BOOST_TEST(i == 123456);
BOOST_TEST(test("+123456", int_));
BOOST_TEST(test_attr("+123456", int_, i));
BOOST_TEST(i == 123456);
BOOST_TEST(test("-123456", int_));
BOOST_TEST(test_attr("-123456", int_, i));
BOOST_TEST(i == -123456);
BOOST_TEST(test(max_int, int_));
BOOST_TEST(test_attr(max_int, int_, i));
BOOST_TEST(i == INT_MAX);
BOOST_TEST(test(min_int, int_));
BOOST_TEST(test_attr(min_int, int_, i));
BOOST_TEST(i == INT_MIN);
BOOST_TEST(!test(int_overflow, int_));
BOOST_TEST(!test_attr(int_overflow, int_, i));
BOOST_TEST(!test(int_underflow, int_));
BOOST_TEST(!test_attr(int_underflow, int_, i));
BOOST_TEST(!test("-", int_));
BOOST_TEST(!test_attr("-", int_, i));
BOOST_TEST(!test("+", int_));
BOOST_TEST(!test_attr("+", int_, i));
// Bug report from Steve Nutt
BOOST_TEST(!test_attr("5368709120", int_, i));
// with leading zeros
BOOST_TEST(test("0000000000123456", int_));
BOOST_TEST(test_attr("0000000000123456", int_, i));
BOOST_TEST(i == 123456);
}
///////////////////////////////////////////////////////////////////////////
// long long tests
///////////////////////////////////////////////////////////////////////////
{
using boost::spirit::x3::long_long;
boost::long_long_type ll;
BOOST_TEST(test("1234567890123456789", long_long));
BOOST_TEST(test_attr("1234567890123456789", long_long, ll));
BOOST_TEST(ll == 1234567890123456789LL);
BOOST_TEST(test("-1234567890123456789", long_long));
BOOST_TEST(test_attr("-1234567890123456789", long_long, ll));
BOOST_TEST(ll == -1234567890123456789LL);
BOOST_TEST(test(max_long_long, long_long));
BOOST_TEST(test_attr(max_long_long, long_long, ll));
BOOST_TEST(ll == LLONG_MAX);
BOOST_TEST(test(min_long_long, long_long));
BOOST_TEST(test_attr(min_long_long, long_long, ll));
BOOST_TEST(ll == LLONG_MIN);
BOOST_TEST(!test(long_long_overflow, long_long));
BOOST_TEST(!test_attr(long_long_overflow, long_long, ll));
BOOST_TEST(!test(long_long_underflow, long_long));
BOOST_TEST(!test_attr(long_long_underflow, long_long, ll));
}
///////////////////////////////////////////////////////////////////////////
// short_ and long_ tests
///////////////////////////////////////////////////////////////////////////
{
using boost::spirit::x3::short_;
using boost::spirit::x3::long_;
int i;
BOOST_TEST(test("12345", short_));
BOOST_TEST(test_attr("12345", short_, i));
BOOST_TEST(i == 12345);
BOOST_TEST(test("1234567890", long_));
BOOST_TEST(test_attr("1234567890", long_, i));
BOOST_TEST(i == 1234567890);
}
///////////////////////////////////////////////////////////////////////////
//.........这里部分代码省略.........
示例12: main
int
main()
{
using spirit_test::test;
using spirit_test::test_attr;
///////////////////////////////////////////////////////////////////////////////
// thousand separated numbers
///////////////////////////////////////////////////////////////////////////////
{
using boost::spirit::qi::uint_parser;
using boost::spirit::qi::parse;
uint_parser<unsigned, 10, 1, 3> uint3;
uint_parser<unsigned, 10, 3, 3> uint3_3;
#define r (uint3 >> *(',' >> uint3_3))
BOOST_TEST(test("1,234,567,890", r));
BOOST_TEST(test("12,345,678,900", r));
BOOST_TEST(test("123,456,789,000", r));
BOOST_TEST(!test("1000,234,567,890", r));
BOOST_TEST(!test("1,234,56,890", r));
BOOST_TEST(!test("1,66", r));
}
///////////////////////////////////////////////////////////////////////////////
// unsigned real number tests
///////////////////////////////////////////////////////////////////////////////
{
using boost::spirit::qi::real_parser;
using boost::spirit::qi::parse;
using boost::spirit::qi::ureal_policies;
real_parser<double, ureal_policies<double> > udouble;
double d;
BOOST_TEST(test("1234", udouble));
BOOST_TEST(test_attr("1234", udouble, d) && compare(d, 1234));
BOOST_TEST(test("1.2e3", udouble));
BOOST_TEST(test_attr("1.2e3", udouble, d) && compare(d, 1.2e3));
BOOST_TEST(test("1.2e-3", udouble));
BOOST_TEST(test_attr("1.2e-3", udouble, d) && compare(d, 1.2e-3));
BOOST_TEST(test("1.e2", udouble));
BOOST_TEST(test_attr("1.e2", udouble, d) && compare(d, 1.e2));
BOOST_TEST(test("1.", udouble));
BOOST_TEST(test_attr("1.", udouble, d) && compare(d, 1.));
BOOST_TEST(test(".2e3", udouble));
BOOST_TEST(test_attr(".2e3", udouble, d) && compare(d, .2e3));
BOOST_TEST(test("2e3", udouble));
BOOST_TEST(test_attr("2e3", udouble, d) && compare(d, 2e3));
BOOST_TEST(test("2", udouble));
BOOST_TEST(test_attr("2", udouble, d) && compare(d, 2));
using boost::math::fpclassify;
BOOST_TEST(test("inf", udouble));
BOOST_TEST(test("infinity", udouble));
BOOST_TEST(test("INF", udouble));
BOOST_TEST(test("INFINITY", udouble));
BOOST_TEST(test_attr("inf", udouble, d) && FP_INFINITE == fpclassify(d));
BOOST_TEST(test_attr("INF", udouble, d) && FP_INFINITE == fpclassify(d));
BOOST_TEST(test_attr("infinity", udouble, d) && FP_INFINITE == fpclassify(d));
BOOST_TEST(test_attr("INFINITY", udouble, d) && FP_INFINITE == fpclassify(d));
BOOST_TEST(test("nan", udouble));
BOOST_TEST(test_attr("nan", udouble, d) && FP_NAN == fpclassify(d));
BOOST_TEST(test("NAN", udouble));
BOOST_TEST(test_attr("NAN", udouble, d) && FP_NAN == fpclassify(d));
BOOST_TEST(test("nan(...)", udouble));
BOOST_TEST(test_attr("nan(...)", udouble, d) && FP_NAN == fpclassify(d));
BOOST_TEST(test("NAN(...)", udouble));
BOOST_TEST(test_attr("NAN(...)", udouble, d) && FP_NAN == fpclassify(d));
BOOST_TEST(!test("e3", udouble));
BOOST_TEST(!test_attr("e3", udouble, d));
BOOST_TEST(!test("-1.2e3", udouble));
BOOST_TEST(!test_attr("-1.2e3", udouble, d));
BOOST_TEST(!test("+1.2e3", udouble));
BOOST_TEST(!test_attr("+1.2e3", udouble, d));
BOOST_TEST(!test("1.2e", udouble));
BOOST_TEST(!test_attr("1.2e", udouble, d));
BOOST_TEST(!test("-.3", udouble));
BOOST_TEST(!test_attr("-.3", udouble, d));
}
///////////////////////////////////////////////////////////////////////////////
// signed real number tests
///////////////////////////////////////////////////////////////////////////////
//.........这里部分代码省略.........