#include <functional> #if !defined(_STLP_NO_EXTENSIONS) && defined(_STLP_USE_BOOST_SUPPORT) #include <typeinfo> #include "cppunit/cppunit_proxy.h" #if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES) using namespace std; #endif class RefWrapperTest : public CPPUNIT_NS::TestCase { CPPUNIT_TEST_SUITE(RefWrapperTest); CPPUNIT_TEST(ref); CPPUNIT_TEST(cref); CPPUNIT_TEST_SUITE_END(); protected: void ref(); void cref(); }; CPPUNIT_TEST_SUITE_REGISTRATION(RefWrapperTest); void RefWrapperTest::ref() { typedef std::tr1::reference_wrapper<int> rr_type; CPPUNIT_CHECK( (::boost::is_convertible<rr_type, int&>::value) ); CPPUNIT_CHECK( (::boost::is_same<rr_type::type, int>::value) ); int i = 1; int j = 2; rr_type r1 = std::tr1::ref(i); CPPUNIT_CHECK( r1.get() == 1 ); r1 = std::tr1::ref(j); CPPUNIT_CHECK( r1.get() == 2 ); i = 3; CPPUNIT_CHECK( r1.get() == 2 ); j = 4; CPPUNIT_CHECK( r1.get() == 4 ); r1.get() = 5; CPPUNIT_CHECK( j == 5 ); } void RefWrapperTest::cref() { typedef std::tr1::reference_wrapper<const int> crr_type; CPPUNIT_CHECK( (::boost::is_convertible<crr_type, const int&>::value) ); CPPUNIT_CHECK( (::boost::is_same<crr_type::type, const int>::value) ); int i = 1; int j = 2; crr_type r1 = std::tr1::cref(i); CPPUNIT_CHECK( r1.get() == 1 ); r1 = std::tr1::cref(j); CPPUNIT_CHECK( r1.get() == 2 ); i = 3; CPPUNIT_CHECK( r1.get() == 2 ); j = 4; CPPUNIT_CHECK( r1.get() == 4 ); } #endif /* !_STLP_NO_EXTENSIONS && _STLP_USE_BOOST_SUPPORT */