Sophie

Sophie

distrib > Mandriva > 9.1 > i586 > by-pkgid > b9ba69a436161613d8fb030c8c726a8e > files > 685

spirit-1.5.1-2mdk.noarch.rpm

#include <iostream>
#include <cassert>
#include <string>

using namespace std;

//#define SPIRIT_DEBUG
#include "boost/spirit/core.hpp"
#include "boost/spirit/attribute/parametric.hpp"
#include "boost/phoenix/primitives.hpp"
#include "boost/phoenix/operators.hpp"
using namespace spirit;
using namespace phoenix;

///////////////////////////////////////////////////////////////////////////////
//
//  Parametric tests
//
///////////////////////////////////////////////////////////////////////////////
void
parametric_tests()
{
    char ch;
    rule<> r = anychar_p[var(ch) = arg1] >> *fch_p(const_(ch));

    parse_info<char const*> pi;
    pi = parse("aaaaaaaaa", r);
    assert(pi.hit);
    assert(pi.full);

    pi = parse("aaaaabaaa", r);
    assert(pi.hit);
    assert(!pi.full);
    assert(string(pi.stop) == "baaa");

    char from = 'a';
    char to = 'z';

    rule<> r2 = *frange_p(const_(from), const_(to));
    pi = parse("abcdefghijklmnopqrstuvwxyz", r2);
    assert(pi.hit);
    assert(pi.full);

    pi = parse("abcdefghijklmnopqrstuvwxyz123", r2);
    assert(pi.hit);
    assert(!pi.full);
    assert(string(pi.stop) == "123");

    char const* start = "kim";
    char const* end = start + strlen(start);
    rule<> r3 = +fstr_p(const_(start), const_(end));

    pi = parse("kimkimkimkimkimkimkimkimkim", r3);
    assert(pi.hit);
    assert(pi.full);

    pi = parse("kimkimkimkimkimkimkimkimkimmama", r3);
    assert(pi.hit);
    assert(!pi.full);
    assert(string(pi.stop) == "mama");

    pi = parse("joel", r3);
    assert(!pi.hit);
}

///////////////////////////////////////////////////////////////////////////////
//
//  Main
//
///////////////////////////////////////////////////////////////////////////////
int
main()
{
    parametric_tests();
    cout << "Tests concluded successfully\n";
    return 0;
}