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 | |
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 | |
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 | |