1// Copyright 2022 Peter Dimov.
2// Distributed under the Boost Software License, Version 1.0.
3// http://www.boost.org/LICENSE_1_0.txt
4
5#include <boost/system/error_code.hpp>
6#include <boost/system/generic_category.hpp>
7#include <boost/system/system_category.hpp>
8#include <boost/core/lightweight_test.hpp>
9#include <cerrno>
10#include <system_error>
11
12namespace sys = boost::system;
13
14int main()
15{
16 // normal against normal (equal, system)
17 {
18 sys::error_code e2( 0, sys::system_category() );
19 sys::error_code e3( e2.value(), e2.category() );
20
21 BOOST_TEST( e2 != e3 || hash_value( e2 ) == hash_value( e3 ) );
22 BOOST_TEST( e2 == e3 || hash_value( e2 ) != hash_value( e3 ) );
23 }
24
25 // normal against normal (equal, generic)
26 {
27 sys::error_code e2( EINVAL, sys::generic_category() );
28 sys::error_code e3( e2.value(), e2.category() );
29
30 BOOST_TEST( e2 != e3 || hash_value( e2 ) == hash_value( e3 ) );
31 BOOST_TEST( e2 == e3 || hash_value( e2 ) != hash_value( e3 ) );
32 }
33
34 // normal against normal (inequal, value, generic)
35 {
36 sys::error_code e2( 0, sys::generic_category() );
37 sys::error_code e3( EINVAL, sys::generic_category() );
38
39 BOOST_TEST( e2 != e3 || hash_value( e2 ) == hash_value( e3 ) );
40 BOOST_TEST( e2 == e3 || hash_value( e2 ) != hash_value( e3 ) );
41 }
42
43 // normal against normal (inequal, value, system)
44 {
45 sys::error_code e2( 1, sys::system_category() );
46 sys::error_code e3( 2, sys::system_category() );
47
48 BOOST_TEST( e2 != e3 || hash_value( e2 ) == hash_value( e3 ) );
49 BOOST_TEST( e2 == e3 || hash_value( e2 ) != hash_value( e3 ) );
50 }
51
52 // normal against normal (inequal, category)
53 {
54 sys::error_code e2( 0, sys::system_category() );
55 sys::error_code e3( 0, sys::generic_category() );
56
57 BOOST_TEST( e2 != e3 || hash_value( e2 ) == hash_value( e3 ) );
58 BOOST_TEST( e2 == e3 || hash_value( e2 ) != hash_value( e3 ) );
59 }
60
61 // empty against normal
62 {
63 sys::error_code e2;
64 sys::error_code e3( e2.value(), e2.category() );
65
66 BOOST_TEST( e2 != e3 || hash_value( e2 ) == hash_value( e3 ) );
67 BOOST_TEST( e2 == e3 || hash_value( e2 ) != hash_value( e3 ) );
68 }
69
70 // std:: wrapping against normal
71 {
72 std::error_code e1( EINVAL, std::generic_category() );
73
74 sys::error_code e2( e1 );
75 sys::error_code e3( e2.value(), e2.category() );
76
77 BOOST_TEST( e2 != e3 || hash_value( e2 ) == hash_value( e3 ) );
78 BOOST_TEST( e2 == e3 || hash_value( e2 ) != hash_value( e3 ) );
79 }
80
81 // empty against wrapping std:: empty
82 {
83 std::error_code e1;
84
85 sys::error_code e2( e1 );
86 sys::error_code e3;
87
88 BOOST_TEST( e2 != e3 || hash_value( e2 ) == hash_value( e3 ) );
89 BOOST_TEST( e2 == e3 || hash_value( e2 ) != hash_value( e3 ) );
90 }
91
92 // empty against roundtrip via std
93 {
94 sys::error_code e2;
95
96 std::error_code e1( e2 );
97 sys::error_code e3( e1 );
98
99 BOOST_TEST( e2 != e3 || hash_value( e2 ) == hash_value( e3 ) );
100 BOOST_TEST( e2 == e3 || hash_value( e2 ) != hash_value( e3 ) );
101 }
102
103 // normal/generic against roundtrip via std
104 {
105 sys::error_code e2( EINVAL, boost::system::generic_category() );
106
107 std::error_code e1( e2 );
108 sys::error_code e3( e1 );
109
110 BOOST_TEST( e2 != e3 || hash_value( e2 ) == hash_value( e3 ) );
111 BOOST_TEST( e2 == e3 || hash_value( e2 ) != hash_value( e3 ) );
112 }
113
114 // normal/system against roundtrip via std
115 {
116 sys::error_code e2( 0, boost::system::system_category() );
117
118 std::error_code e1( e2 );
119 sys::error_code e3( e1 );
120
121 BOOST_TEST( e2 != e3 || hash_value( e2 ) == hash_value( e3 ) );
122 BOOST_TEST( e2 == e3 || hash_value( e2 ) != hash_value( e3 ) );
123 }
124
125 return boost::report_errors();
126}
127

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