1#include <memory>
2
3#include "cppunit/cppunit_proxy.h"
4
5#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)
6using namespace std;
7#endif
8
9//
10// TestCase class
11//
12class MemoryTest : public CPPUNIT_NS::TestCase
13{
14  CPPUNIT_TEST_SUITE(MemoryTest);
15#if defined (_STLP_MSVC) && (_STLP_MSVC < 1310)
16  CPPUNIT_IGNORE;
17#endif
18  CPPUNIT_TEST(auto_ptr_test);
19  CPPUNIT_TEST_SUITE_END();
20
21protected:
22  void auto_ptr_test();
23};
24
25CPPUNIT_TEST_SUITE_REGISTRATION(MemoryTest);
26
27#if !defined (_STLP_MSVC) || (_STLP_MSVC >= 1310)
28auto_ptr<int> CreateAutoPtr(int val)
29{ return auto_ptr<int>(new int(val)); }
30
31bool CheckEquality(auto_ptr<int> pint, int val)
32{ return *pint == val; }
33#endif
34
35//
36// tests implementation
37//
38void MemoryTest::auto_ptr_test()
39{
40#if !defined (_STLP_MSVC) || (_STLP_MSVC >= 1310)
41  {
42    auto_ptr<int> pint(new int(1));
43    CPPUNIT_ASSERT( *pint == 1 );
44    *pint = 2;
45    CPPUNIT_ASSERT( *pint == 2 );
46  }
47
48  {
49    auto_ptr<int> pint(CreateAutoPtr(3));
50    CPPUNIT_ASSERT( *pint == 3 );
51    CPPUNIT_ASSERT( CheckEquality(pint, 3) );
52  }
53
54  {
55    auto_ptr<const int> pint(new int(2));
56    CPPUNIT_ASSERT( *pint == 2 );
57  }
58  {
59    auto_ptr<volatile int> pint(new int(2));
60    CPPUNIT_ASSERT( *pint == 2 );
61  }
62  {
63    auto_ptr<const volatile int> pint(new int(2));
64    CPPUNIT_ASSERT( *pint == 2 );
65  }
66#endif
67}
68