summaryrefslogtreecommitdiffstats
path: root/src/boost/libs/yap/perf/map_assign_perf.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/boost/libs/yap/perf/map_assign_perf.cpp')
-rw-r--r--src/boost/libs/yap/perf/map_assign_perf.cpp162
1 files changed, 162 insertions, 0 deletions
diff --git a/src/boost/libs/yap/perf/map_assign_perf.cpp b/src/boost/libs/yap/perf/map_assign_perf.cpp
new file mode 100644
index 000000000..2253f3b6a
--- /dev/null
+++ b/src/boost/libs/yap/perf/map_assign_perf.cpp
@@ -0,0 +1,162 @@
+// Copyright (C) 2016-2018 T. Zachary Laine
+//
+// 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)
+#include <boost/yap/expression.hpp>
+
+#include <boost/assign/list_of.hpp>
+
+#include <map>
+#include <iostream>
+
+#include <benchmark/benchmark.h>
+
+
+template<typename Key, typename Value, typename Allocator>
+struct map_list_of_transform
+{
+ template<typename Fn, typename Key2, typename Value2>
+ auto operator()(
+ boost::yap::expr_tag<boost::yap::expr_kind::call>,
+ Fn const & fn,
+ Key2 && key,
+ Value2 && value)
+ {
+ boost::yap::transform(
+ boost::yap::as_expr<boost::yap::minimal_expr>(fn), *this);
+ map.emplace(
+ Key{std::forward<Key2 &&>(key)},
+ Value{std::forward<Value2 &&>(value)});
+ return 0;
+ }
+
+ std::map<Key, Value, Allocator> map;
+};
+
+
+template<boost::yap::expr_kind Kind, typename Tuple>
+struct map_list_of_expr
+{
+ static boost::yap::expr_kind const kind = Kind;
+
+ Tuple elements;
+
+ template<typename Key, typename Value, typename Allocator>
+ operator std::map<Key, Value, Allocator>() const
+ {
+ map_list_of_transform<Key, Value, Allocator> transform;
+ boost::yap::transform(*this, transform);
+ return transform.map;
+ }
+
+ BOOST_YAP_USER_CALL_OPERATOR(::map_list_of_expr)
+};
+
+struct map_list_of_tag
+{};
+
+auto map_list_of =
+ boost::yap::make_terminal<map_list_of_expr>(map_list_of_tag{});
+
+
+std::map<std::string, int> make_map_with_boost_yap()
+{
+ return map_list_of("<", 1)("<=", 2)(">", 3)(">=", 4)("=", 5)("<>", 6);
+}
+
+void BM_make_map_with_boost_yap(benchmark::State & state)
+{
+ int i = 0;
+ while (state.KeepRunning()) {
+ {
+ std::map<std::string, int> map = make_map_with_boost_yap();
+ state.PauseTiming();
+ for (auto && x : map) {
+ i += x.second;
+ }
+ }
+ state.ResumeTiming();
+ }
+ std::cout << "Sum of ints in all maps made=" << i << "\n";
+}
+
+std::map<std::string, int> make_map_with_boost_assign()
+{
+ return boost::assign::map_list_of("<", 1)("<=", 2)(">", 3)(">=", 4)("=", 5)(
+ "<>", 6);
+}
+
+void BM_make_map_with_boost_assign(benchmark::State & state)
+{
+ int i = 0;
+ while (state.KeepRunning()) {
+ {
+ std::map<std::string, int> map = make_map_with_boost_assign();
+ state.PauseTiming();
+ for (auto && x : map) {
+ i += x.second;
+ }
+ }
+ state.ResumeTiming();
+ }
+ std::cout << "Sum of ints in all maps made=" << i << "\n";
+}
+
+std::map<std::string, int> make_map_manually()
+{
+ std::map<std::string, int> retval;
+ retval.emplace("<", 1);
+ retval.emplace("<=", 2);
+ retval.emplace(">", 3);
+ retval.emplace(">=", 4);
+ retval.emplace("=", 5);
+ retval.emplace("<>", 6);
+ return retval;
+}
+
+void BM_make_map_manually(benchmark::State & state)
+{
+ int i = 0;
+ while (state.KeepRunning()) {
+ {
+ std::map<std::string, int> map = make_map_manually();
+ state.PauseTiming();
+ for (auto && x : map) {
+ i += x.second;
+ }
+ }
+ state.ResumeTiming();
+ }
+ std::cout << "Sum of ints in all maps made=" << i << "\n";
+}
+
+std::map<std::string, int> make_map_inializer_list()
+{
+ std::map<std::string, int> retval = {
+ {"<", 1}, {"<=", 2}, {">", 3}, {">=", 4}, {"=", 5}, {"<>", 6}};
+ return retval;
+}
+
+void BM_make_map_inializer_list(benchmark::State & state)
+{
+ int i = 0;
+ while (state.KeepRunning()) {
+ {
+ std::map<std::string, int> map = make_map_inializer_list();
+ state.PauseTiming();
+ for (auto && x : map) {
+ i += x.second;
+ }
+ }
+ state.ResumeTiming();
+ }
+ std::cout << "Sum of ints in all maps made=" << i << "\n";
+}
+
+BENCHMARK(BM_make_map_with_boost_yap);
+BENCHMARK(BM_make_map_with_boost_assign);
+BENCHMARK(BM_make_map_manually);
+BENCHMARK(BM_make_map_inializer_list);
+
+BENCHMARK_MAIN()