]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/log/test/run/util_manip_optional.cpp
import quincy beta 17.1.0
[ceph.git] / ceph / src / boost / libs / log / test / run / util_manip_optional.cpp
CommitLineData
20effc67
TL
1/*
2 * Copyright Andrey Semashev 2020.
3 * Distributed under the Boost Software License, Version 1.0.
4 * (See accompanying file LICENSE_1_0.txt or copy at
5 * http://www.boost.org/LICENSE_1_0.txt)
6 */
7/*!
8 * \file util_manip_optional.cpp
9 * \author Andrey Semashev
10 * \date 12.05.2020
11 *
12 * \brief This header contains tests for the optional manipulator.
13 */
14
15#define BOOST_TEST_MODULE util_manip_optional
16
17#include <string>
18#include <sstream>
19#include <boost/config.hpp>
20#include <boost/optional.hpp>
21#include <boost/test/unit_test.hpp>
22#include <boost/log/utility/manipulators/optional.hpp>
23#include "char_definitions.hpp"
24
25namespace logging = boost::log;
26
27struct my_int_wrapper
28{
29 int n;
30
31 my_int_wrapper(int x = 0) BOOST_NOEXCEPT : n(x) {}
32};
33
34template< typename CharT, typename TraitsT >
35inline std::basic_ostream< CharT, TraitsT >& operator<< (std::basic_ostream< CharT, TraitsT >& strm, my_int_wrapper miw)
36{
37 if (BOOST_LIKELY(strm.good()))
38 strm << '{' << miw.n << '}';
39
40 return strm;
41}
42
43BOOST_AUTO_TEST_CASE_TEMPLATE(opt_none_no_marker, CharT, char_types)
44{
45 typedef CharT char_type;
46 typedef std::basic_ostringstream< char_type > ostream_type;
47 typedef std::basic_string< char_type > string_type;
48
49 boost::optional< int > data;
50
51 ostream_type strm_dump;
52 strm_dump << logging::optional_manip(data);
53
54 BOOST_CHECK(equal_strings(strm_dump.str(), string_type()));
55}
56
57BOOST_AUTO_TEST_CASE_TEMPLATE(opt_none_with_marker_char, CharT, char_types)
58{
59 typedef CharT char_type;
60 typedef std::basic_ostringstream< char_type > ostream_type;
61
62 boost::optional< int > data;
63
64 ostream_type strm_dump;
65 strm_dump << logging::optional_manip(data, '-');
66
67 ostream_type strm_correct;
68 strm_correct << "-";
69
70 BOOST_CHECK(equal_strings(strm_dump.str(), strm_correct.str()));
71}
72
73BOOST_AUTO_TEST_CASE_TEMPLATE(opt_none_with_marker_string, CharT, char_types)
74{
75 typedef CharT char_type;
76 typedef std::basic_ostringstream< char_type > ostream_type;
77
78 boost::optional< int > data;
79
80 ostream_type strm_dump;
81 strm_dump << logging::optional_manip(data, "[none]");
82
83 ostream_type strm_correct;
84 strm_correct << "[none]";
85
86 BOOST_CHECK(equal_strings(strm_dump.str(), strm_correct.str()));
87}
88
89BOOST_AUTO_TEST_CASE_TEMPLATE(opt_none_with_marker_std_string, CharT, char_types)
90{
91 typedef CharT char_type;
92 typedef std::basic_ostringstream< char_type > ostream_type;
93 typedef std::basic_string< char_type > string_type;
94
95 boost::optional< int > data;
96
97 string_type marker;
98 marker.push_back('[');
99 marker.push_back('n');
100 marker.push_back('o');
101 marker.push_back('n');
102 marker.push_back('e');
103 marker.push_back(']');
104
105 ostream_type strm_dump;
106 strm_dump << logging::optional_manip(data, marker);
107
108 ostream_type strm_correct;
109 strm_correct << "[none]";
110
111 BOOST_CHECK(equal_strings(strm_dump.str(), strm_correct.str()));
112}
113
114BOOST_AUTO_TEST_CASE_TEMPLATE(ptr_none_with_marker_string, CharT, char_types)
115{
116 typedef CharT char_type;
117 typedef std::basic_ostringstream< char_type > ostream_type;
118
119 const int* data = 0;
120
121 ostream_type strm_dump;
122 strm_dump << logging::optional_manip(data, "[none]");
123
124 ostream_type strm_correct;
125 strm_correct << "[none]";
126
127 BOOST_CHECK(equal_strings(strm_dump.str(), strm_correct.str()));
128}
129
130BOOST_AUTO_TEST_CASE_TEMPLATE(opt_int_with_marker_string, CharT, char_types)
131{
132 typedef CharT char_type;
133 typedef std::basic_ostringstream< char_type > ostream_type;
134
135 boost::optional< int > data;
136 data = 7;
137
138 ostream_type strm_dump;
139 strm_dump << logging::optional_manip(data, "[none]");
140
141 ostream_type strm_correct;
142 strm_correct << "7";
143
144 BOOST_CHECK(equal_strings(strm_dump.str(), strm_correct.str()));
145}
146
147BOOST_AUTO_TEST_CASE_TEMPLATE(ptr_int_with_marker_string, CharT, char_types)
148{
149 typedef CharT char_type;
150 typedef std::basic_ostringstream< char_type > ostream_type;
151
152 int n = 7;
153 int* data = &n;
154
155 ostream_type strm_dump;
156 strm_dump << logging::optional_manip(data, "[none]");
157
158 ostream_type strm_correct;
159 strm_correct << "7";
160
161 BOOST_CHECK(equal_strings(strm_dump.str(), strm_correct.str()));
162}
163
164BOOST_AUTO_TEST_CASE_TEMPLATE(ptr_miw_with_marker_string, CharT, char_types)
165{
166 typedef CharT char_type;
167 typedef std::basic_ostringstream< char_type > ostream_type;
168
169 my_int_wrapper n(7);
170 const my_int_wrapper* data = &n;
171
172 ostream_type strm_dump;
173 strm_dump << logging::optional_manip(data, "[none]");
174
175 ostream_type strm_correct;
176 strm_correct << "{7}";
177
178 BOOST_CHECK(equal_strings(strm_dump.str(), strm_correct.str()));
179}