xref: /trunk/main/o3tl/qa/test-cow_wrapper.cxx (revision cdf0e10c)
1 // autogenerated file with codegen.pl
2 
3 #include "preextstl.h"
4 #include "cppunit/TestAssert.h"
5 #include "cppunit/TestFixture.h"
6 #include "cppunit/extensions/HelperMacros.h"
7 #include "cppunit/plugin/TestPlugIn.h"
8 #include "postextstl.h"
9 
10 #include "cow_wrapper_clients.hxx"
11 
12 using namespace ::o3tl;
13 using namespace ::o3tltests;
14 
15 
16 class cow_wrapper_test : public CppUnit::TestFixture
17 {
18 public:
19     template< class T > void test( T& rTestObj1, T& rTestObj2, T& rTestObj3 )
20     {
21         CPPUNIT_ASSERT_MESSAGE("rTestObj1 is unique",
22                                rTestObj1.is_unique() );
23         CPPUNIT_ASSERT_MESSAGE("rTestObj2 is unique",
24                                rTestObj2.is_unique() );
25         CPPUNIT_ASSERT_MESSAGE("rTestObj3 is unique",
26                                rTestObj3.is_unique() );
27 
28         CPPUNIT_ASSERT_MESSAGE("rTestObj1 != rTestObj2",
29                                rTestObj1 != rTestObj2 );
30         CPPUNIT_ASSERT_MESSAGE("rTestObj2 != rTestObj3",
31                                rTestObj2 != rTestObj3 );
32         CPPUNIT_ASSERT_MESSAGE("rTestObj1 != rTestObj3",
33                                rTestObj1 != rTestObj3 );
34         CPPUNIT_ASSERT_MESSAGE("rTestObj1 < rTestObj2",
35                                rTestObj1 < rTestObj2 );
36         CPPUNIT_ASSERT_MESSAGE("rTestObj2 < rTestObj3",
37                                rTestObj2 < rTestObj3 );
38 
39         rTestObj2 = rTestObj1;
40         rTestObj3 = rTestObj1;
41         CPPUNIT_ASSERT_MESSAGE("rTestObj1 == rTestObj2",
42                                rTestObj1 == rTestObj2 );
43         CPPUNIT_ASSERT_MESSAGE("rTestObj1 == rTestObj3",
44                                rTestObj1 == rTestObj3 );
45         CPPUNIT_ASSERT_MESSAGE("rTestObj1.use_count() == 3",
46                                rTestObj1.use_count() == 3 );
47         CPPUNIT_ASSERT_MESSAGE("rTestObj2.use_count() == 3",
48                                rTestObj2.use_count() == 3 );
49         CPPUNIT_ASSERT_MESSAGE("rTestObj3.use_count() == 3",
50                                rTestObj3.use_count() == 3 );
51 
52         rTestObj2.makeUnique();
53         CPPUNIT_ASSERT_MESSAGE("rTestObj1 == rTestObj2",
54                                rTestObj1 == rTestObj2 );
55         CPPUNIT_ASSERT_MESSAGE("rTestObj1 == rTestObj3",
56                                rTestObj1 == rTestObj3 );
57         CPPUNIT_ASSERT_MESSAGE("rTestObj1.use_count() == 2",
58                                rTestObj1.use_count() == 2 );
59         CPPUNIT_ASSERT_MESSAGE("rTestObj2.use_count() == 1",
60                                rTestObj2.use_count() == 1 );
61         CPPUNIT_ASSERT_MESSAGE("rTestObj2.is_unique()",
62                                rTestObj2.is_unique() );
63         CPPUNIT_ASSERT_MESSAGE("rTestObj3.use_count() == 2",
64                                rTestObj3.use_count() == 2 );
65 
66         rTestObj2.swap( rTestObj3 );
67         CPPUNIT_ASSERT_MESSAGE("rTestObj1 == rTestObj2",
68                                rTestObj1 == rTestObj2 );
69         CPPUNIT_ASSERT_MESSAGE("rTestObj1 == rTestObj3",
70                                rTestObj1 == rTestObj3 );
71         CPPUNIT_ASSERT_MESSAGE("rTestObj1.use_count() == 2",
72                                rTestObj1.use_count() == 2 );
73         CPPUNIT_ASSERT_MESSAGE("rTestObj2.use_count() == 2",
74                                rTestObj2.use_count() == 2 );
75         CPPUNIT_ASSERT_MESSAGE("rTestObj3.use_count() == 1",
76                                rTestObj3.use_count() == 1 );
77         CPPUNIT_ASSERT_MESSAGE("rTestObj3.is_unique()",
78                                rTestObj3.is_unique() );
79     }
80 
81     void testCowWrapper()
82     {
83         // setup
84         cow_wrapper_client1 aTestObj1;
85         cow_wrapper_client1 aTestObj2;
86         cow_wrapper_client1 aTestObj3;
87 
88         cow_wrapper_client2 aTestObj4;
89         cow_wrapper_client2 aTestObj5;
90         cow_wrapper_client2 aTestObj6;
91 
92         cow_wrapper_client3 aTestObj7;
93         cow_wrapper_client3 aTestObj8;
94         cow_wrapper_client3 aTestObj9;
95 
96         {
97             aTestObj1 = cow_wrapper_client1( 1 );
98             aTestObj2.modify( 2 );
99             aTestObj3.modify( 3 );
100 
101             aTestObj4 = cow_wrapper_client2( 4 );
102             aTestObj5.modify( 5 );
103             aTestObj6.modify( 6 );
104 
105             aTestObj7 = cow_wrapper_client3( 7 );
106             aTestObj8.modify( 8 );
107             aTestObj9.modify( 9 );
108         }
109         // all three temporaries are dead now
110 
111         // test
112         test( aTestObj1, aTestObj2, aTestObj3 );
113         test( aTestObj4, aTestObj5, aTestObj6 );
114         test( aTestObj7, aTestObj8, aTestObj9 );
115     }
116 
117     // Change the following lines only, if you add, remove or rename
118     // member functions of the current class,
119     // because these macros are need by auto register mechanism.
120 
121     CPPUNIT_TEST_SUITE(cow_wrapper_test);
122     CPPUNIT_TEST(testCowWrapper);
123     CPPUNIT_TEST_SUITE_END();
124 };
125 
126 // -----------------------------------------------------------------------------
127 CPPUNIT_TEST_SUITE_REGISTRATION(cow_wrapper_test);
128 
129 CPPUNIT_PLUGIN_IMPLEMENT();
130