/*============================================================================= 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 using namespace std; #include #include #include "impl/string_length.hpp" using namespace boost::spirit; /////////////////////////////////////////////////////////////////////////////// // // 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 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 scan(pi.stop, cp_last); match 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 sp("ambalaya"); strlit 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(); }