parametric_tests.cpp

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

CPP
187
字号
/*=============================================================================    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>using namespace std;#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 unsignedlength(T const *p){    unsigned result = 0;    while (*p++)        ++result;    return result;}template <typename T>boolis_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;voidnarrow_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"));}voidwide_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"));}voidnarrow_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"));}voidwide_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"));}voidnarrow_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);}voidwide_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/////////////////////////////////////////////////////////////////////////////////intmain(){    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();}

⌨️ 快捷键说明

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