bool_trait_test.cpp 11 KB

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