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

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
RevLine 
[419]1#include "shared_ptr.h"
2#include "UnitTest++.h"
[565]3#include <stdexcept>
[419]4#include <vector>
5
[477]6class Foo {
[419]7private:
[1064]8    int x;
[419]9
10public:
[1064]11    Foo ( int x ) : x ( x ) { }
[419]12
[1064]13    int get_x() const {
14        return x;
15    }
[419]16
[1064]17    void set_x ( int nx ) {
18        x = nx;
19    }
[419]20};
21
22typedef std::vector<bdm::shared_ptr<Foo> > TFooVector;
23
[570]24typedef std::vector<bdm::shared_ptr<const Foo> > TConstFooVector;
25
[689]26TEST ( shared_ptr_test ) {
[1064]27    TFooVector v;
[419]28
[1064]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() );
[419]33
[1064]34    bdm::shared_ptr<Foo> one ( new Foo ( 1 ) );
35    v.push_back ( one );
36    CHECK ( !one.unique() );
[419]37
[1064]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() );
[419]41
[1064]42    CHECK ( v[0] == v[1] );
43    CHECK ( v[1] != v[2] );
[421]44
[1064]45    Foo c ( * ( v[0] ) );
46    CHECK_EQUAL ( 1, c.get_x() );
[419]47
[1064]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() );
[477]52
[1064]53    CHECK ( v[2].unique() );
54    CHECK_EQUAL ( 2, v[2]->get_x() );
[419]55}
[565]56
[689]57TEST ( shared_ptr_const_test ) {
[1064]58    TConstFooVector v;
[570]59
[1064]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() );
[570]64
[1064]65    bdm::shared_ptr<const Foo> one ( new Foo ( 1 ) );
66    v.push_back ( one );
67    CHECK ( !one.unique() );
[570]68
[1064]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() );
[570]72
[1064]73    CHECK ( v[0] == v[1] );
74    CHECK ( v[1] != v[2] );
[570]75
[1064]76    Foo c ( * ( v[0] ) );
77    CHECK_EQUAL ( 1, c.get_x() );
[570]78
[1064]79    const Foo *p = v[1].get();
80    CHECK_EQUAL ( 1, p->get_x() );
[570]81
[1064]82    CHECK ( v[2].unique() );
83    CHECK_EQUAL ( 2, v[2]->get_x() );
[570]84
[1064]85    bdm::shared_ptr<Foo> non_const;
86    bdm::shared_ptr<const Foo> another ( non_const );
87    CHECK ( !non_const.unique() );
[570]88}
89
[589]90// tested runtime check is only in debug version
91#ifndef NDEBUG
[689]92TEST ( shared_ptr_error_test ) {
[1064]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    }
[565]100}
[589]101#endif
Note: See TracBrowser for help on using the browser.