1// Copyright (c) 2023 Klemens D. Morgenstern
2//
3// Distributed under the Boost Software License, Version 1.0. (See accompanying
4// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
5
6#include <boost/cobalt/leaf.hpp>
7#include <boost/cobalt/promise.hpp>
8#include <boost/leaf/result.hpp>
9
10#include <boost/test/unit_test.hpp>
11#include "test.hpp"
12
13using namespace boost;
14
15
16BOOST_AUTO_TEST_SUITE(leaf_);
17
18CO_TEST_CASE(try_catch)
19{
20 BOOST_CHECK(co_await cobalt::try_catch(
21 []() -> cobalt::promise<int>
22 {
23 throw std::runtime_error("TestException");
24 co_return 42;
25 }(),
26 [](std::runtime_error & re)
27 {
28 BOOST_CHECK(re.what() == std::string("TestException"));
29 return -1;
30 },
31 [](std::exception &)
32 {
33 BOOST_CHECK(false);
34 return -2;
35 }) == -1);
36
37 BOOST_CHECK(co_await cobalt::try_catch(
38 []() -> cobalt::promise<int>
39 {
40 co_return 42;
41 }(),
42 [](std::runtime_error &)
43 {
44 BOOST_CHECK(false);
45 return -1;
46 },
47 [](std::exception &)
48 {
49 BOOST_CHECK(false);
50 return -2;
51 }) == 42);
52}
53
54
55CO_TEST_CASE(try_handle_all)
56{
57 BOOST_CHECK(co_await cobalt::try_handle_all(
58 []() -> cobalt::promise<leaf::result<int>>
59 {
60 throw std::runtime_error("TestException");
61 co_return 42;
62 }(),
63 [](const std::runtime_error & re)
64 {
65 BOOST_CHECK(re.what() == std::string("TestException"));
66 return -1;
67 },
68 [](const std::exception &)
69 {
70 BOOST_CHECK(false);
71 return -2;
72 },
73 []
74 {
75 BOOST_CHECK(false);
76 return -3;
77 }) == -1);
78
79 BOOST_CHECK(co_await cobalt::try_handle_all(
80 []() -> cobalt::promise<leaf::result<int>>
81 {
82 co_return 42;
83 }(),
84 [](const std::runtime_error &)
85 {
86 BOOST_CHECK(false);
87 return -1;
88 },
89 [](const std::exception &)
90 {
91 BOOST_CHECK(false);
92 return -2;
93 },
94 []
95 {
96 BOOST_CHECK(false);
97 return -3;
98 }) == 42);
99}
100
101
102CO_TEST_CASE(try_handle_all_)
103{
104 BOOST_CHECK((co_await cobalt::try_handle_some(
105 []() -> cobalt::promise<leaf::result<int>>
106 {
107 throw std::runtime_error("TestException");
108 co_return 42;
109 }(),
110 [](const std::runtime_error & re)
111 {
112 BOOST_CHECK(re.what() == std::string("TestException"));
113 return -1;
114 },
115 [](const std::exception &)
116 {
117 BOOST_CHECK(false);
118 return -2;
119 },
120 []
121 {
122 BOOST_CHECK(false);
123 return -3;
124 })).value() == -1);
125
126 BOOST_CHECK((co_await cobalt::try_handle_some(
127 []() -> cobalt::promise<leaf::result<int>>
128 {
129 co_return 42;
130 }(),
131 [](const std::runtime_error &)
132 {
133 BOOST_CHECK(false);
134 return -1;
135 },
136 [](const std::exception &)
137 {
138 BOOST_CHECK(false);
139 return -2;
140 },
141 []
142 {
143 BOOST_CHECK(false);
144 return -3;
145 })).value() == 42);
146}
147
148
149BOOST_AUTO_TEST_SUITE_END();

source code of boost/libs/cobalt/test/leaf.cpp