distinct_tests.cpp

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

CPP
249
字号
/*=============================================================================    Copyright (c) 2003 Vaclav Vesely    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 <boost/spirit/include/classic_core.hpp>#include <boost/spirit/include/classic_distinct.hpp>#include <boost/detail/lightweight_test.hpp>using namespace boost;using namespace BOOST_SPIRIT_CLASSIC_NS;typedef    scanner<char const*, scanner_policies<skipper_iteration_policy<> > >        scanner_t;typedef    rule<scanner_t>        rule_t;void distinct_parser_test(){    // distinct_parser()    {        distinct_parser<> distinct_p;        // operator()(CharT const* str) const        rule_t r = distinct_p("keyword") >> !ch_p('-') >> int_p;        BOOST_TEST(parse("keyword123", r, space_p).full);    }    // distinct_parser(CharT const* letters)    {        distinct_parser<> distinct_p("0-9a-zA-Z_");        // operator()(CharT const* str) const        rule_t r = distinct_p("keyword") >> !ch_p('-') >> int_p;        BOOST_TEST(parse("keyword 123", r, space_p).full);        BOOST_TEST(parse("keyword-123", r, space_p).full);        BOOST_TEST(!parse("keyword123", r, space_p).hit);    }    // distinct_parser(parser<TailT> const & tail_)    {        distinct_parser<            char,            alternative<                alnum_parser,                sequence<                    chlit<>,                    negated_char_parser<chlit<> >                >            >        >            distinct_p(alnum_p | ('-' >> ~ch_p('-')));        // operator()(CharT const* str) const        rule_t r = distinct_p("keyword") >> !str_p("--") >> int_p;        BOOST_TEST(parse("keyword 123", r, space_p).full);        BOOST_TEST(parse("keyword--123", r, space_p).full);        BOOST_TEST(!parse("keyword-123", r, space_p).hit);    }}void distinct_directive_test(){    // distinct_directive()    {        distinct_directive<> distinct_d;        // operator[](CharT const* str) const        {            rule_t r = distinct_d["keyword"] >> !ch_p('-') >> int_p;            BOOST_TEST(parse("keyword123", r, space_p).full);        }        // operator[](parser<ParserT> const &subject) const        {            rule_t r = distinct_d[str_p("keyword")] >> !ch_p('-') >> int_p;            BOOST_TEST(parse("keyword123", r, space_p).full);        }    }    // distinct_directive(CharT const* letters)    {        distinct_directive<> distinct_d("0-9a-zA-Z_");        // operator[](CharT const* str) const        {            rule_t r = distinct_d["keyword"] >> !ch_p('-') >> int_p;            BOOST_TEST(parse("keyword 123", r, space_p).full);            BOOST_TEST(parse("keyword-123", r, space_p).full);            BOOST_TEST(!parse("keyword123", r, space_p).hit);        }        // operator[](parser<ParserT> const &subject) const        {            rule_t r = distinct_d[str_p("keyword")] >> !ch_p('-') >> int_p;            BOOST_TEST(parse("keyword 123", r, space_p).full);            BOOST_TEST(parse("keyword-123", r, space_p).full);            BOOST_TEST(!parse("keyword123", r, space_p).hit);        }    }    // distinct_directive(parser<TailT> const & tail_)    {        distinct_directive<            char,            alternative<                alnum_parser,                sequence<                    chlit<>,                    negated_char_parser<chlit<> >                >            >        >            distinct_d(alnum_p | ('-' >> ~ch_p('-')));        // operator[](CharT const* str) const        {            rule_t r = distinct_d["keyword"] >> !str_p("--") >> int_p;            BOOST_TEST(parse("keyword 123", r, space_p).full);            BOOST_TEST(parse("keyword--123", r, space_p).full);            BOOST_TEST(!parse("keyword-123", r, space_p).hit);        }        // operator[](parser<ParserT> const &subject) const        {            rule_t r = distinct_d[str_p("keyword")] >> !str_p("--") >> int_p;            BOOST_TEST(parse("keyword 123", r, space_p).full);            BOOST_TEST(parse("keyword--123", r, space_p).full);            BOOST_TEST(!parse("keyword-123", r, space_p).hit);        }    }}void dynamic_distinct_parser_test(){    // dynamic_distinct_parser()    {        dynamic_distinct_parser<scanner_t> distinct_p;        // operator()(CharT const* str) const        rule_t r = distinct_p("keyword") >> !ch_p('-') >> int_p;        BOOST_TEST(parse("keyword123", r, space_p).full);    }    // dynamic_distinct_parser(CharT const* letters)    {        dynamic_distinct_parser<scanner_t> distinct_p("0-9a-zA-Z_");        // operator()(CharT const* str) const        rule_t r = distinct_p("keyword") >> !ch_p('-') >> int_p;        BOOST_TEST(parse("keyword 123", r, space_p).full);        BOOST_TEST(parse("keyword-123", r, space_p).full);        BOOST_TEST(!parse("keyword123", r, space_p).hit);    }    // dynamic_distinct_parser(parser<TailT> const & tail_)    {        dynamic_distinct_parser<scanner_t>            distinct_p(alnum_p | ('-' >> ~ch_p('-')));        // operator()(CharT const* str) const        rule_t r = distinct_p("keyword") >> !str_p("--") >> int_p;        BOOST_TEST(parse("keyword 123", r, space_p).full);        BOOST_TEST(parse("keyword--123", r, space_p).full);        BOOST_TEST(!parse("keyword-123", r, space_p).hit);    }}void dynamic_distinct_directive_test(){    // dynamic_distinct_directive()    {        dynamic_distinct_directive<scanner_t> distinct_d;        // operator[](CharT const* str) const        {            rule_t r = distinct_d["keyword"] >> !ch_p('-') >> int_p;            BOOST_TEST(parse("keyword123", r, space_p).full);        }        // operator[](parser<ParserT> const &subject) const        {            rule_t r = distinct_d[str_p("keyword")] >> !ch_p('-') >> int_p;            BOOST_TEST(parse("keyword123", r, space_p).full);        }    }    // dynamic_distinct_directive(CharT const* letters)    {        dynamic_distinct_directive<scanner_t> distinct_d("0-9a-zA-Z_");        // operator[](CharT const* str) const        {            rule_t r = distinct_d["keyword"] >> !ch_p('-') >> int_p;            BOOST_TEST(parse("keyword 123", r, space_p).full);            BOOST_TEST(parse("keyword-123", r, space_p).full);            BOOST_TEST(!parse("keyword123", r, space_p).hit);        }        // operator[](parser<ParserT> const &subject) const        {            rule_t r = distinct_d[str_p("keyword")] >> !ch_p('-') >> int_p;            BOOST_TEST(parse("keyword 123", r, space_p).full);            BOOST_TEST(parse("keyword-123", r, space_p).full);            BOOST_TEST(!parse("keyword123", r, space_p).hit);        }    }    // dynamic_distinct_directive(parser<TailT> const & tail_)    {        dynamic_distinct_directive<scanner_t>            distinct_d(alnum_p | ('-' >> ~ch_p('-')));        // operator[](CharT const* str) const        {            rule_t r = distinct_d["keyword"] >> !str_p("--") >> int_p;            BOOST_TEST(parse("keyword 123", r, space_p).full);            BOOST_TEST(parse("keyword--123", r, space_p).full);            BOOST_TEST(!parse("keyword-123", r, space_p).hit);        }        // operator[](parser<ParserT> const &subject) const        {            rule_t r = distinct_d[str_p("keyword")] >> !str_p("--") >> int_p;            BOOST_TEST(parse("keyword 123", r, space_p).full);            BOOST_TEST(parse("keyword--123", r, space_p).full);            BOOST_TEST(!parse("keyword-123", r, space_p).hit);        }    }}intmain(){    distinct_parser_test();    distinct_directive_test();    dynamic_distinct_parser_test();    dynamic_distinct_directive_test();    return boost::report_errors();}

⌨️ 快捷键说明

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