123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185 |
- /*=============================================================================
- Copyright (c) 2001-2003 Joel de Guzman
- Copyright (c) 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/detail/lightweight_test.hpp>
- #include <string>
- #include <boost/spirit/include/classic_core.hpp>
- #include <boost/spirit/include/classic_parametric.hpp>
- #include <boost/spirit/include/phoenix1_primitives.hpp>
- #include <boost/spirit/include/phoenix1_operators.hpp>
- using namespace BOOST_SPIRIT_CLASSIC_NS;
- using namespace phoenix;
- #include <boost/detail/lightweight_test.hpp>
- ///////////////////////////////////////////////////////////////////////////////
- //
- // Parametric tests
- //
- ///////////////////////////////////////////////////////////////////////////////
- template <typename T>
- static unsigned
- length(T const *p)
- {
- unsigned result = 0;
- while (*p++)
- ++result;
- return result;
- }
- template <typename T>
- bool
- is_equal(T const* a, T const* b)
- {
- while (*a && *b)
- if (*a++ != *b++)
- return false;
- return true;
- }
- typedef rule< scanner<wchar_t const *> > wrule_t;
- void
- narrow_f_ch_p()
- {
- char ch;
- rule<> r = anychar_p[var(ch) = arg1] >> *f_ch_p(const_(ch));
- parse_info<char const*> pi;
- pi = parse("aaaaaaaaa", r);
- BOOST_TEST(pi.hit);
- BOOST_TEST(pi.full);
- pi = parse("aaaaabaaa", r);
- BOOST_TEST(pi.hit);
- BOOST_TEST(!pi.full);
- BOOST_TEST(is_equal(pi.stop, "baaa"));
- }
- void
- wide_f_ch_p()
- {
- wchar_t ch;
- wrule_t r = anychar_p[var(ch) = arg1] >> *f_ch_p(const_(ch));
- parse_info<wchar_t const*> pi;
- pi = parse(L"aaaaaaaaa", r);
- BOOST_TEST(pi.hit);
- BOOST_TEST(pi.full);
- pi = parse(L"aaaaabaaa", r);
- BOOST_TEST(pi.hit);
- BOOST_TEST(!pi.full);
- BOOST_TEST(is_equal(pi.stop, L"baaa"));
- }
- void
- narrow_f_range_p()
- {
- char from = 'a';
- char to = 'z';
- parse_info<char const*> pi;
- rule<> r2 = *f_range_p(const_(from), const_(to));
- pi = parse("abcdefghijklmnopqrstuvwxyz", r2);
- BOOST_TEST(pi.hit);
- BOOST_TEST(pi.full);
- pi = parse("abcdefghijklmnopqrstuvwxyz123", r2);
- BOOST_TEST(pi.hit);
- BOOST_TEST(!pi.full);
- BOOST_TEST(is_equal(pi.stop, "123"));
- }
- void
- wide_f_range_p()
- {
- wchar_t from = L'a';
- wchar_t to = L'z';
- parse_info<wchar_t const*> pi;
- wrule_t r2 = *f_range_p(const_(from), const_(to));
- pi = parse(L"abcdefghijklmnopqrstuvwxyz", r2);
- BOOST_TEST(pi.hit);
- BOOST_TEST(pi.full);
- pi = parse(L"abcdefghijklmnopqrstuvwxyz123", r2);
- BOOST_TEST(pi.hit);
- BOOST_TEST(!pi.full);
- BOOST_TEST(is_equal(pi.stop, L"123"));
- }
- void
- narrow_f_str_p()
- {
- parse_info<char const*> pi;
- char const* start = "kim";
- char const* end = start + length(start);
- rule<> r3 = +f_str_p(const_(start), const_(end));
- pi = parse("kimkimkimkimkimkimkimkimkim", r3);
- BOOST_TEST(pi.hit);
- BOOST_TEST(pi.full);
- pi = parse("kimkimkimkimkimkimkimkimkimmama", r3);
- BOOST_TEST(pi.hit);
- BOOST_TEST(!pi.full);
- BOOST_TEST(is_equal(pi.stop, "mama"));
- pi = parse("joel", r3);
- BOOST_TEST(!pi.hit);
- }
- void
- wide_f_str_p()
- {
- parse_info<wchar_t const*> pi;
- wchar_t const* start = L"kim";
- wchar_t const* end = start + length(start);
- wrule_t r3 = +f_str_p(const_(start), const_(end));
- pi = parse(L"kimkimkimkimkimkimkimkimkim", r3);
- BOOST_TEST(pi.hit);
- BOOST_TEST(pi.full);
- pi = parse(L"kimkimkimkimkimkimkimkimkimmama", r3);
- BOOST_TEST(pi.hit);
- BOOST_TEST(!pi.full);
- BOOST_TEST(is_equal(pi.stop, L"mama"));
- pi = parse(L"joel", r3);
- BOOST_TEST(!pi.hit);
- }
- ///////////////////////////////////////////////////////////////////////////////
- //
- // test suite
- //
- ///////////////////////////////////////////////////////////////////////////////
- int
- main()
- {
- narrow_f_ch_p();
- wide_f_ch_p();
- narrow_f_range_p();
- wide_f_range_p();
- narrow_f_str_p();
- wide_f_str_p();
- return boost::report_errors();
- }
|