Sophie

Sophie

distrib > Mandriva > 9.1 > ppc > by-pkgid > b9ba69a436161613d8fb030c8c726a8e > files > 686

spirit-1.5.1-2mdk.noarch.rpm

#include <iostream>
#include <cassert>

using namespace std;

//#define SPIRIT_DEBUG
#include "boost/spirit/core.hpp"
using namespace spirit;

///////////////////////////////////////////////////////////////////////////////
//
//  Primitives tests
//
///////////////////////////////////////////////////////////////////////////////
void
primitives_tests()
{
    char const* cp = "xyz.Jambalaya";
    char const* cp_first = cp;
    char const* cp_last = cp + strlen(cp);

    chlit<> cpx('x');
    parse_info<char const*> pi = parse(cp_first, cp_last, cpx);
    assert(pi.hit);
    assert(!pi.full);
    assert(pi.length == 1);
    assert(pi.stop == &cp[1]);

    pi = parse(pi.stop, ch_p('y'));
    assert(pi.hit);
    assert(!pi.full);
    assert(pi.length == 1);
    assert(pi.stop == &cp[2]);

    scanner<char const*> scan(pi.stop, cp_last);
    match<char> hit = ch_p('z').parse(scan);
    assert(hit);
    assert(hit.value() == 'z');
    assert(pi.stop == &cp[3]);

    pi = parse(pi.stop, eps_p);
    assert(pi.hit);
    assert(!pi.full);
    assert(pi.length == 0);
    assert(pi.stop == &cp[3]);

    pi = parse(pi.stop, nothing_p);
    assert(!pi.hit);
    assert(!pi.full);
    assert(pi.stop == &cp[3]);

    pi = parse(pi.stop, anychar_p);
    assert(pi.hit);
    assert(!pi.full);
    assert(pi.length == 1);
    assert(pi.stop == &cp[4]);

    scan.first = pi.stop;
    hit = range_p('A','Z').parse(scan);
    assert(hit);
    assert(hit.value() == 'J');
    assert(pi.stop == &cp[5]);

    strlit<char const*>     sp("ambalaya");
    strlit<wchar_t const*>  wsp(L"ambalaya");

    char const* save = pi.stop;
    pi = parse(save, sp);
    assert(pi.hit);
    assert(pi.full);
    assert(pi.length == 8);
    assert(pi.stop == cp_last);

    pi = parse(save, wsp);
    assert(pi.hit);
    assert(pi.full);
    assert(pi.length == 8);
    assert(pi.stop == cp_last);

    pi = parse("\n", eol_p);
    assert(pi.hit);
    assert(pi.full);

    pi = parse("\r", eol_p);
    assert(pi.hit);
    assert(pi.full);

    pi = parse("\r\n", eol_p);
    assert(pi.hit);
    assert(pi.full);

    pi = parse("\n\r", eol_p);
    assert(pi.hit);
    assert(!pi.full);

    pi = parse("", end_p);
    assert(pi.hit);
    assert(pi.full);
}

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