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

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