/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // test_codecvt_null.cpp // (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . // Use, modification and distribution is subject to 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) // should pass compilation and execution. Note: compilation with compilers // which use wchar_t as 2 byte objects will emit warnings. These should be // ignored. #include #include #include #include #include #include #include #include "test_tools.hpp" #include #include #include #include template struct test_data { static wchar_t wchar_encoding[]; }; template<> wchar_t test_data<2>::wchar_encoding[] = { 0x0001, 0x007f, 0x0080, 0x07ff, 0x0800, 0x7fff }; template<> wchar_t test_data<4>::wchar_encoding[] = { 0x00000001, 0x0000007f, 0x00000080, 0x000007ff, 0x00000800, 0x0000ffff, 0x00010000, 0x0010ffff, 0x001fffff, 0x00200000, 0x03ffffff, 0x04000000, 0x7fffffff }; int test_main( int /* argc */, char* /* argv */[] ) { const char * testfile = tmpnam(NULL); BOOST_REQUIRE(NULL != testfile); std::locale old_loc; std::locale * null_locale = boost::archive::add_facet(old_loc, new boost::archive::codecvt_null); typedef test_data td; { std::wofstream ofs; ofs.imbue(*null_locale); ofs.open(testfile, std::ios::binary); std::copy( td::wchar_encoding, // borland 5.60 complains about this // td::wchar_encoding + sizeof(td::wchar_encoding)/sizeof(wchar_t), // so use this instead td::wchar_encoding + 13, boost::archive::iterators::ostream_iterator(ofs) ); } bool ok = false; { std::wifstream ifs; ifs.imbue(*null_locale); ifs.open(testfile, std::ios::binary); ok = std::equal( td::wchar_encoding, // borland 5.60 complains about this // td::wchar_encoding + sizeof(td::wchar_encoding)/sizeof(wchar_t), // so use this instead td::wchar_encoding + 13, boost::archive::iterators::istream_iterator(ifs) ); } BOOST_TEST(ok); { std::wofstream ofs("testfile2"); ofs.imbue(*null_locale); int i = 10; ofs << i; ofs.close(); std::wifstream ifs("testfile2"); ifs.imbue(*null_locale); int i2; ifs >> i2; BOOST_CHECK(i == i2); ifs.close(); } delete null_locale; std::remove(testfile); return boost::exit_success; }