]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/boost/libs/spirit/workbench/karma/sequence_performance.cpp
add subtree-ish sources for 12.0.3
[ceph.git] / ceph / src / boost / libs / spirit / workbench / karma / sequence_performance.cpp
diff --git a/ceph/src/boost/libs/spirit/workbench/karma/sequence_performance.cpp b/ceph/src/boost/libs/spirit/workbench/karma/sequence_performance.cpp
new file mode 100644 (file)
index 0000000..e54febd
--- /dev/null
@@ -0,0 +1,70 @@
+//  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;
+}