123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 |
- /*=============================================================================
- 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>
- #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)
- std::cout << "Tests concluded successfully\n";
- return boost::report_errors();
- }
|