20 void MonadTest::testBoostOptionalReturn ()
22 const auto& pure = Return<std::optional> (2);
23 QCOMPARE (pure, std::optional<int> { 2 });
26 void MonadTest::testBoostOptionalBind ()
28 const auto& pure = Return<std::optional> (2);
29 const auto& result =
Bind (pure, [] (
int value) {
return std::optional<int> { ++value }; });
30 QCOMPARE (result, std::optional<int> { 3 });
33 void MonadTest::testBoostOptionalBindEmpty ()
35 const auto& result =
Bind (std::optional<int> {}, [] (
int value) {
return std::optional<int> { ++value }; });
36 QCOMPARE (result, std::optional<int> {});
39 void MonadTest::testBoostOptionalBindOperator ()
41 const auto& pure = Return<std::optional> (2);
42 const auto& result = pure >> [] (
int value) {
return std::optional<int> { ++value }; };
43 QCOMPARE (result, std::optional<int> { 3 });
46 void MonadTest::testBoostOptionalBindEmptyOperator ()
48 const auto& result = std::optional<int> {} >> [] (
int value) {
return std::optional<int> { ++value }; };
49 QCOMPARE (result, std::optional<int> {});
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; });
58 QCOMPARE (result, std::optional<int> { 15 });
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; });
69 QCOMPARE (result, std::optional<int> {});
70 QCOMPARE (called,
false);
73 void MonadTest::testCompatibilitySingle ()
79 QCOMPARE (result,
true);
82 void MonadTest::testCompatibilitySingleDif ()
88 QCOMPARE (result,
true);
91 void MonadTest::testCompatibilityMulti ()
94 Typelist<int, float, QString>,
95 Typelist<int, float, QString>
97 QCOMPARE (result,
true);
100 void MonadTest::testCompatibilityMultiDifEnd ()
103 Typelist<int, float, QString>,
104 Typelist<int, float, QByteArray>
106 QCOMPARE (result,
true);
109 void MonadTest::testInCompatibilityMulti ()
112 Typelist<int, float, QString>,
113 Typelist<int, double, QString>
115 QCOMPARE (result,
false);
118 void MonadTest::testInCompatibilityMultiStart ()
121 Typelist<int, float, QString>,
122 Typelist<QByteArray, float, QString>
124 QCOMPARE (result,
false);