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.hpp>
6#include <boost/core/lightweight_test.hpp>
7#include <cerrno>
8
9int main()
10{
11 int const val = ENOENT;
12 boost::system::error_category const & cat = boost::system::generic_category();
13
14 {
15 boost::system::error_code ec( val, cat );
16
17 BOOST_TEST_EQ( ec.value(), val );
18 BOOST_TEST_EQ( &ec.category(), &cat );
19
20 BOOST_TEST( ec.failed() );
21
22 BOOST_TEST( !ec.has_location() );
23 BOOST_TEST_EQ( ec.location().line(), 0 );
24 }
25
26 {
27 BOOST_STATIC_CONSTEXPR boost::source_location loc = BOOST_CURRENT_LOCATION;
28
29 boost::system::error_code ec( val, cat, &loc );
30
31 BOOST_TEST_EQ( ec.value(), val );
32 BOOST_TEST_EQ( &ec.category(), &cat );
33
34 BOOST_TEST( ec.failed() );
35
36 BOOST_TEST( ec.has_location() );
37 BOOST_TEST_EQ( ec.location().line(), 27 );
38 }
39
40 {
41 boost::system::error_code ec;
42
43 BOOST_TEST_EQ( ec.value(), 0 );
44 BOOST_TEST_EQ( &ec.category(), &boost::system::system_category() );
45
46 BOOST_TEST( !ec.failed() );
47
48 BOOST_TEST( !ec.has_location() );
49 BOOST_TEST_EQ( ec.location().line(), 0 );
50
51 BOOST_STATIC_CONSTEXPR boost::source_location loc = BOOST_CURRENT_LOCATION;
52
53 ec = boost::system::error_code( val, cat, &loc );
54
55 BOOST_TEST_EQ( ec.value(), val );
56 BOOST_TEST_EQ( &ec.category(), &cat );
57
58 BOOST_TEST( ec.failed() );
59
60 BOOST_TEST( ec.has_location() );
61 BOOST_TEST_EQ( ec.location().line(), 51 );
62 }
63
64 {
65 boost::system::error_code ec;
66
67 BOOST_TEST_EQ( ec.value(), 0 );
68 BOOST_TEST_EQ( &ec.category(), &boost::system::system_category() );
69
70 BOOST_TEST( !ec.failed() );
71
72 BOOST_TEST( !ec.has_location() );
73 BOOST_TEST_EQ( ec.location().line(), 0 );
74
75 BOOST_STATIC_CONSTEXPR boost::source_location loc = BOOST_CURRENT_LOCATION;
76
77 ec.assign( val, cat, loc: &loc );
78
79 BOOST_TEST_EQ( ec.value(), val );
80 BOOST_TEST_EQ( &ec.category(), &cat );
81
82 BOOST_TEST( ec.failed() );
83
84 BOOST_TEST( ec.has_location() );
85 BOOST_TEST_EQ( ec.location().line(), 75 );
86 }
87
88 {
89 std::error_code e2( val, std::generic_category() );
90
91 boost::system::error_code ec( e2 );
92
93 BOOST_TEST( ec.failed() );
94
95 BOOST_TEST( !ec.has_location() );
96 BOOST_TEST_EQ( ec.location().line(), 0 );
97
98 BOOST_STATIC_CONSTEXPR boost::source_location loc = BOOST_CURRENT_LOCATION;
99
100 ec.assign( val, cat, loc: &loc );
101
102 BOOST_TEST_EQ( ec.value(), val );
103 BOOST_TEST_EQ( &ec.category(), &cat );
104
105 BOOST_TEST( ec.failed() );
106
107 BOOST_TEST( ec.has_location() );
108 BOOST_TEST_EQ( ec.location().line(), 98 );
109 }
110
111 return boost::report_errors();
112}
113

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