1
2 // Copyright 2018, 2020 Peter Dimov.
3 //
4 // Distributed under the Boost Software License, Version 1.0.
5 //
6 // See accompanying file LICENSE_1_0.txt or copy at
7 // http://www.boost.org/LICENSE_1_0.txt
8
9 // See library home page at http://www.boost.org/libs/system
10
11 // Avoid spurious VC++ warnings
12 #define _CRT_SECURE_NO_WARNINGS
13
14 #include <boost/system/error_category.hpp>
15 #include <boost/core/lightweight_test.hpp>
16 #include <cstdio>
17
18 //
19
20 namespace sys = boost::system;
21
22 class user_category: public sys::error_category
23 {
24 public:
25
name() const26 virtual const char * name() const BOOST_NOEXCEPT
27 {
28 return "user";
29 }
30
message(int ev) const31 virtual std::string message( int ev ) const
32 {
33 char buffer[ 256 ];
34 std::sprintf( buffer, "user message %d", ev );
35
36 return buffer;
37 }
38
39 using sys::error_category::message;
40 };
41
42 static user_category s_cat_1;
43 static user_category s_cat_2;
44
main()45 int main()
46 {
47 // default_error_condition
48
49 BOOST_TEST( s_cat_1.default_error_condition( 1 ).value() == 1 );
50 BOOST_TEST( s_cat_1.default_error_condition( 1 ).category() == s_cat_1 );
51
52 BOOST_TEST( s_cat_2.default_error_condition( 2 ).value() == 2 );
53 BOOST_TEST( s_cat_2.default_error_condition( 2 ).category() == s_cat_2 );
54
55 // equivalent
56
57 BOOST_TEST( s_cat_1.equivalent( 1, s_cat_1.default_error_condition( 1 ) ) );
58 BOOST_TEST( !s_cat_1.equivalent( 1, s_cat_1.default_error_condition( 2 ) ) );
59 BOOST_TEST( !s_cat_1.equivalent( 1, s_cat_2.default_error_condition( 2 ) ) );
60
61 // message
62
63 {
64 char buffer[ 256 ];
65 BOOST_TEST_CSTR_EQ( s_cat_1.message( 1, buffer, sizeof( buffer ) ), s_cat_1.message( 1 ).c_str() );
66 }
67
68 {
69 char buffer[ 4 ];
70 BOOST_TEST_CSTR_EQ( s_cat_1.message( 1, buffer, sizeof( buffer ) ), "use" );
71 }
72
73 // ==
74
75 BOOST_TEST_NOT( s_cat_1 == s_cat_2 );
76 BOOST_TEST( s_cat_1 != s_cat_2 );
77
78 return boost::report_errors();
79 }
80