20 void MonadTest::testBoostOptionalReturn ()
26 void MonadTest::testBoostOptionalBind ()
33 void MonadTest::testBoostOptionalBindEmpty ()
35 const auto&
result =
Bind (std::optional<int> {}, [] (
int value) {
return std::optional<int> { ++
value }; });
39 void MonadTest::testBoostOptionalBindOperator ()
46 void MonadTest::testBoostOptionalBindEmptyOperator ()
48 const auto&
result = std::optional<int> {} >> [] (
int value) {
return std::optional<int> { ++
value }; };
52 void MonadTest::testBoostOptionalDo ()
54 const auto&
result =
Do (std::optional<int> { 2 },
55 [] (
int a) -> std::optional<int> {
return a * 2; },
56 [] (
int a) -> std::optional<int> {
return a + 1; },
57 [] (
int a) -> std::optional<int> {
return a * 3; });
61 void MonadTest::testBoostOptionalDoEmpty ()
64 const auto&
result =
Do (std::optional<int> { 2 },
65 [] (
int a) -> std::optional<int> {
return a * 2; },
66 [] (
int) -> std::optional<int> {
return {}; },
67 [&
called] (
int a) -> std::optional<int> {
called =
true;
return a * 3; });
73 void MonadTest::testCompatibilitySingle ()
82 void MonadTest::testCompatibilitySingleDif ()
91 void MonadTest::testCompatibilityMulti ()
100 void MonadTest::testCompatibilityMultiDifEnd ()
109 void MonadTest::testInCompatibilityMulti ()
118 void MonadTest::testInCompatibilityMultiStart ()
constexpr bool IsCompatibleMonad()
Container< T > Filter(const Container< T > &c, F f)
BindResult_t< MV, F > Bind(const MV &value, const F &f)