summaryrefslogtreecommitdiffstats
path: root/src/boost/libs/hof/test/mutable.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/boost/libs/hof/test/mutable.cpp')
-rw-r--r--src/boost/libs/hof/test/mutable.cpp72
1 files changed, 72 insertions, 0 deletions
diff --git a/src/boost/libs/hof/test/mutable.cpp b/src/boost/libs/hof/test/mutable.cpp
new file mode 100644
index 00000000..d071bc63
--- /dev/null
+++ b/src/boost/libs/hof/test/mutable.cpp
@@ -0,0 +1,72 @@
+/*=============================================================================
+ Copyright (c) 2017 Paul Fultz II
+ mutable.cpp
+ 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/hof/mutable.hpp>
+#include <boost/hof/lazy.hpp>
+#include <boost/hof/detail/move.hpp>
+#include <memory>
+#include "test.hpp"
+
+struct mutable_fun
+{
+ int x;
+ mutable_fun() noexcept
+ : x(1)
+ {}
+
+ int operator()(int i) noexcept
+ {
+ x+=i;
+ return x;
+ }
+};
+
+#if BOOST_HOF_HAS_NOEXCEPT_DEDUCTION
+BOOST_HOF_TEST_CASE()
+{
+ static_assert(noexcept(boost::hof::mutable_(mutable_fun())(3)), "noexcept mutable_");
+}
+#endif
+
+BOOST_HOF_TEST_CASE()
+{
+ BOOST_HOF_TEST_CHECK(boost::hof::mutable_(mutable_fun())(3) == 4);
+}
+
+BOOST_HOF_TEST_CASE()
+{
+ auto mut_fun = mutable_fun();
+ auto by_5 = boost::hof::lazy(boost::hof::mutable_(std::ref(mut_fun)))(5);
+ BOOST_HOF_TEST_CHECK(by_5() == 6);
+ BOOST_HOF_TEST_CHECK(by_5() == 11);
+}
+
+struct mutable_move_fun
+{
+ std::unique_ptr<int> x;
+ mutable_move_fun() : x(new int(1))
+ {}
+
+ int operator()(int i)
+ {
+ *x+=i;
+ return *x;
+ }
+};
+
+BOOST_HOF_TEST_CASE()
+{
+ BOOST_HOF_TEST_CHECK(boost::hof::mutable_(mutable_move_fun())(3) == 4);
+}
+
+BOOST_HOF_TEST_CASE()
+{
+ auto mut_fun = mutable_move_fun();
+ auto by_5 = boost::hof::lazy(boost::hof::mutable_(boost::hof::move(mut_fun)))(5);
+ BOOST_HOF_TEST_CHECK(by_5() == 6);
+ BOOST_HOF_TEST_CHECK(by_5() == 11);
+}
+