e46e58f4cd
Not intrusive. Significantly speeds up tests on MSVC (for about 3 times). Finally solves exceeding build time limits on CI with MSVC compilers. Did not set up PCH for X3, it is fast as-is (tooks only about 2 minutes). Repository tests reuse PCH from Qi/Karma tests.
165 lines
4.4 KiB
C++
165 lines
4.4 KiB
C++
/*=============================================================================
|
|
Copyright (c) 1998-2003 Joel de Guzman
|
|
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>
|
|
|
|
using namespace std;
|
|
|
|
#include <boost/spirit/include/classic_core.hpp>
|
|
using namespace BOOST_SPIRIT_CLASSIC_NS;
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Operators tests
|
|
//
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
void
|
|
operators_tests()
|
|
{
|
|
parse_info<char const*> pi;
|
|
|
|
pi = parse("Hello World", str_p("Hello ") >> "World");
|
|
BOOST_TEST(pi.hit);
|
|
BOOST_TEST(pi.full);
|
|
BOOST_TEST(pi.length == 11);
|
|
BOOST_TEST(*pi.stop == 0);
|
|
|
|
pi = parse("Banana", str_p("Banana") | "Pineapple");
|
|
BOOST_TEST(pi.hit);
|
|
BOOST_TEST(pi.full);
|
|
BOOST_TEST(pi.length == 6);
|
|
BOOST_TEST(*pi.stop == 0);
|
|
|
|
pi = parse("Pineapple", str_p("Banana") | "Pineapple");
|
|
BOOST_TEST(pi.hit);
|
|
BOOST_TEST(pi.full);
|
|
BOOST_TEST(pi.length == 9);
|
|
BOOST_TEST(*pi.stop == 0);
|
|
|
|
pi = parse("a.2 ", alpha_p || ('.' >> digit_p));
|
|
BOOST_TEST(pi.hit);
|
|
BOOST_TEST(pi.length == 3);
|
|
|
|
pi = parse("a ", alpha_p || ('.' >> digit_p));
|
|
BOOST_TEST(pi.hit);
|
|
BOOST_TEST(pi.length == 1);
|
|
|
|
pi = parse(".1 ", alpha_p || ('.' >> digit_p));
|
|
BOOST_TEST(pi.hit);
|
|
BOOST_TEST(pi.length == 2);
|
|
|
|
pi = parse("1.a ", alpha_p || ('.' >> digit_p));
|
|
BOOST_TEST(!pi.hit);
|
|
|
|
pi = parse("abcdefghij", +xdigit_p & +alpha_p);
|
|
BOOST_TEST(pi.hit);
|
|
BOOST_TEST(pi.length == 6);
|
|
|
|
pi = parse("abcdefghij", +alpha_p & +xdigit_p);
|
|
BOOST_TEST(!pi.hit);
|
|
|
|
pi = parse("abcdefghij", +digit_p & +alpha_p);
|
|
BOOST_TEST(!pi.hit);
|
|
|
|
pi = parse("abcdefghij", +alpha_p & +digit_p);
|
|
BOOST_TEST(!pi.hit);
|
|
|
|
// Test for bug reported by Yusaku Sugai here:
|
|
// http://article.gmane.org/gmane.comp.parsers.spirit.general/8544
|
|
pi = parse( "foo", (anychar_p & anychar_p), ch_p(' ') );
|
|
BOOST_TEST(pi.hit);
|
|
|
|
pi = parse("F", xdigit_p - range_p('5','8'));
|
|
BOOST_TEST(pi.hit);
|
|
BOOST_TEST(pi.length == 1);
|
|
|
|
pi = parse("0", xdigit_p - range_p('5','8'));
|
|
BOOST_TEST(pi.hit);
|
|
BOOST_TEST(pi.length == 1);
|
|
|
|
pi = parse("4", xdigit_p - range_p('5','8'));
|
|
BOOST_TEST(pi.hit);
|
|
BOOST_TEST(pi.length == 1);
|
|
|
|
pi = parse("9", xdigit_p - range_p('5','8'));
|
|
BOOST_TEST(pi.hit);
|
|
BOOST_TEST(pi.length == 1);
|
|
|
|
pi = parse("5", xdigit_p - range_p('5','8'));
|
|
BOOST_TEST(!pi.hit);
|
|
|
|
pi = parse("7", xdigit_p - range_p('5','8'));
|
|
BOOST_TEST(!pi.hit);
|
|
|
|
pi = parse("x*/", anychar_p - "*/");
|
|
BOOST_TEST(pi.hit);
|
|
BOOST_TEST(pi.length == 1);
|
|
|
|
pi = parse("*/", anychar_p - "*/");
|
|
BOOST_TEST(!pi.hit);
|
|
|
|
pi = parse("switcher ", str_p("switcher") - "switch");
|
|
BOOST_TEST(pi.hit);
|
|
BOOST_TEST(pi.length == 8);
|
|
|
|
pi = parse("Z", alpha_p ^ xdigit_p);
|
|
BOOST_TEST(pi.hit);
|
|
BOOST_TEST(pi.length == 1);
|
|
|
|
pi = parse("1", alpha_p ^ xdigit_p);
|
|
BOOST_TEST(pi.hit);
|
|
BOOST_TEST(pi.length == 1);
|
|
|
|
pi = parse("B", alpha_p ^ xdigit_p);
|
|
BOOST_TEST(!pi.hit);
|
|
|
|
pi = parse("B", !alpha_p);
|
|
BOOST_TEST(pi.hit);
|
|
BOOST_TEST(pi.length == 1);
|
|
|
|
pi = parse("1", !alpha_p);
|
|
BOOST_TEST(pi.hit);
|
|
BOOST_TEST(pi.length == 0);
|
|
BOOST_TEST(*pi.stop == '1');
|
|
|
|
pi = parse("1234 5678 1234 5678", *(+digit_p >> *space_p));
|
|
BOOST_TEST(pi.hit);
|
|
BOOST_TEST(pi.full);
|
|
BOOST_TEST(pi.length == 19);
|
|
BOOST_TEST(*pi.stop == 0);
|
|
|
|
pi = parse("abcdefghijklmnopqrstuvwxyz123", *alpha_p);
|
|
BOOST_TEST(pi.hit);
|
|
BOOST_TEST(pi.length == 26);
|
|
|
|
pi = parse("1234+5678*1234/5678", +digit_p % (ch_p('+') | '*' | '/'));
|
|
BOOST_TEST(pi.hit);
|
|
BOOST_TEST(pi.full);
|
|
BOOST_TEST(pi.length == 19);
|
|
BOOST_TEST(*pi.stop == 0);
|
|
|
|
pi = parse("1234+", +digit_p % '+');
|
|
BOOST_TEST(pi.hit);
|
|
BOOST_TEST(!pi.full);
|
|
BOOST_TEST(pi.length == 4);
|
|
}
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Main
|
|
//
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
int
|
|
main()
|
|
{
|
|
operators_tests();
|
|
return boost::report_errors();
|
|
}
|
|
|