/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // test_list.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 #include #include #include #include #include #include #ifdef BOOST_HAS_SLIST #include #endif #include #include #include "test_tools.hpp" #include "A.hpp" template struct ptr_equal_to : public std::binary_function { BOOST_STATIC_ASSERT(::boost::is_pointer::value); bool operator()(T const _Left, T const _Right) const { if(NULL == _Left && NULL == _Right) return true; if(typeid(*_Left) != typeid(*_Right)) return false; return *_Left == *_Right; } }; int test_main( int /* argc */, char* /* argv */[] ) { const char * testfile = tmpnam(NULL); BOOST_REQUIRE(NULL != testfile); std::list alist; alist.push_back(new A); alist.push_back(new A); { test_ostream os(testfile, TEST_STREAM_FLAGS); test_oarchive oa(os); alist.push_back(new A); alist.push_back(new A); oa << boost::serialization::make_nvp("alist", alist); } std::list alist1; { test_istream is(testfile, TEST_STREAM_FLAGS); test_iarchive ia(is); ia >> boost::serialization::make_nvp("alist", alist1); } BOOST_CHECK(alist.size() == alist1.size() && std::equal(alist.begin(),alist.end(),alist1.begin(),ptr_equal_to()) ); std::for_each( alist.begin(), alist.end(), boost::checked_deleter() ); std::for_each( alist1.begin(), alist1.end(), boost::checked_deleter() ); #ifdef BOOST_HAS_SLIST std::list aslist; aslist.push_back(new A); aslist.push_back(new A); { test_ostream os(testfile, TEST_STREAM_FLAGS); test_oarchive oa(os); aslist.push_back(new A); aslist.push_back(new A); oa << boost::serialization::make_nvp("aslist", aslist); } std::list aslist1;{ test_istream is(testfile, TEST_STREAM_FLAGS); test_iarchive ia(is); ia >> boost::serialization::make_nvp("aslist", aslist1); } BOOST_CHECK(aslist.size() == aslist1.size() && std::equal(aslist.begin(),aslist.end(),aslist1.begin(),ptr_equal_to()) ); std::for_each( aslist.begin(), aslist.end(), boost::checked_deleter() ); std::for_each( aslist1.begin(), aslist1.end(), boost::checked_deleter() ); #endif std::remove(testfile); return boost::exit_success; } // EOF