LeechCraft 0.6.70-18450-gabe19ee3b0
Modular cross-platform feature rich live environment.
Loading...
Searching...
No Matches
coroeithertest.cpp
Go to the documentation of this file.
1/**********************************************************************
2 * LeechCraft - modular cross-platform feature rich internet client.
3 * Copyright (C) 2006-2014 Georg Rudoy
4 *
5 * Distributed under the Boost Software License, Version 1.0.
6 * (See accompanying file LICENSE or copy at https://www.boost.org/LICENSE_1_0.txt)
7 **********************************************************************/
8
9#include "coroeithertest.h"
10#include <QtTest>
11#include <util/sll/qtutil.h>
12#include <util/threads/coro.h>
14
15QTEST_GUILESS_MAIN (LC::Util::CoroEitherTest)
16
17namespace LC::Util
18{
20
21 void CoroEitherTest::testSuccess ()
22 {
23 auto action = [] -> Ty
24 {
25 auto n = co_await Ty { 3 };
26 auto m = co_await Ty { 5 };
27 co_return n * m;
28 };
29 QCOMPARE (action (), 15);
30 }
31
32 void CoroEitherTest::testFailure ()
33 {
34 auto action = [] -> Ty
35 {
36 auto m = co_await Ty { 3 };
37 auto n = co_await Ty { AsLeft, 'a' };
38 auto k = co_await Ty { AsLeft, 'b' };
39 co_return n * m * k;
40 };
41 QCOMPARE (action (), (Ty { AsLeft, 'a' }));
42 }
43
44 void CoroEitherTest::testException ()
45 {
46 auto action = [] -> Ty
47 {
48 auto m = co_await Ty { 3 };
49 auto n = co_await [] -> Ty { throw std::runtime_error { "err" }; } ();
50 auto k = co_await Ty { AsLeft, 'a' };
51 co_return n * m * k;
52 };
53 QVERIFY_THROWS_EXCEPTION (std::runtime_error, action ());
54 }
55
56 void CoroEitherTest::testSuccessAllocating ()
57 {
58 using AllocTy = Either<QByteArray, QString>;
59
60 auto action = [] -> AllocTy
61 {
62 const auto& s1 = co_await AllocTy { QString { "foo" } };
63 const auto& s2 = co_await AllocTy { QString { "bar" } };
64 co_return s1 + s2;
65 };
66 QCOMPARE (action (), "foobar"_qs);
67 }
68}
constexpr auto AsLeft
Definition either.h:27
Either< char, int > Ty