1// Copyright 2021, 2022 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;
16
17 BOOST_TEST( !ec.has_location() );
18 BOOST_TEST_EQ( ec.location(), boost::source_location() );
19
20 BOOST_STATIC_CONSTEXPR boost::source_location loc = BOOST_CURRENT_LOCATION;
21
22 boost::system::error_code ec2( ec, &loc );
23
24 BOOST_TEST_EQ( ec2, ec );
25
26 BOOST_TEST( !ec2.has_location() );
27 BOOST_TEST_EQ( ec2.location(), boost::source_location() );
28
29 boost::system::error_code ec3( ec2, 0 );
30
31 BOOST_TEST_EQ( ec3, ec2 );
32
33 BOOST_TEST( !ec3.has_location() );
34 BOOST_TEST_EQ( ec3.location(), boost::source_location() );
35 }
36
37 {
38 boost::system::error_code ec( val, cat );
39
40 BOOST_TEST( !ec.has_location() );
41 BOOST_TEST_EQ( ec.location(), boost::source_location() );
42
43 BOOST_STATIC_CONSTEXPR boost::source_location loc = BOOST_CURRENT_LOCATION;
44
45 boost::system::error_code ec2( ec, &loc );
46
47 BOOST_TEST_EQ( ec2, ec );
48
49 BOOST_TEST( ec2.has_location() );
50 BOOST_TEST_EQ( ec2.location(), loc );
51
52 boost::system::error_code ec3( ec2, 0 );
53
54 BOOST_TEST_EQ( ec3, ec2 );
55
56 BOOST_TEST( !ec3.has_location() );
57 BOOST_TEST_EQ( ec3.location(), boost::source_location() );
58 }
59
60 {
61 std::error_code e2( val, std::generic_category() );
62
63 boost::system::error_code ec( e2 );
64
65 BOOST_TEST( !ec.has_location() );
66 BOOST_TEST_EQ( ec.location(), boost::source_location() );
67
68 BOOST_STATIC_CONSTEXPR boost::source_location loc = BOOST_CURRENT_LOCATION;
69
70 boost::system::error_code ec2( ec, &loc );
71
72 BOOST_TEST_EQ( ec2, ec );
73
74 BOOST_TEST( !ec2.has_location() );
75 BOOST_TEST_EQ( ec2.location(), boost::source_location() );
76
77 boost::system::error_code ec3( ec2, 0 );
78
79 BOOST_TEST_EQ( ec3, ec2 );
80
81 BOOST_TEST( !ec3.has_location() );
82 BOOST_TEST_EQ( ec3.location(), boost::source_location() );
83 }
84
85 return boost::report_errors();
86}
87

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