#include <iostream> #include <cassert> using namespace std; //#define SPIRIT_DEBUG #include "boost/spirit/core.hpp" using namespace spirit; /////////////////////////////////////////////////////////////////////////////// // // Rule tests // /////////////////////////////////////////////////////////////////////////////// void rule_tests() { rule<> a = ch_p('a'); rule<> b = ch_p('b'); rule<> c = ch_p('c'); SPIRIT_DEBUG_RULE(a); SPIRIT_DEBUG_RULE(b); SPIRIT_DEBUG_RULE(c); parse_info<char const*> pi; rule<> start = *(a | b | c); SPIRIT_DEBUG_RULE(start); pi = parse("abcabcacb", start); assert(pi.hit); assert(pi.full); assert(pi.length == 9); assert(*pi.stop == 0); start = (a | b) >> (start | b); pi = parse("aaaabababaaabbb", start); assert(pi.hit); assert(pi.full); assert(pi.length == 15); assert(*pi.stop == 0); pi = parse("aaaabababaaabba", start); assert(pi.hit); assert(!pi.full); assert(pi.length == 14); } /////////////////////////////////////////////////////////////////////////////// // // Main // /////////////////////////////////////////////////////////////////////////////// int main() { rule_tests(); cout << "Tests concluded successfully\n"; return 0; }