1 // Copyright (c) 2013 Louis Dionne
2 // Copyright (c) 2001-2013 Hartmut Kaiser
3 //
4 // Distributed under the Boost Software License, Version 1.0. (See accompanying
5 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6
7 #include <boost/config/warning_disable.hpp>
8 #include <boost/detail/lightweight_test.hpp>
9
10 #include <boost/range/adaptor/transformed.hpp>
11 #include <boost/spirit/include/karma.hpp>
12
13 #include <iostream>
14
15 // Note how the return is made by value instead of by reference.
identity(T const & t)16 template <typename T> T identity(T const& t) { return t; }
17
18 template <typename Char, typename Expr, typename CopyExpr, typename CopyAttr
19 , typename Delimiter, typename Attribute>
test(Char const * expected,boost::spirit::karma::detail::format_manip<Expr,CopyExpr,CopyAttr,Delimiter,Attribute> const & fm)20 bool test(Char const *expected,
21 boost::spirit::karma::detail::format_manip<
22 Expr, CopyExpr, CopyAttr, Delimiter, Attribute> const& fm)
23 {
24 std::ostringstream ostrm;
25 ostrm << fm;
26 return ostrm.good() && ostrm.str() == expected;
27 }
28
main()29 int main()
30 {
31 namespace karma = boost::spirit::karma;
32 namespace adaptors = boost::adaptors;
33 int ints[] = {0, 1, 2, 3, 4};
34
35 BOOST_TEST((test("0 1 2 3 4",
36 karma::format(karma::int_ % ' ',
37 ints | adaptors::transformed(&identity<int>)))
38 ));
39
40 return boost::report_errors();
41 }
42
43