/* * Distributed under the Boost Software License, Version 1.0.(See accompanying * file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.) * * See http://www.boost.org/libs/iostreams for documentation. * * Tests the boolean type traits defined in boost/iostreams/traits.hpp. * * File: libs/iostreams/test/bool_trait_test.cpp * Date: Sun Feb 17 17:52:59 MST 2008 * Copyright: 2008 CodeRage, LLC * Author: Jonathan Turkanis * Contact: turkanis at coderage dot com */ #include #include #include #include #include #include #include #include #include #include #include #include using namespace boost::iostreams; namespace io = boost::iostreams; using boost::unit_test::test_suite; typedef stream array_istream; typedef stream array_wistream; typedef stream array_ostream; typedef stream array_wostream; typedef stream array_stream; typedef stream array_wstream; typedef stream_buffer array_streambuf; typedef stream_buffer array_wstreambuf; typedef io::filtering_stream filtering_iostream; typedef io::filtering_stream filtering_wiostream; typedef io::detail::linked_streambuf linkedbuf; typedef io::detail::linked_streambuf wlinkedbuf; #define BOOST_CHECK_BOOL_TRAIT(trait, type, status) \ BOOST_CHECK(trait< type >::value == status) /**/ #define BOOST_CHECK_STREAM_TRAIT( \ trait, \ istream_, wistream_, ostream_, wostream_, \ iostream_, wiostream_, streambuf_, wstreambuf_, \ ifstream_, wifstream_, ofstream_, wofstream_, \ fstream_, wfstream_, filebuf_, wfilebuf_, \ istringstream_, wistringstream_, ostringstream_, wostringstream_, \ stringstream_, wstringstream_, stringbuf_, wstringbuf_, \ array_istream_, array_wistream_, array_ostream_, array_wostream_, \ array_stream_, array_wstream_, array_streambuf_, array_wstreambuf_, \ filtering_istream_, filtering_wistream_, \ filtering_ostream_, filtering_wostream_, \ filtering_iostream_, filtering_wiostream_, \ filtering_istreambuf_, filtering_wistreambuf_, \ linkedbuf_, wlinkedbuf_ ) \ BOOST_CHECK_BOOL_TRAIT(trait, std::istream, istream_); \ BOOST_CHECK_BOOL_TRAIT(trait, std::wistream, wistream_); \ BOOST_CHECK_BOOL_TRAIT(trait, std::ostream, ostream_); \ BOOST_CHECK_BOOL_TRAIT(trait, std::wostream, wostream_); \ BOOST_CHECK_BOOL_TRAIT(trait, std::iostream, iostream_); \ BOOST_CHECK_BOOL_TRAIT(trait, std::wiostream, wiostream_); \ BOOST_CHECK_BOOL_TRAIT(trait, std::streambuf, streambuf_); \ BOOST_CHECK_BOOL_TRAIT(trait, std::wstreambuf, wstreambuf_); \ BOOST_CHECK_BOOL_TRAIT(trait, std::wifstream, wifstream_); \ BOOST_CHECK_BOOL_TRAIT(trait, std::ofstream, ofstream_); \ BOOST_CHECK_BOOL_TRAIT(trait, std::wofstream, wofstream_); \ BOOST_CHECK_BOOL_TRAIT(trait, std::fstream, fstream_); \ BOOST_CHECK_BOOL_TRAIT(trait, std::wfstream, wfstream_); \ BOOST_CHECK_BOOL_TRAIT(trait, std::filebuf, filebuf_); \ BOOST_CHECK_BOOL_TRAIT(trait, std::wfilebuf, wfilebuf_); \ BOOST_CHECK_BOOL_TRAIT(trait, std::istringstream, istringstream_); \ BOOST_CHECK_BOOL_TRAIT(trait, std::wistringstream, wistringstream_); \ BOOST_CHECK_BOOL_TRAIT(trait, std::ostringstream, ostringstream_); \ BOOST_CHECK_BOOL_TRAIT(trait, std::wostringstream, wostringstream_); \ BOOST_CHECK_BOOL_TRAIT(trait, std::stringstream, stringstream_); \ BOOST_CHECK_BOOL_TRAIT(trait, std::wstringstream, wstringstream_); \ BOOST_CHECK_BOOL_TRAIT(trait, std::stringbuf, stringbuf_); \ BOOST_CHECK_BOOL_TRAIT(trait, std::wstringbuf, wstringbuf_); \ BOOST_CHECK_BOOL_TRAIT(trait, array_istream, array_istream_); \ BOOST_CHECK_BOOL_TRAIT(trait, array_wistream, array_wistream_); \ BOOST_CHECK_BOOL_TRAIT(trait, array_ostream, array_ostream_); \ BOOST_CHECK_BOOL_TRAIT(trait, array_wostream, array_wostream_); \ BOOST_CHECK_BOOL_TRAIT(trait, array_stream, array_stream_); \ BOOST_CHECK_BOOL_TRAIT(trait, array_wstream, array_wstream_); \ BOOST_CHECK_BOOL_TRAIT(trait, array_streambuf, array_streambuf_); \ BOOST_CHECK_BOOL_TRAIT(trait, array_wstreambuf, array_wstreambuf_); \ BOOST_CHECK_BOOL_TRAIT(trait, io::filtering_istream, filtering_istream_); \ BOOST_CHECK_BOOL_TRAIT(trait, io::filtering_wistream, filtering_wistream_); \ BOOST_CHECK_BOOL_TRAIT(trait, io::filtering_ostream, filtering_ostream_); \ BOOST_CHECK_BOOL_TRAIT(trait, io::filtering_wostream, filtering_wostream_); \ BOOST_CHECK_BOOL_TRAIT(trait, filtering_iostream, filtering_iostream_); \ BOOST_CHECK_BOOL_TRAIT(trait, filtering_wiostream, filtering_wiostream_); \ BOOST_CHECK_BOOL_TRAIT(trait, io::filtering_istreambuf, filtering_istreambuf_); \ BOOST_CHECK_BOOL_TRAIT(trait, io::filtering_wistreambuf, filtering_wistreambuf_); \ BOOST_CHECK_BOOL_TRAIT(trait, linkedbuf, linkedbuf_); \ BOOST_CHECK_BOOL_TRAIT(trait, wlinkedbuf, wlinkedbuf_); \ BOOST_CHECK_BOOL_TRAIT(trait, io::array, false); \ BOOST_CHECK_BOOL_TRAIT(trait, int, false); /**/ void bool_trait_test() { // Test is_istream BOOST_CHECK_STREAM_TRAIT( io::is_istream, true, true, false, false, true, true, false, false, true, true, false, false, true, true, false, false, true, true, false, false, true, true, false, false, true, true, false, false, true, true, false, false, true, true, false, false, true, true, false, false, false, false ); // Test is_ostream BOOST_CHECK_STREAM_TRAIT( io::is_ostream, false, false, true, true, true, true, false, false, false, false, true, true, true, true, false, false, false, false, true, true, true, true, false, false, false, false, true, true, true, true, false, false, false, false, true, true, true, true, false, false, false, false ); // Test is_iostream BOOST_CHECK_STREAM_TRAIT( io::is_iostream, false, false, false, false, true, true, false, false, false, false, false, false, true, true, false, false, false, false, false, false, true, true, false, false, false, false, false, false, true, true, false, false, false, false, false, false, true, true, false, false, false, false ); // Test is_streambuf BOOST_CHECK_STREAM_TRAIT( io::is_streambuf, false, false, false, false, false, false, true, true, false, false, false, false, false, false, true, true, false, false, false, false, false, false, true, true, false, false, false, false, false, false, true, true, false, false, false, false, false, false, true, true, true, true ); // Test is_std_io BOOST_CHECK_STREAM_TRAIT( io::is_std_io, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true ); // Test is_std_file_device BOOST_CHECK_STREAM_TRAIT( io::is_std_file_device, false, false, false, false, false, false, false, false, true, true, true, true, true, true, true, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false ); // Test is_std_string_device BOOST_CHECK_STREAM_TRAIT( io::is_std_string_device, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, true, true, true, true, true, true, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false ); // Test is_boost_stream BOOST_CHECK_STREAM_TRAIT( io::detail::is_boost_stream, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, true, true, true, true, true, false, false, false, false, false, false, false, false, false, false, false, false ); // Test is_boost_stream_buffer BOOST_CHECK_STREAM_TRAIT( io::detail::is_boost_stream_buffer, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, true, false, false, false, false, false, false, false, false, false, false ); // Test is_filtering_stream BOOST_CHECK_STREAM_TRAIT( io::detail::is_filtering_stream, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, true, true, true, true, true, false, false, false, false ); // Test is_filtering_streambuf BOOST_CHECK_STREAM_TRAIT( io::detail::is_filtering_streambuf, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, true, false, false ); // Test is_boost BOOST_CHECK_STREAM_TRAIT( io::detail::is_boost, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, false ); } test_suite* init_unit_test_suite(int, char* []) { test_suite* test = BOOST_TEST_SUITE("bool trait test"); test->add(BOOST_TEST_CASE(&bool_trait_test)); return test; }