--- /dev/null
+// Copyright (c) 2005-2010 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 FUSION_MAX_TUPLE_SIZE 10
+#define USE_FUSION_VECTOR
+
+#include <climits>
+
+#include <iostream>
+#include <boost/preprocessor/repeat.hpp>
+#include <boost/preprocessor/inc.hpp>
+
+#include <boost/spirit/include/karma.hpp>
+
+#include "../high_resolution_timer.hpp"
+
+///////////////////////////////////////////////////////////////////////////////
+static char const* const literal_sequences[] = {
+ "", "a", "ab", "abc", "abcd", "abcde",
+ "abcdef", "abcdefg", "abcdefgh", "abcdefghi", "abcdefgij"
+};
+
+///////////////////////////////////////////////////////////////////////////////
+#define MAX_ITERATION 10000000
+#define MAX_SEQUENCE_LENGTH 9
+#define RCHAR(z, n, _) char_((char)('a' + n)) <<
+
+#define SEQUENCE_TEST(z, N, _) \
+ { \
+ util::high_resolution_timer t; \
+ \
+ for (int i = 0; i < MAX_ITERATION; ++i) \
+ { \
+ char *ptr = buffer; \
+ generate(ptr, BOOST_PP_REPEAT(N, RCHAR, _) char_('\0')); \
+ } \
+ \
+ std::cout << "karma::sequence(" << BOOST_PP_INC(N) << "):\t" \
+ << std::setw(9) << t.elapsed() << "\t" \
+ << std::flush << std::endl; \
+ \
+ BOOST_ASSERT(std::string(buffer) == literal_sequences[N]); \
+ } \
+ /**/
+
+// double elapsed = t.elapsed(); \
+// for (int i = 0; i < MAX_ITERATION; ++i) \
+// { \
+// char *ptr = buffer; \
+// generate(ptr, lit(literal_sequences[N]) << char_('\0')); \
+// } \
+// \
+// t.restart(); \
+// \
+// << std::setw(9) << elapsed << " [s]" \
+
+///////////////////////////////////////////////////////////////////////////////
+int main()
+{
+ using namespace boost::spirit::karma;
+ using namespace boost::spirit::ascii;
+ char buffer[512]; // we don't expect more than 512 bytes to be generated here
+
+ std::cout << "Benchmarking sequence of different length: " << std::endl;
+ BOOST_PP_REPEAT_FROM_TO(1, MAX_SEQUENCE_LENGTH, SEQUENCE_TEST, _);
+
+ return 0;
+}