1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
|
// Copyright 2018-2024 Emil Dotchevski and Reverge Studios, Inc.
// Distributed under the Boost Software License, Version 1.0. (See accompanying
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
#ifdef BOOST_LEAF_TEST_SINGLE_HEADER
# include "leaf.hpp"
#else
# include <boost/leaf/handle_errors.hpp>
# include <boost/leaf/result.hpp>
# include <boost/leaf/pred.hpp>
#endif
#include "lightweight_test.hpp"
namespace leaf = boost::leaf;
enum class ErrorCode
{
E_GENERIC_UNEXPECTED,
E_GENERIC_PARSE
};
leaf::result<int> test1( int a )
{
if( a == 1 )
return leaf::new_error(ErrorCode::E_GENERIC_UNEXPECTED);
return 32;
}
leaf::result<float> test2(int a)
{
return leaf::try_handle_some(
[&]() -> leaf::result<float>
{
BOOST_LEAF_AUTO(val, test1(a));
(void) val;
return 4.5;
},
[](leaf::match<ErrorCode,ErrorCode::E_GENERIC_UNEXPECTED>) -> leaf::result<float>
{
return leaf::new_error(ErrorCode::E_GENERIC_PARSE);
}
);
}
void test3(int a)
{
int x = 0;
leaf::try_handle_all(
[&]() -> leaf::result<void>
{
BOOST_LEAF_AUTO(val, test2(a));
(void) val;
return {};
},
[&](leaf::match<ErrorCode, ErrorCode::E_GENERIC_PARSE>)
{
x = 1;
},
[&](ErrorCode e)
{
x = 2;
},
[&]()
{
x = 3;
}
);
BOOST_TEST_EQ(x, 1);
}
int main()
{
test3(1);
return boost::report_errors();
}
|