]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/spirit/workbench/karma/double_performance.cpp
1 // Copyright (c) 2002-2010 Hartmut Kaiser
2 // Copyright (c) 2002-2010 Joel de Guzman
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)
7 #include <boost/config/warning_disable.hpp>
8 #include <boost/spirit/include/karma.hpp>
9 #include <boost/format.hpp>
13 #include "../high_resolution_timer.hpp"
15 #define NUMITERATIONS 1000000
17 ///////////////////////////////////////////////////////////////////////////////
18 // We generate plain floating point numbers in this test
19 //[karma_double_performance_definitions
20 using boost::spirit::karma::double_
;
23 void format_performance_karma()
25 using boost::spirit::karma::generate
;
27 //[karma_double_performance_plain
30 util::high_resolution_timer t
;
32 for (int i
= 0; i
< NUMITERATIONS
; ++i
) {
34 generate(p
, double_
, 12345.12345);
39 std::cout
<< "karma:\t\t" << t
.elapsed() << std::endl
;
40 // std::cout << buffer << std::endl;
43 void format_performance_rule()
45 using boost::spirit::karma::generate
;
47 boost::spirit::karma::rule
<char*, double()> r
;
49 //[karma_double_performance_rule
53 util::high_resolution_timer t
;
55 for (int i
= 0; i
< NUMITERATIONS
; ++i
) {
57 generate(p
, r
, 12345.12345);
62 std::cout
<< "karma (rule):\t" << t
.elapsed() << std::endl
;
63 // std::cout << buffer << std::endl;
66 void format_performance_direct()
68 using boost::spirit::karma::generate
;
69 using boost::spirit::karma::real_inserter
;
71 //[karma_double_performance_direct
72 typedef real_inserter
<double> inserter
;
75 util::high_resolution_timer t
;
77 for (int i
= 0; i
< NUMITERATIONS
; ++i
) {
79 inserter::call(p
, 12345.12345);
84 std::cout
<< "karma (direct):\t" << t
.elapsed() << std::endl
;
85 // std::cout << buffer << std::endl;
88 void format_performance_string()
90 using boost::spirit::karma::generate
;
92 //[karma_double_performance_string
93 std::string generated
;
94 std::back_insert_iterator
<std::string
> sink(generated
);
96 util::high_resolution_timer t
;
98 for (int i
= 0; i
< NUMITERATIONS
; ++i
) {
100 generate(sink
, double_
, 12345.12345);
104 std::cout
<< "karma (string):\t" << t
.elapsed() << std::endl
;
105 // std::cout << generated << std::endl;
109 void format_performance_boost_format()
111 //[karma_double_performance_format
112 std::string generated
;
113 boost::format
double_format("%f");
115 util::high_resolution_timer t
;
117 for (int i
= 0; i
< NUMITERATIONS
; ++i
)
118 generated
= boost::str(double_format
% 12345.12345);
121 std::cout
<< "format:\t\t" << t
.elapsed() << std::endl
;
122 // std::cout << strm.str() << std::endl;
125 void format_performance_sprintf()
127 util::high_resolution_timer t
;
129 //[karma_double_performance_printf
131 for (int i
= 0; i
< NUMITERATIONS
; ++i
) {
132 sprintf(buffer
, "%f", 12345.12345);
136 std::cout
<< "sprintf:\t" << t
.elapsed() << std::endl
;
137 // std::cout << buffer << std::endl;
140 void format_performance_iostreams()
142 //[karma_double_performance_iostreams
143 std::stringstream strm
;
145 util::high_resolution_timer t
;
147 for (int i
= 0; i
< NUMITERATIONS
; ++i
) {
153 std::cout
<< "iostreams:\t" << t
.elapsed() << std::endl
;
154 // std::cout << strm.str() << std::endl;
157 ///////////////////////////////////////////////////////////////////////////////
160 format_performance_sprintf();
161 format_performance_iostreams();
162 format_performance_boost_format();
163 format_performance_karma();
164 format_performance_string();
165 format_performance_rule();
166 format_performance_direct();