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