1// Copyright 2021 Peter Dimov.
2// Distributed under the Boost Software License, Version 1.0.
3// https://www.boost.org/LICENSE_1_0.txt
4
5#include <boost/system/result.hpp>
6#include <boost/core/lightweight_test.hpp>
7#include <vector>
8#include <string>
9
10using namespace boost::system;
11
12struct X
13{
14 int a;
15};
16
17struct Y
18{
19 int a, b;
20};
21
22struct E
23{
24 std::string v;
25};
26
27result<X> fx0()
28{
29 return {};
30}
31
32result<X> fx1()
33{
34 return {{ .a: 1 }};
35}
36
37result<Y> fy0()
38{
39 return {};
40}
41
42result<Y> fy2()
43{
44 return {{ .a: 1, .b: 2 }};
45}
46
47result<X, E> fxe0()
48{
49 return {};
50}
51
52result<X, E> fxe1()
53{
54 return {{ .a: 1 }};
55}
56
57result<std::vector<int>> fv0()
58{
59 return {};
60}
61
62result<std::vector<int>> fv1()
63{
64 return {{ 1 }};
65}
66
67result<std::vector<int>> fv2()
68{
69 return {{ 1, 2 }};
70}
71
72result<void> fw0()
73{
74 return {};
75}
76
77int main()
78{
79 {
80 result<X> r = fx0();
81
82 BOOST_TEST( r.has_value() );
83
84 BOOST_TEST_EQ( r->a, 0 );
85 }
86
87 {
88 result<X> r = fx1();
89
90 BOOST_TEST( r.has_value() );
91
92 BOOST_TEST_EQ( r->a, 1 );
93 }
94
95 {
96 result<Y> r = fy0();
97
98 BOOST_TEST( r.has_value() );
99
100 BOOST_TEST_EQ( r->a, 0 );
101 BOOST_TEST_EQ( r->b, 0 );
102 }
103
104 {
105 result<Y> r = fy2();
106
107 BOOST_TEST( r.has_value() );
108
109 BOOST_TEST_EQ( r->a, 1 );
110 BOOST_TEST_EQ( r->b, 2 );
111 }
112
113 {
114 result<X, E> r = fxe0();
115
116 BOOST_TEST( r.has_value() );
117
118 BOOST_TEST_EQ( r->a, 0 );
119 }
120
121 {
122 result<X, E> r = fxe1();
123
124 BOOST_TEST( r.has_value() );
125
126 BOOST_TEST_EQ( r->a, 1 );
127 }
128
129 {
130 result<std::vector<int>> r = fv0();
131
132 BOOST_TEST( r.has_value() );
133
134 BOOST_TEST_EQ( r->size(), 0 );
135 }
136
137 {
138 result<std::vector<int>> r = fv1();
139
140 BOOST_TEST( r.has_value() );
141
142 BOOST_TEST_EQ( r->size(), 1 );
143 BOOST_TEST_EQ( r->at(0), 1 );
144 }
145
146 {
147 result<std::vector<int>> r = fv2();
148
149 BOOST_TEST( r.has_value() );
150
151 BOOST_TEST_EQ( r->size(), 2 );
152 BOOST_TEST_EQ( r->at(0), 1 );
153 BOOST_TEST_EQ( r->at(1), 2 );
154 }
155
156 {
157 result<void> r = fw0();
158
159 BOOST_TEST( r.has_value() );
160 BOOST_TEST( !r.has_error() );
161 }
162
163 return boost::report_errors();
164}
165

source code of boost/libs/system/test/result_value_construct2.cpp