sequence.cpp

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

CPP
132
字号
//  Copyright (c) 2001-2008 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)// #define KARMA_TEST_COMPILE_FAIL#include <boost/config/warning_disable.hpp>#include <boost/detail/lightweight_test.hpp>#include <boost/spirit/include/support_argument.hpp>#include <boost/spirit/include/karma_char.hpp>#include <boost/spirit/include/karma_string.hpp>#include <boost/spirit/include/karma_numeric.hpp>#include <boost/spirit/include/karma_generate.hpp>#include <boost/spirit/include/karma_operator.hpp>#include <boost/spirit/include/karma_directive.hpp>#include <boost/spirit/include/karma_action.hpp>#include <boost/fusion/include/vector.hpp>#include <boost/spirit/include/support_unused.hpp>#include <boost/spirit/include/phoenix_core.hpp>#include <boost/spirit/include/phoenix_operator.hpp>#include <boost/spirit/include/phoenix_statement.hpp>#include "test.hpp"using namespace spirit_test;///////////////////////////////////////////////////////////////////////////////intmain(){    using namespace boost::spirit;    namespace fusion = boost::fusion;        {        {            BOOST_TEST(test("xi", char_('x') << char_('i')));            BOOST_TEST(!test("xi", char_('x') << char_('o')));        }        {            BOOST_TEST(test_delimited("x i ", char_('x') << 'i', char(' ')));            BOOST_TEST(!test_delimited("x i ",                 char_('x') << char_('o'), char(' ')));        }        {            BOOST_TEST(test_delimited("Hello , World ",                 lit("Hello") << ',' << "World", char(' ')));        }                {            fusion::vector<char, char, std::string> p ('a', 'b', "cdefg");            BOOST_TEST(test("abcdefg", char_ << char_ << lit, p));            BOOST_TEST(test_delimited("a b cdefg ",                 char_ << char_ << lit, p, char(' ')));        }        {            fusion::vector<char, int, char> p ('a', 12, 'c');            BOOST_TEST(test("a12c", char_ << int_ << char_, p));            BOOST_TEST(test_delimited("a 12 c ",                 char_ << int_ << char_, p, char(' ')));        }        {            // if all elements of a sequence have unused parameters, the whole             // sequence has an unused parameter as well            fusion::vector<char, char> p ('a', 'e');            BOOST_TEST(test("abcde",                 char_ << (char_('b') << 'c' << 'd') << char_, p));            BOOST_TEST(test_delimited("a b c d e ",                 char_ << (char_('b') << 'c' << 'd') << char_, p, char(' ')));        }        {            // literal generators do not need a parameter            fusion::vector<char, char> p('a', 'c');            BOOST_TEST(test("abc", char_ << 'b' << char_, p));            BOOST_TEST(test_delimited("a b c ",                 char_ << 'b' << char_, p, char(' ')));        }                {            using namespace boost::spirit::ascii;                        BOOST_TEST(test("aa", lower[char_('A') << 'a']));            BOOST_TEST(test_delimited("BEGIN END ",                 upper[lit("begin") << "end"], char(' ')));            BOOST_TEST(!test_delimited("BEGIN END ",                 upper[lit("begin") << "nend"], char(' ')));            BOOST_TEST(test("Aa        ", left_align[char_('A') << 'a']));            BOOST_TEST(test("    Aa    ", center[char_('A') << 'a']));            BOOST_TEST(test("        Aa", right_align[char_('A') << 'a']));        }        // action tests        {            using namespace boost::phoenix;            using namespace boost::spirit::arg_names;            using namespace boost::spirit::ascii;            BOOST_TEST(test("abcdefg",                 (char_ << char_ << lit)[_1 = 'a', _2 = 'b', _3 = "cdefg"]));            BOOST_TEST(test_delimited("a b cdefg ",                 (char_ << char_ << lit)[_1 = 'a', _2 = 'b', _3 = "cdefg"],                 char(' ')));            BOOST_TEST(test_delimited("a 12 c ",                 (char_ << int_(12) << char_)[_1 = 'a', _2 = 'c'], char(' ')));            char c = 'c';            BOOST_TEST(test("abc",                 (char_[_1 = 'a'] << 'b' << char_)[_1 = 'x', _2 = ref(c)]));            BOOST_TEST(test_delimited("a b c ",                 (char_[_1 = 'a'] << 'b' << char_)[_2 = ref(c)], char(' ')));            BOOST_TEST(test("aa", lower[char_ << 'A'][_1 = 'A']));            BOOST_TEST(test("AA", upper[char_ << 'a'][_1 = 'a']));            BOOST_TEST(test("Aa        ", left_align[char_ << 'a'][_1 = 'A']));            BOOST_TEST(test("    Aa    ", center[char_ << 'a'][_1 = 'A']));            BOOST_TEST(test("        Aa", right_align[char_ << 'a'][_1 = 'A']));        }    }        return boost::report_errors();}

⌨️ 快捷键说明

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