25 void EitherTest::testBasicLeft ()
28 QCOMPARE (left.IsLeft (),
true);
29 QCOMPARE (left.IsRight (),
false);
30 QCOMPARE (left.GetLeft (), 1);
32 bool hadCaught =
false;
37 catch (
const std::exception&)
41 QCOMPARE (hadCaught,
true);
44 void EitherTest::testBasicRight ()
47 QCOMPARE (right.IsLeft (),
false);
48 QCOMPARE (right.IsRight (),
true);
49 QCOMPARE (right.GetRight (), QString {
"foo" });
51 bool hadCaught =
false;
56 catch (
const std::exception&)
60 QCOMPARE (hadCaught,
true);
63 void EitherTest::testFMapLeft ()
66 const auto& fmapped =
Fmap (left, [] (
const QString& str) {
return str +
"_mapped"; });
67 QCOMPARE (fmapped, left);
70 void EitherTest::testFMapRight ()
73 const auto& fmapped =
Fmap (right, [] (
const QString& str) {
return str +
"_mapped"; });
74 QCOMPARE (fmapped.GetRight (), QString {
"foo_mapped" });
77 void EitherTest::testFMapRightChangeType ()
80 const auto& fmapped =
Fmap (right, [] (
const QString& str) {
return static_cast<long> (str.size ()); });
81 QCOMPARE (fmapped.GetRight (),
static_cast<long> (right.GetRight ().size ()));
84 void EitherTest::testPure ()
86 const auto& pure = Pure<Either, int> (QString {
"foo" });
90 void EitherTest::testGSL ()
92 const auto& pure = Pure<Either, int> ([] (
const QString& s) {
return s +
"_pure"; });
93 const auto& app = pure * Pure<Either, int> (QString {
"foo" });
97 void EitherTest::testGSLLeft ()
99 const auto& pure = Pure<Either, int> ([] (
const QString& s) {
return s +
"_pure"; });
101 const auto& app = pure * value;
102 QCOMPARE (app, value);
105 void EitherTest::testGSLCurry ()
107 const auto& summer = Pure<Either, int> (
Curry ([] (
const QString& a,
const QString& b) {
return a + b; }));
108 const auto& s1 = Pure<Either, int> (QString {
"foo" });
109 const auto& s2 = Pure<Either, int> (QString {
"bar" });
110 const auto& app = summer * s1 * s2;
114 void EitherTest::testGSLCurryLeft ()
116 const auto& summer = Pure<Either, int> (
Curry ([] (
const QString& a,
const QString& b) {
return a + b; }));
118 const auto& s2 = Pure<Either, int> (QString {
"bar" });
119 const auto& app = summer * s1 * s2;
123 void EitherTest::testBind ()
125 const auto& res = Return<Either, int> (QString {
"foo" }) >>
130 void EitherTest::testBindLeft ()
133 const auto& res = value >>
135 QCOMPARE (res, value);
151 void EitherTest::testBindLeftNotConstructed ()
155 const auto res = value >>
156 [&expected] (
const auto&) {
return expected; };
157 QCOMPARE (res, expected);