loops_tests.cpp

来自「Boost provides free peer-reviewed portab」· C++ 代码 · 共 122 行

CPP
122
字号
/*=============================================================================    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;//#define BOOST_SPIRIT_DEBUG#include <boost/spirit/include/classic_core.hpp>#include <boost/spirit/include/classic_loops.hpp>using namespace BOOST_SPIRIT_CLASSIC_NS;///////////////////////////////////////////////////////////////////////////////////  Loops tests/////////////////////////////////////////////////////////////////////////////////voidloops_tests(){    parse_info<char const*> pi;    pi = parse("\"Hello World\"", "\"" >> *(anychar_p - "\"") >> "\"");    BOOST_TEST(pi.hit);    BOOST_TEST(pi.full);    BOOST_TEST(pi.length == 13);    BOOST_TEST(*pi.stop == 0);    pi = parse("\"Hello World\"", "\"" >> repeat_p(0, more)[anychar_p - "\""] >> "\"");    BOOST_TEST(pi.hit);    BOOST_TEST(pi.full);    BOOST_TEST(pi.length == 13);    BOOST_TEST(*pi.stop == 0);    pi = parse("xx", +ch_p('x'));    BOOST_TEST(pi.hit);    BOOST_TEST(pi.full);    BOOST_TEST(pi.length == 2);    BOOST_TEST(*pi.stop == 0);    pi = parse("xx", repeat_p(1, more)[ch_p('x')]);    BOOST_TEST(pi.hit);    BOOST_TEST(pi.full);    BOOST_TEST(pi.length == 2);    BOOST_TEST(*pi.stop == 0);    pi = parse("", +ch_p('x'));    BOOST_TEST(!pi.hit);    pi = parse("", repeat_p(1, more)[ch_p('x')]);    BOOST_TEST(!pi.hit);    pi = parse("", *ch_p('x'));    BOOST_TEST(pi.hit);    BOOST_TEST(pi.full);    BOOST_TEST(pi.length == 0);    BOOST_TEST(*pi.stop == 0);    pi = parse("", repeat_p(0, more)[ch_p('x')]);    BOOST_TEST(pi.hit);    BOOST_TEST(pi.full);    BOOST_TEST(pi.length == 0);    BOOST_TEST(*pi.stop == 0);    //  repeat exact 8    rule<>  rep8 = repeat_p(8)[alpha_p] >> 'X';    BOOST_TEST(!parse("abcdefgX", rep8).hit);    BOOST_TEST(parse("abcdefghX", rep8).full);    BOOST_TEST(!parse("abcdefghiX", rep8).hit);    BOOST_TEST(!parse("abcdefgX", rep8).hit);    BOOST_TEST(!parse("aX", rep8).hit);    //  repeat 2 to 8    rule<>  rep28 = repeat_p(2, 8)[alpha_p] >> '*';    BOOST_TEST(parse("abcdefg*", rep28).full);    BOOST_TEST(parse("abcdefgh*", rep28).full);    BOOST_TEST(!parse("abcdefghi*", rep28).hit);    BOOST_TEST(!parse("a*", rep28).hit);    //  repeat 2 or more    rule<>  rep2_ = repeat_p(2, more)[alpha_p] >> '+';    BOOST_TEST(parse("abcdefg+", rep2_).full);    BOOST_TEST(parse("abcdefgh+", rep2_).full);    BOOST_TEST(parse("abcdefghi+", rep2_).full);    BOOST_TEST(parse("abcdefg+", rep2_).full);    BOOST_TEST(!parse("a+", rep2_).hit);    //  repeat 0    rule<>  rep0 = repeat_p(0)[alpha_p] >> '/';    BOOST_TEST(parse("/", rep0).full);    BOOST_TEST(!parse("a/", rep0).hit);    //  repeat 0 or 1    rule<>  rep01 = repeat_p(0, 1)[alpha_p >> digit_p] >> '?';    BOOST_TEST(!parse("abcdefg?", rep01).hit);    BOOST_TEST(!parse("a?", rep01).hit);    BOOST_TEST(!parse("1?", rep01).hit);    BOOST_TEST(!parse("11?", rep01).hit);    BOOST_TEST(!parse("aa?", rep01).hit);    BOOST_TEST(parse("?", rep01).full);    BOOST_TEST(parse("a1?", rep01).full);}///////////////////////////////////////////////////////////////////////////////////  Main/////////////////////////////////////////////////////////////////////////////////intmain(){    loops_tests();    return boost::report_errors();}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?