xref: /trunk/main/o3tl/qa/test-cow_wrapper.cxx (revision 18cf0442)
131682d32SAndrew Rist /**************************************************************
231682d32SAndrew Rist  *
331682d32SAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
431682d32SAndrew Rist  * or more contributor license agreements.  See the NOTICE file
531682d32SAndrew Rist  * distributed with this work for additional information
631682d32SAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
731682d32SAndrew Rist  * to you under the Apache License, Version 2.0 (the
831682d32SAndrew Rist  * "License"); you may not use this file except in compliance
931682d32SAndrew Rist  * with the License.  You may obtain a copy of the License at
1031682d32SAndrew Rist  *
1131682d32SAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
1231682d32SAndrew Rist  *
1331682d32SAndrew Rist  * Unless required by applicable law or agreed to in writing,
1431682d32SAndrew Rist  * software distributed under the License is distributed on an
1531682d32SAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
1631682d32SAndrew Rist  * KIND, either express or implied.  See the License for the
1731682d32SAndrew Rist  * specific language governing permissions and limitations
1831682d32SAndrew Rist  * under the License.
1931682d32SAndrew Rist  *
2031682d32SAndrew Rist  *************************************************************/
2131682d32SAndrew Rist 
22cdf0e10cSrcweir // autogenerated file with codegen.pl
23cdf0e10cSrcweir 
24cdf0e10cSrcweir #include "preextstl.h"
25*18cf0442SDamjan Jovanovic #include "gtest/gtest.h"
26cdf0e10cSrcweir #include "postextstl.h"
27cdf0e10cSrcweir 
28cdf0e10cSrcweir #include "cow_wrapper_clients.hxx"
29cdf0e10cSrcweir 
30cdf0e10cSrcweir using namespace ::o3tl;
31cdf0e10cSrcweir using namespace ::o3tltests;
32cdf0e10cSrcweir 
33cdf0e10cSrcweir 
34*18cf0442SDamjan Jovanovic class cow_wrapper_test : public ::testing::Test
35cdf0e10cSrcweir {
36cdf0e10cSrcweir public:
test(T & rTestObj1,T & rTestObj2,T & rTestObj3)37cdf0e10cSrcweir     template< class T > void test( T& rTestObj1, T& rTestObj2, T& rTestObj3 )
38cdf0e10cSrcweir     {
39*18cf0442SDamjan Jovanovic         ASSERT_TRUE(rTestObj1.is_unique() ) << "rTestObj1 is unique";
40*18cf0442SDamjan Jovanovic         ASSERT_TRUE(rTestObj2.is_unique() ) << "rTestObj2 is unique";
41*18cf0442SDamjan Jovanovic         ASSERT_TRUE(rTestObj3.is_unique() ) << "rTestObj3 is unique";
42*18cf0442SDamjan Jovanovic 
43*18cf0442SDamjan Jovanovic         ASSERT_TRUE(rTestObj1 != rTestObj2 ) << "rTestObj1 != rTestObj2";
44*18cf0442SDamjan Jovanovic         ASSERT_TRUE(rTestObj2 != rTestObj3 ) << "rTestObj2 != rTestObj3";
45*18cf0442SDamjan Jovanovic         ASSERT_TRUE(rTestObj1 != rTestObj3 ) << "rTestObj1 != rTestObj3";
46*18cf0442SDamjan Jovanovic         ASSERT_TRUE(rTestObj1 < rTestObj2 ) << "rTestObj1 < rTestObj2";
47*18cf0442SDamjan Jovanovic         ASSERT_TRUE(rTestObj2 < rTestObj3 ) << "rTestObj2 < rTestObj3";
48cdf0e10cSrcweir 
49cdf0e10cSrcweir         rTestObj2 = rTestObj1;
50cdf0e10cSrcweir         rTestObj3 = rTestObj1;
51*18cf0442SDamjan Jovanovic         ASSERT_TRUE(rTestObj1 == rTestObj2 ) << "rTestObj1 == rTestObj2";
52*18cf0442SDamjan Jovanovic         ASSERT_TRUE(rTestObj1 == rTestObj3 ) << "rTestObj1 == rTestObj3";
53*18cf0442SDamjan Jovanovic         ASSERT_TRUE(rTestObj1.use_count() == 3 ) << "rTestObj1.use_count() == 3";
54*18cf0442SDamjan Jovanovic         ASSERT_TRUE(rTestObj2.use_count() == 3 ) << "rTestObj2.use_count() == 3";
55*18cf0442SDamjan Jovanovic         ASSERT_TRUE(rTestObj3.use_count() == 3 ) << "rTestObj3.use_count() == 3";
56cdf0e10cSrcweir 
57cdf0e10cSrcweir         rTestObj2.makeUnique();
58*18cf0442SDamjan Jovanovic         ASSERT_TRUE(rTestObj1 == rTestObj2 ) << "rTestObj1 == rTestObj2";
59*18cf0442SDamjan Jovanovic         ASSERT_TRUE(rTestObj1 == rTestObj3 ) << "rTestObj1 == rTestObj3";
60*18cf0442SDamjan Jovanovic         ASSERT_TRUE(rTestObj1.use_count() == 2 ) << "rTestObj1.use_count() == 2";
61*18cf0442SDamjan Jovanovic         ASSERT_TRUE(rTestObj2.use_count() == 1 ) << "rTestObj2.use_count() == 1";
62*18cf0442SDamjan Jovanovic         ASSERT_TRUE(rTestObj2.is_unique() ) << "rTestObj2.is_unique()";
63*18cf0442SDamjan Jovanovic         ASSERT_TRUE(rTestObj3.use_count() == 2 ) << "rTestObj3.use_count() == 2";
64cdf0e10cSrcweir 
65cdf0e10cSrcweir         rTestObj2.swap( rTestObj3 );
66*18cf0442SDamjan Jovanovic         ASSERT_TRUE(rTestObj1 == rTestObj2 ) << "rTestObj1 == rTestObj2";
67*18cf0442SDamjan Jovanovic         ASSERT_TRUE(rTestObj1 == rTestObj3 ) << "rTestObj1 == rTestObj3";
68*18cf0442SDamjan Jovanovic         ASSERT_TRUE(rTestObj1.use_count() == 2 ) << "rTestObj1.use_count() == 2";
69*18cf0442SDamjan Jovanovic         ASSERT_TRUE(rTestObj2.use_count() == 2 ) << "rTestObj2.use_count() == 2";
70*18cf0442SDamjan Jovanovic         ASSERT_TRUE(rTestObj3.use_count() == 1 ) << "rTestObj3.use_count() == 1";
71*18cf0442SDamjan Jovanovic         ASSERT_TRUE(rTestObj3.is_unique() ) << "rTestObj3.is_unique()";
72cdf0e10cSrcweir     }
73*18cf0442SDamjan Jovanovic };
74cdf0e10cSrcweir 
TEST_F(cow_wrapper_test,testCowWrapper)75*18cf0442SDamjan Jovanovic TEST_F(cow_wrapper_test, testCowWrapper)
76*18cf0442SDamjan Jovanovic {
77*18cf0442SDamjan Jovanovic     // setup
78*18cf0442SDamjan Jovanovic     cow_wrapper_client1 aTestObj1;
79*18cf0442SDamjan Jovanovic     cow_wrapper_client1 aTestObj2;
80*18cf0442SDamjan Jovanovic     cow_wrapper_client1 aTestObj3;
81cdf0e10cSrcweir 
82*18cf0442SDamjan Jovanovic     cow_wrapper_client2 aTestObj4;
83*18cf0442SDamjan Jovanovic     cow_wrapper_client2 aTestObj5;
84*18cf0442SDamjan Jovanovic     cow_wrapper_client2 aTestObj6;
85cdf0e10cSrcweir 
86*18cf0442SDamjan Jovanovic     cow_wrapper_client3 aTestObj7;
87*18cf0442SDamjan Jovanovic     cow_wrapper_client3 aTestObj8;
88*18cf0442SDamjan Jovanovic     cow_wrapper_client3 aTestObj9;
89*18cf0442SDamjan Jovanovic 
90*18cf0442SDamjan Jovanovic     {
91*18cf0442SDamjan Jovanovic         aTestObj1 = cow_wrapper_client1( 1 );
92*18cf0442SDamjan Jovanovic         aTestObj2.modify( 2 );
93*18cf0442SDamjan Jovanovic         aTestObj3.modify( 3 );
94cdf0e10cSrcweir 
95*18cf0442SDamjan Jovanovic         aTestObj4 = cow_wrapper_client2( 4 );
96*18cf0442SDamjan Jovanovic         aTestObj5.modify( 5 );
97*18cf0442SDamjan Jovanovic         aTestObj6.modify( 6 );
98*18cf0442SDamjan Jovanovic 
99*18cf0442SDamjan Jovanovic         aTestObj7 = cow_wrapper_client3( 7 );
100*18cf0442SDamjan Jovanovic         aTestObj8.modify( 8 );
101*18cf0442SDamjan Jovanovic         aTestObj9.modify( 9 );
102*18cf0442SDamjan Jovanovic     }
103*18cf0442SDamjan Jovanovic     // all three temporaries are dead now
104cdf0e10cSrcweir 
105*18cf0442SDamjan Jovanovic     // test
106*18cf0442SDamjan Jovanovic     test( aTestObj1, aTestObj2, aTestObj3 );
107*18cf0442SDamjan Jovanovic     test( aTestObj4, aTestObj5, aTestObj6 );
108*18cf0442SDamjan Jovanovic     test( aTestObj7, aTestObj8, aTestObj9 );
109*18cf0442SDamjan Jovanovic }
110