1 /*
2 * Distributed under the Boost Software License, Version 1.0.(See accompanying
3 * file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
4 *
5 * See http://www.boost.org/libs/iostreams for documentation.
6 *
7 * Tests the boolean type traits defined in boost/iostreams/traits.hpp.
8 *
9 * File: libs/iostreams/test/bool_trait_test.cpp
10 * Date: Sun Feb 17 17:52:59 MST 2008
11 * Copyright: 2008 CodeRage, LLC
12 * Author: Jonathan Turkanis
13 * Contact: turkanis at coderage dot com
14 */
15
16 #include <fstream>
17 #include <sstream>
18 #include <boost/iostreams/detail/iostream.hpp>
19 #include <boost/iostreams/detail/streambuf/linked_streambuf.hpp>
20 #include <boost/iostreams/detail/iostream.hpp>
21 #include <boost/iostreams/device/array.hpp>
22 #include <boost/iostreams/filtering_stream.hpp>
23 #include <boost/iostreams/filtering_streambuf.hpp>
24 #include <boost/iostreams/stream.hpp>
25 #include <boost/iostreams/stream_buffer.hpp>
26 #include <boost/iostreams/traits.hpp>
27 #include <boost/test/unit_test.hpp>
28
29 using namespace boost::iostreams;
30 namespace io = boost::iostreams;
31 using boost::unit_test::test_suite;
32
33 typedef stream<array_source> array_istream;
34 typedef stream<warray_source> array_wistream;
35 typedef stream<array_sink> array_ostream;
36 typedef stream<warray_sink> array_wostream;
37 typedef stream<array> array_stream;
38 typedef stream<warray> array_wstream;
39 typedef stream_buffer<array> array_streambuf;
40 typedef stream_buffer<warray> array_wstreambuf;
41
42 typedef io::filtering_stream<seekable> filtering_iostream;
43 typedef io::filtering_stream<seekable, wchar_t> filtering_wiostream;
44
45 typedef io::detail::linked_streambuf<char> linkedbuf;
46 typedef io::detail::linked_streambuf<wchar_t> wlinkedbuf;
47
48 #define BOOST_CHECK_BOOL_TRAIT(trait, type, status) \
49 BOOST_CHECK(trait< type >::value == status)
50 /**/
51
52 #define BOOST_CHECK_STREAM_TRAIT( \
53 trait, \
54 istream_, wistream_, ostream_, wostream_, \
55 iostream_, wiostream_, streambuf_, wstreambuf_, \
56 ifstream_, wifstream_, ofstream_, wofstream_, \
57 fstream_, wfstream_, filebuf_, wfilebuf_, \
58 istringstream_, wistringstream_, ostringstream_, wostringstream_, \
59 stringstream_, wstringstream_, stringbuf_, wstringbuf_, \
60 array_istream_, array_wistream_, array_ostream_, array_wostream_, \
61 array_stream_, array_wstream_, array_streambuf_, array_wstreambuf_, \
62 filtering_istream_, filtering_wistream_, \
63 filtering_ostream_, filtering_wostream_, \
64 filtering_iostream_, filtering_wiostream_, \
65 filtering_istreambuf_, filtering_wistreambuf_, \
66 linkedbuf_, wlinkedbuf_ ) \
67 BOOST_CHECK_BOOL_TRAIT(trait, std::istream, istream_); \
68 BOOST_CHECK_BOOL_TRAIT(trait, std::wistream, wistream_); \
69 BOOST_CHECK_BOOL_TRAIT(trait, std::ostream, ostream_); \
70 BOOST_CHECK_BOOL_TRAIT(trait, std::wostream, wostream_); \
71 BOOST_CHECK_BOOL_TRAIT(trait, std::iostream, iostream_); \
72 BOOST_CHECK_BOOL_TRAIT(trait, std::wiostream, wiostream_); \
73 BOOST_CHECK_BOOL_TRAIT(trait, std::streambuf, streambuf_); \
74 BOOST_CHECK_BOOL_TRAIT(trait, std::wstreambuf, wstreambuf_); \
75 BOOST_CHECK_BOOL_TRAIT(trait, std::wifstream, wifstream_); \
76 BOOST_CHECK_BOOL_TRAIT(trait, std::ofstream, ofstream_); \
77 BOOST_CHECK_BOOL_TRAIT(trait, std::wofstream, wofstream_); \
78 BOOST_CHECK_BOOL_TRAIT(trait, std::fstream, fstream_); \
79 BOOST_CHECK_BOOL_TRAIT(trait, std::wfstream, wfstream_); \
80 BOOST_CHECK_BOOL_TRAIT(trait, std::filebuf, filebuf_); \
81 BOOST_CHECK_BOOL_TRAIT(trait, std::wfilebuf, wfilebuf_); \
82 BOOST_CHECK_BOOL_TRAIT(trait, std::istringstream, istringstream_); \
83 BOOST_CHECK_BOOL_TRAIT(trait, std::wistringstream, wistringstream_); \
84 BOOST_CHECK_BOOL_TRAIT(trait, std::ostringstream, ostringstream_); \
85 BOOST_CHECK_BOOL_TRAIT(trait, std::wostringstream, wostringstream_); \
86 BOOST_CHECK_BOOL_TRAIT(trait, std::stringstream, stringstream_); \
87 BOOST_CHECK_BOOL_TRAIT(trait, std::wstringstream, wstringstream_); \
88 BOOST_CHECK_BOOL_TRAIT(trait, std::stringbuf, stringbuf_); \
89 BOOST_CHECK_BOOL_TRAIT(trait, std::wstringbuf, wstringbuf_); \
90 BOOST_CHECK_BOOL_TRAIT(trait, array_istream, array_istream_); \
91 BOOST_CHECK_BOOL_TRAIT(trait, array_wistream, array_wistream_); \
92 BOOST_CHECK_BOOL_TRAIT(trait, array_ostream, array_ostream_); \
93 BOOST_CHECK_BOOL_TRAIT(trait, array_wostream, array_wostream_); \
94 BOOST_CHECK_BOOL_TRAIT(trait, array_stream, array_stream_); \
95 BOOST_CHECK_BOOL_TRAIT(trait, array_wstream, array_wstream_); \
96 BOOST_CHECK_BOOL_TRAIT(trait, array_streambuf, array_streambuf_); \
97 BOOST_CHECK_BOOL_TRAIT(trait, array_wstreambuf, array_wstreambuf_); \
98 BOOST_CHECK_BOOL_TRAIT(trait, io::filtering_istream, filtering_istream_); \
99 BOOST_CHECK_BOOL_TRAIT(trait, io::filtering_wistream, filtering_wistream_); \
100 BOOST_CHECK_BOOL_TRAIT(trait, io::filtering_ostream, filtering_ostream_); \
101 BOOST_CHECK_BOOL_TRAIT(trait, io::filtering_wostream, filtering_wostream_); \
102 BOOST_CHECK_BOOL_TRAIT(trait, filtering_iostream, filtering_iostream_); \
103 BOOST_CHECK_BOOL_TRAIT(trait, filtering_wiostream, filtering_wiostream_); \
104 BOOST_CHECK_BOOL_TRAIT(trait, io::filtering_istreambuf, filtering_istreambuf_); \
105 BOOST_CHECK_BOOL_TRAIT(trait, io::filtering_wistreambuf, filtering_wistreambuf_); \
106 BOOST_CHECK_BOOL_TRAIT(trait, linkedbuf, linkedbuf_); \
107 BOOST_CHECK_BOOL_TRAIT(trait, wlinkedbuf, wlinkedbuf_); \
108 BOOST_CHECK_BOOL_TRAIT(trait, io::array, false); \
109 BOOST_CHECK_BOOL_TRAIT(trait, int, false);
110 /**/
111
bool_trait_test()112 void bool_trait_test()
113 {
114 // Test is_istream
115 BOOST_CHECK_STREAM_TRAIT(
116 io::is_istream,
117 true, true, false, false, true, true, false, false,
118 true, true, false, false, true, true, false, false,
119 true, true, false, false, true, true, false, false,
120 true, true, false, false, true, true, false, false,
121 true, true, false, false, true, true, false, false,
122 false, false
123 );
124
125 // Test is_ostream
126 BOOST_CHECK_STREAM_TRAIT(
127 io::is_ostream,
128 false, false, true, true, true, true, false, false,
129 false, false, true, true, true, true, false, false,
130 false, false, true, true, true, true, false, false,
131 false, false, true, true, true, true, false, false,
132 false, false, true, true, true, true, false, false,
133 false, false
134 );
135
136 // Test is_iostream
137 BOOST_CHECK_STREAM_TRAIT(
138 io::is_iostream,
139 false, false, false, false, true, true, false, false,
140 false, false, false, false, true, true, false, false,
141 false, false, false, false, true, true, false, false,
142 false, false, false, false, true, true, false, false,
143 false, false, false, false, true, true, false, false,
144 false, false
145 );
146
147 // Test is_streambuf
148 BOOST_CHECK_STREAM_TRAIT(
149 io::is_streambuf,
150 false, false, false, false, false, false, true, true,
151 false, false, false, false, false, false, true, true,
152 false, false, false, false, false, false, true, true,
153 false, false, false, false, false, false, true, true,
154 false, false, false, false, false, false, true, true,
155 true, true
156 );
157
158 // Test is_std_io
159 BOOST_CHECK_STREAM_TRAIT(
160 io::is_std_io,
161 true, true, true, true, true, true, true, true,
162 true, true, true, true, true, true, true, true,
163 true, true, true, true, true, true, true, true,
164 true, true, true, true, true, true, true, true,
165 true, true, true, true, true, true, true, true,
166 true, true
167 );
168
169 // Test is_std_file_device
170 BOOST_CHECK_STREAM_TRAIT(
171 io::is_std_file_device,
172 false, false, false, false, false, false, false, false,
173 true, true, true, true, true, true, true, true,
174 false, false, false, false, false, false, false, false,
175 false, false, false, false, false, false, false, false,
176 false, false, false, false, false, false, false, false,
177 false, false
178 );
179
180 // Test is_std_string_device
181 BOOST_CHECK_STREAM_TRAIT(
182 io::is_std_string_device,
183 false, false, false, false, false, false, false, false,
184 false, false, false, false, false, false, false, false,
185 true, true, true, true, true, true, true, true,
186 false, false, false, false, false, false, false, false,
187 false, false, false, false, false, false, false, false,
188 false, false
189 );
190
191 // Test is_boost_stream
192 BOOST_CHECK_STREAM_TRAIT(
193 io::detail::is_boost_stream,
194 false, false, false, false, false, false, false, false,
195 false, false, false, false, false, false, false, false,
196 false, false, false, false, false, false, false, false,
197 true, true, true, true, true, true, false, false,
198 false, false, false, false, false, false, false, false,
199 false, false
200 );
201
202 // Test is_boost_stream_buffer
203 BOOST_CHECK_STREAM_TRAIT(
204 io::detail::is_boost_stream_buffer,
205 false, false, false, false, false, false, false, false,
206 false, false, false, false, false, false, false, false,
207 false, false, false, false, false, false, false, false,
208 false, false, false, false, false, false, true, true,
209 false, false, false, false, false, false, false, false,
210 false, false
211 );
212
213 // Test is_filtering_stream
214 BOOST_CHECK_STREAM_TRAIT(
215 io::detail::is_filtering_stream,
216 false, false, false, false, false, false, false, false,
217 false, false, false, false, false, false, false, false,
218 false, false, false, false, false, false, false, false,
219 false, false, false, false, false, false, false, false,
220 true, true, true, true, true, true, false, false,
221 false, false
222 );
223
224 // Test is_filtering_streambuf
225 BOOST_CHECK_STREAM_TRAIT(
226 io::detail::is_filtering_streambuf,
227 false, false, false, false, false, false, false, false,
228 false, false, false, false, false, false, false, false,
229 false, false, false, false, false, false, false, false,
230 false, false, false, false, false, false, false, false,
231 false, false, false, false, false, false, true, true,
232 false, false
233 );
234
235 // Test is_boost
236 BOOST_CHECK_STREAM_TRAIT(
237 io::detail::is_boost,
238 false, false, false, false, false, false, false, false,
239 false, false, false, false, false, false, false, false,
240 false, false, false, false, false, false, false, false,
241 true, true, true, true, true, true, true, true,
242 true, true, true, true, true, true, true, true,
243 false, false
244 );
245 }
246
init_unit_test_suite(int,char * [])247 test_suite* init_unit_test_suite(int, char* [])
248 {
249 test_suite* test = BOOST_TEST_SUITE("bool trait test");
250 test->add(BOOST_TEST_CASE(&bool_trait_test));
251 return test;
252 }
253