1#include <functional> 2 3#if !defined(_STLP_NO_EXTENSIONS) && defined(_STLP_USE_BOOST_SUPPORT) 4 5#include <typeinfo> 6#include "cppunit/cppunit_proxy.h" 7 8#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES) 9using namespace std; 10#endif 11 12class RefWrapperTest : 13 public CPPUNIT_NS::TestCase 14{ 15 CPPUNIT_TEST_SUITE(RefWrapperTest); 16 CPPUNIT_TEST(ref); 17 CPPUNIT_TEST(cref); 18 CPPUNIT_TEST_SUITE_END(); 19 20 protected: 21 void ref(); 22 void cref(); 23}; 24 25CPPUNIT_TEST_SUITE_REGISTRATION(RefWrapperTest); 26 27void RefWrapperTest::ref() 28{ 29 typedef std::tr1::reference_wrapper<int> rr_type; 30 31 CPPUNIT_CHECK( (::boost::is_convertible<rr_type, int&>::value) ); 32 CPPUNIT_CHECK( (::boost::is_same<rr_type::type, int>::value) ); 33 34 int i = 1; 35 int j = 2; 36 37 rr_type r1 = std::tr1::ref(i); 38 39 CPPUNIT_CHECK( r1.get() == 1 ); 40 41 r1 = std::tr1::ref(j); 42 43 CPPUNIT_CHECK( r1.get() == 2 ); 44 45 i = 3; 46 47 CPPUNIT_CHECK( r1.get() == 2 ); 48 49 j = 4; 50 51 CPPUNIT_CHECK( r1.get() == 4 ); 52 53 r1.get() = 5; 54 55 CPPUNIT_CHECK( j == 5 ); 56} 57 58void RefWrapperTest::cref() 59{ 60 typedef std::tr1::reference_wrapper<const int> crr_type; 61 62 CPPUNIT_CHECK( (::boost::is_convertible<crr_type, const int&>::value) ); 63 CPPUNIT_CHECK( (::boost::is_same<crr_type::type, const int>::value) ); 64 65 int i = 1; 66 int j = 2; 67 68 crr_type r1 = std::tr1::cref(i); 69 70 CPPUNIT_CHECK( r1.get() == 1 ); 71 72 r1 = std::tr1::cref(j); 73 74 CPPUNIT_CHECK( r1.get() == 2 ); 75 76 i = 3; 77 78 CPPUNIT_CHECK( r1.get() == 2 ); 79 80 j = 4; 81 82 CPPUNIT_CHECK( r1.get() == 4 ); 83} 84 85#endif /* !_STLP_NO_EXTENSIONS && _STLP_USE_BOOST_SUPPORT */ 86