char_class.cpp

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

CPP
171
字号
/*=============================================================================    Copyright (c) 2001-2007 Joel de Guzman    Copyright (c) 2001-2007 Hartmut Kaiser    Distributed under 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/detail/lightweight_test.hpp>#include <boost/spirit/include/qi_char.hpp>#include <boost/spirit/include/qi_action.hpp>#include <boost/spirit/include/qi_domain.hpp>#include <boost/spirit/include/support_attribute_of.hpp>#include <boost/spirit/include/support_argument.hpp>#include <boost/spirit/include/phoenix_core.hpp>#include <boost/spirit/include/phoenix_operator.hpp>#include <boost/type_traits/is_same.hpp>#include <boost/static_assert.hpp>#include <iostream>#include "test.hpp"intmain(){    using spirit_test::test;    using spirit_test::test_attr;    {        using namespace boost::spirit::ascii;        BOOST_TEST(test("1", alnum));        BOOST_TEST(!test(" ", alnum));        BOOST_TEST(!test("1", alpha));        BOOST_TEST(test("x", alpha));        BOOST_TEST(test(" ", blank));        BOOST_TEST(!test("x", blank));        BOOST_TEST(test("1", digit));        BOOST_TEST(!test("x", digit));        BOOST_TEST(test("a", lower));        BOOST_TEST(!test("A", lower));        BOOST_TEST(test("!", punct));        BOOST_TEST(!test("x", punct));        BOOST_TEST(test(" ", space));        BOOST_TEST(test("\n", space));        BOOST_TEST(test("\r", space));        BOOST_TEST(test("\t", space));        BOOST_TEST(test("A", upper));        BOOST_TEST(!test("a", upper));        BOOST_TEST(test("A", xdigit));        BOOST_TEST(test("0", xdigit));        BOOST_TEST(test("f", xdigit));        BOOST_TEST(!test("g", xdigit));    }    {        using namespace boost::spirit::iso8859_1;        BOOST_TEST(test("1", alnum));        BOOST_TEST(!test(" ", alnum));        BOOST_TEST(!test("1", alpha));        BOOST_TEST(test("x", alpha));        BOOST_TEST(test(" ", blank));        BOOST_TEST(!test("x", blank));        BOOST_TEST(test("1", digit));        BOOST_TEST(!test("x", digit));        BOOST_TEST(test("a", lower));        BOOST_TEST(!test("A", lower));        BOOST_TEST(test("!", punct));        BOOST_TEST(!test("x", punct));        BOOST_TEST(test(" ", space));        BOOST_TEST(test("\n", space));        BOOST_TEST(test("\r", space));        BOOST_TEST(test("\t", space));        BOOST_TEST(test("A", upper));        BOOST_TEST(!test("a", upper));        BOOST_TEST(test("A", xdigit));        BOOST_TEST(test("0", xdigit));        BOOST_TEST(test("f", xdigit));        BOOST_TEST(!test("g", xdigit));    }    {        using namespace boost::spirit::standard;        BOOST_TEST(test("1", alnum));        BOOST_TEST(!test(" ", alnum));        BOOST_TEST(!test("1", alpha));        BOOST_TEST(test("x", alpha));        BOOST_TEST(test(" ", blank));        BOOST_TEST(!test("x", blank));        BOOST_TEST(test("1", digit));        BOOST_TEST(!test("x", digit));        BOOST_TEST(test("a", lower));        BOOST_TEST(!test("A", lower));        BOOST_TEST(test("!", punct));        BOOST_TEST(!test("x", punct));        BOOST_TEST(test(" ", space));        BOOST_TEST(test("\n", space));        BOOST_TEST(test("\r", space));        BOOST_TEST(test("\t", space));        BOOST_TEST(test("A", upper));        BOOST_TEST(!test("a", upper));        BOOST_TEST(test("A", xdigit));        BOOST_TEST(test("0", xdigit));        BOOST_TEST(test("f", xdigit));        BOOST_TEST(!test("g", xdigit));    }    {        using namespace boost::spirit::standard_wide;        BOOST_TEST(test(L"1", alnum));        BOOST_TEST(!test(L" ", alnum));        BOOST_TEST(!test(L"1", alpha));        BOOST_TEST(test(L"x", alpha));        BOOST_TEST(test(L" ", blank));        BOOST_TEST(!test(L"x", blank));        BOOST_TEST(test(L"1", digit));        BOOST_TEST(!test(L"x", digit));        BOOST_TEST(test(L"a", lower));        BOOST_TEST(!test(L"A", lower));        BOOST_TEST(test(L"!", punct));        BOOST_TEST(!test(L"x", punct));        BOOST_TEST(test(L" ", space));        BOOST_TEST(test(L"\n", space));        BOOST_TEST(test(L"\r", space));        BOOST_TEST(test(L"\t", space));        BOOST_TEST(test(L"A", upper));        BOOST_TEST(!test(L"a", upper));        BOOST_TEST(test(L"A", xdigit));        BOOST_TEST(test(L"0", xdigit));        BOOST_TEST(test(L"f", xdigit));        BOOST_TEST(!test(L"g", xdigit));    }    {   // test attribute extraction        using boost::spirit::qi::domain;        using boost::spirit::traits::attribute_of;        using boost::spirit::iso8859_1::alpha;        using boost::spirit::iso8859_1::alpha_type;        BOOST_STATIC_ASSERT((            boost::is_same<                attribute_of<domain, alpha_type, char const*, int>::type              , char>::value));        int attr = 0;        BOOST_TEST(test_attr("a", alpha, attr));        BOOST_TEST(attr == 'a');    }    {   // test attribute extraction        using boost::spirit::iso8859_1::alpha;        using boost::spirit::iso8859_1::space;        char attr = 0;        BOOST_TEST(test_attr("     a", alpha, attr, space));        BOOST_TEST(attr == 'a');    }    {   // test action        using namespace boost::phoenix;        using namespace boost::spirit::ascii;        using boost::spirit::arg_names::_1;        char ch;        BOOST_TEST(test("x", alnum[ref(ch) = _1]));        BOOST_TEST(ch == 'x');        BOOST_TEST(test("   A", alnum[ref(ch) = _1], space));        BOOST_TEST(ch == 'A');    }    return boost::report_errors();}

⌨️ 快捷键说明

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