root/library/tests/testsuite/shared_ptr_test.cpp @ 1253

Revision 1064, 2.3 kB (checked in by mido, 14 years ago)

astyle applied all over the library

  • Property svn:eol-style set to native
Line 
1#include "shared_ptr.h"
2#include "UnitTest++.h"
3#include <stdexcept>
4#include <vector>
5
6class Foo {
7private:
8    int x;
9
10public:
11    Foo ( int x ) : x ( x ) { }
12
13    int get_x() const {
14        return x;
15    }
16
17    void set_x ( int nx ) {
18        x = nx;
19    }
20};
21
22typedef std::vector<bdm::shared_ptr<Foo> > TFooVector;
23
24typedef std::vector<bdm::shared_ptr<const Foo> > TConstFooVector;
25
26TEST ( shared_ptr_test ) {
27    TFooVector v;
28
29    bdm::shared_ptr<Foo> zero;
30    CHECK_EQUAL ( 0l, zero.use_count() );
31    bdm::shared_ptr<Foo> z2 ( zero );
32    CHECK_EQUAL ( 0l, z2.use_count() );
33
34    bdm::shared_ptr<Foo> one ( new Foo ( 1 ) );
35    v.push_back ( one );
36    CHECK ( !one.unique() );
37
38    v.push_back ( one );
39    v.push_back ( bdm::shared_ptr<Foo> ( new Foo ( 2 ) ) );
40    CHECK_EQUAL ( static_cast<TFooVector::size_type> ( 3 ), v.size() );
41
42    CHECK ( v[0] == v[1] );
43    CHECK ( v[1] != v[2] );
44
45    Foo c ( * ( v[0] ) );
46    CHECK_EQUAL ( 1, c.get_x() );
47
48    Foo *p = v[1].get();
49    CHECK_EQUAL ( 1, p->get_x() );
50    p->set_x ( 12 );
51    CHECK_EQUAL ( 12, one->get_x() );
52
53    CHECK ( v[2].unique() );
54    CHECK_EQUAL ( 2, v[2]->get_x() );
55}
56
57TEST ( shared_ptr_const_test ) {
58    TConstFooVector v;
59
60    bdm::shared_ptr<const Foo> zero;
61    CHECK_EQUAL ( 0l, zero.use_count() );
62    bdm::shared_ptr<const Foo> z2 ( zero );
63    CHECK_EQUAL ( 0l, z2.use_count() );
64
65    bdm::shared_ptr<const Foo> one ( new Foo ( 1 ) );
66    v.push_back ( one );
67    CHECK ( !one.unique() );
68
69    v.push_back ( one );
70    v.push_back ( bdm::shared_ptr<const Foo> ( new Foo ( 2 ) ) );
71    CHECK_EQUAL ( static_cast<TConstFooVector::size_type> ( 3 ), v.size() );
72
73    CHECK ( v[0] == v[1] );
74    CHECK ( v[1] != v[2] );
75
76    Foo c ( * ( v[0] ) );
77    CHECK_EQUAL ( 1, c.get_x() );
78
79    const Foo *p = v[1].get();
80    CHECK_EQUAL ( 1, p->get_x() );
81
82    CHECK ( v[2].unique() );
83    CHECK_EQUAL ( 2, v[2]->get_x() );
84
85    bdm::shared_ptr<Foo> non_const;
86    bdm::shared_ptr<const Foo> another ( non_const );
87    CHECK ( !non_const.unique() );
88}
89
90// tested runtime check is only in debug version
91#ifndef NDEBUG
92TEST ( shared_ptr_error_test ) {
93    bdm::shared_ptr<Foo> empty;
94    try {
95        Foo x ( *empty );
96        CHECK ( false );
97    } catch ( std::runtime_error &exc ) {
98        CHECK ( exc.what() );
99    }
100}
101#endif
Note: See TracBrowser for help on using the browser.