blob: 4f423000adc848cc75c776189bddb154ae9e461a [file] [log] [blame]
/*=============================================================================
Copyright (c) 1998-2003 Joel de Guzman
Copyright (c) 2002-2003 Martin Wille
http://spirit.sourceforge.net/
Use, modification and distribution is subject to the Boost Software
License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
http://www.boost.org/LICENSE_1_0.txt)
=============================================================================*/
#include <iostream>
using namespace std;
#include <boost/spirit/include/classic_core.hpp>
#include <boost/detail/lightweight_test.hpp>
#include "impl/string_length.hpp"
using namespace BOOST_SPIRIT_CLASSIC_NS;
///////////////////////////////////////////////////////////////////////////////
//
// Primitives tests
//
///////////////////////////////////////////////////////////////////////////////
void
primitives_tests()
{
char const* cp = "xyz.Jambalaya";
char const* cp_first = cp;
char const* cp_last = cp + test_impl::string_length(cp);
chlit<> cpx('x');
parse_info<char const*> pi = parse(cp_first, cp_last, cpx);
BOOST_TEST(pi.hit);
BOOST_TEST(!pi.full);
BOOST_TEST(pi.length == 1);
BOOST_TEST(pi.stop == &cp[1]);
pi = parse(pi.stop, ch_p('y'));
BOOST_TEST(pi.hit);
BOOST_TEST(!pi.full);
BOOST_TEST(pi.length == 1);
BOOST_TEST(pi.stop == &cp[2]);
scanner<char const*> scan(pi.stop, cp_last);
match<char> hit = ch_p('z').parse(scan);
BOOST_TEST(hit);
BOOST_TEST(hit.value() == 'z');
BOOST_TEST(pi.stop == &cp[3]);
pi = parse(pi.stop, eps_p);
BOOST_TEST(pi.hit);
BOOST_TEST(!pi.full);
BOOST_TEST(pi.length == 0);
BOOST_TEST(pi.stop == &cp[3]);
pi = parse(pi.stop, nothing_p);
BOOST_TEST(!pi.hit);
BOOST_TEST(!pi.full);
BOOST_TEST(pi.stop == &cp[3]);
pi = parse(pi.stop, anychar_p);
BOOST_TEST(pi.hit);
BOOST_TEST(!pi.full);
BOOST_TEST(pi.length == 1);
BOOST_TEST(pi.stop == &cp[4]);
scan.first = pi.stop;
hit = range_p('A','Z').parse(scan);
BOOST_TEST(hit);
BOOST_TEST(hit.value() == 'J');
BOOST_TEST(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);
BOOST_TEST(pi.hit);
BOOST_TEST(pi.full);
BOOST_TEST(pi.length == 8);
BOOST_TEST(pi.stop == cp_last);
pi = parse(save, wsp);
BOOST_TEST(pi.hit);
BOOST_TEST(pi.full);
BOOST_TEST(pi.length == 8);
BOOST_TEST(pi.stop == cp_last);
pi = parse("\n", eol_p);
BOOST_TEST(pi.hit);
BOOST_TEST(pi.full);
pi = parse("\r", eol_p);
BOOST_TEST(pi.hit);
BOOST_TEST(pi.full);
pi = parse("\r\n", eol_p);
BOOST_TEST(pi.hit);
BOOST_TEST(pi.full);
pi = parse("\n\r", eol_p);
BOOST_TEST(pi.hit);
BOOST_TEST(!pi.full);
pi = parse("", end_p);
BOOST_TEST(pi.hit);
BOOST_TEST(pi.full);
pi = parse("1", ~alpha_p);
BOOST_TEST(pi.hit);
BOOST_TEST(pi.full);
pi = parse("a", ~alpha_p);
BOOST_TEST(!pi.hit);
pi = parse("a", ~~alpha_p);
BOOST_TEST(pi.hit);
BOOST_TEST(pi.full);
pi = parse("1", ~~alpha_p);
BOOST_TEST(!pi.hit);
}
///////////////////////////////////////////////////////////////////////////////
//
// Main
//
///////////////////////////////////////////////////////////////////////////////
int
main()
{
primitives_tests();
if (boost::report_errors() == 0)
cout << "Tests concluded successfully\n";
return boost::report_errors();
}