Teuchos Package Browser (Single Doxygen Collection)
Version of the Day
Toggle main menu visibility
Loading...
Searching...
No Matches
core
test
Containers
ConstNonconstObjectContainer.cpp
Go to the documentation of this file.
1
// @HEADER
2
// ***********************************************************************
3
//
4
// Teuchos: Common Tools Package
5
// Copyright (2004) Sandia Corporation
6
//
7
// Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive
8
// license for use of this work by or on behalf of the U.S. Government.
9
//
10
// Redistribution and use in source and binary forms, with or without
11
// modification, are permitted provided that the following conditions are
12
// met:
13
//
14
// 1. Redistributions of source code must retain the above copyright
15
// notice, this list of conditions and the following disclaimer.
16
//
17
// 2. Redistributions in binary form must reproduce the above copyright
18
// notice, this list of conditions and the following disclaimer in the
19
// documentation and/or other materials provided with the distribution.
20
//
21
// 3. Neither the name of the Corporation nor the names of the
22
// contributors may be used to endorse or promote products derived from
23
// this software without specific prior written permission.
24
//
25
// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
26
// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
27
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
28
// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
29
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
30
// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
31
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
32
// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
33
// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
34
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
35
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36
//
37
// Questions? Contact Michael A. Heroux (maherou@sandia.gov)
38
//
39
// ***********************************************************************
40
// @HEADER
41
42
#include "
Teuchos_ConstNonconstObjectContainer.hpp
"
43
44
#include "
Teuchos_UnitTestHarness.hpp
"
45
46
namespace
Teuchos
{
47
48
TEUCHOS_UNIT_TEST
(
ConstNonconstObjectContainer
, create ) {
49
ConstNonconstObjectContainer<std::vector<double>
> vectorObj;
50
RCP<std::vector<double>
> vec =
rcp
(
new
std::vector<double> );
51
vectorObj.
initialize
(vec);
// nonconst
52
TEST_ASSERT
( vectorObj.
isConst
() ==
false
);
53
}
54
55
56
TEUCHOS_UNIT_TEST
(
ConstNonconstObjectContainer
, DefaultConstruct ) {
57
ConstNonconstObjectContainer<std::vector<double>
> vectorObj;
58
TEST_ASSERT
( vectorObj.
isConst
() ==
true
);
59
TEST_ASSERT
( vectorObj.
getConstObj
() ==
null
);
60
// This does not throw an exception because the pointer is null
61
TEST_ASSERT
( vectorObj.
getNonconstObj
() ==
null
);
62
}
63
64
65
TEUCHOS_UNIT_TEST
(
ConstNonconstObjectContainer
, NonconstConstruct ) {
66
RCP<std::vector<double>
> vec =
rcp
(
new
std::vector<double> );
67
ConstNonconstObjectContainer<std::vector<double>
> vectorObj(vec);
68
TEST_ASSERT
( vectorObj.
isConst
() ==
false
);
69
RCP<const std::vector<double>
> vec2 = vectorObj.
getConstObj
();
70
TEST_ASSERT
( vec == vec2 );
71
RCP<std::vector<double>
> vec3 = vectorObj.
getNonconstObj
();
72
TEST_ASSERT
( vec == vec3 );
73
}
74
75
76
TEUCHOS_UNIT_TEST
(
ConstNonconstObjectContainer
, ConstConstruct) {
77
RCP<const std::vector<double>
> vec =
rcp
(
new
std::vector<double> );
78
ConstNonconstObjectContainer<std::vector<double>
> vectorObj(vec);
79
TEST_ASSERT
( vectorObj.
isConst
() ==
true
);
80
RCP<const std::vector<double>
> vec2 = vectorObj.
getConstObj
();
81
TEST_ASSERT
( vec == vec2 );
82
RCP<std::vector<double>
> vec3;
83
TEST_THROW
( vec3 = vectorObj.
getNonconstObj
(),
NonconstAccessError
);
84
}
85
86
87
TEUCHOS_UNIT_TEST
(
ConstNonconstObjectContainer
, NonconstInitialize) {
88
RCP<std::vector<double>
> vec =
rcp
(
new
std::vector<double> );
89
ConstNonconstObjectContainer<std::vector<double>
> vectorObj;
90
vectorObj.
initialize
(vec);
91
TEST_ASSERT
( vectorObj.
isConst
() ==
false
);
92
RCP<const std::vector<double>
> vec2 = vectorObj.
getConstObj
();
93
TEST_ASSERT
( vec == vec2 );
94
RCP<std::vector<double>
> vec3 = vectorObj.
getNonconstObj
();
95
TEST_ASSERT
( vec == vec3 );
96
}
97
98
99
TEUCHOS_UNIT_TEST
(
ConstNonconstObjectContainer
, ConstInitialize) {
100
RCP<const std::vector<double>
> vec =
rcp
(
new
std::vector<double> );
101
ConstNonconstObjectContainer<std::vector<double>
> vectorObj;
102
vectorObj.
initialize
(vec);
103
TEST_ASSERT
( vectorObj.
isConst
() ==
true
);
104
RCP<const std::vector<double>
> vec2 = vectorObj.
getConstObj
();
105
TEST_ASSERT
( vec == vec2 );
106
RCP<std::vector<double>
> vec3;
107
TEST_THROW
( vec3 = vectorObj.
getNonconstObj
(),
NonconstAccessError
);
108
}
109
110
111
TEUCHOS_UNIT_TEST
(
ConstNonconstObjectContainer
, AssignmentFromRCP) {
112
RCP<const std::vector<double>
> vec =
rcp
(
new
std::vector<double> );
113
ConstNonconstObjectContainer<std::vector<double>
> vectorObj;
114
vectorObj = vec;
115
TEST_ASSERT
( vectorObj.
isConst
() ==
true
);
116
RCP<const std::vector<double>
> vec2 = vectorObj.
getConstObj
();
117
TEST_ASSERT
( vec == vec2 );
118
RCP<std::vector<double>
> vec3;
119
TEST_THROW
( vec3 = vectorObj.
getNonconstObj
(),
NonconstAccessError
);
120
}
121
122
123
TEUCHOS_UNIT_TEST
(
ConstNonconstObjectContainer
, uninitialize) {
124
RCP<const std::vector<double>
> vec =
rcp
(
new
std::vector<double> );
125
ConstNonconstObjectContainer<std::vector<double>
> vectorObj(vec);
126
TEST_ASSERT
( vectorObj.
isConst
() ==
true
);
127
RCP<const std::vector<double>
> vec2 = vectorObj.
getConstObj
();
128
TEST_ASSERT
( vec == vec2 );
129
vectorObj.
uninitialize
();
130
TEST_ASSERT
( vectorObj.
isConst
() ==
true
);
131
TEST_ASSERT
( vectorObj.
getConstObj
() ==
null
);
132
}
133
134
135
TEUCHOS_UNIT_TEST
(
ConstNonconstObjectContainer
, parens ) {
136
ConstNonconstObjectContainer<std::vector<double>
> vectorObj;
137
RCP<std::vector<double>
> vec =
rcp
(
new
std::vector<double>);
138
vectorObj.
initialize
(vec);
139
RCP<const std::vector<double>
> vec2 = vectorObj();
140
TEST_ASSERT
( vec == vec2 );
141
}
142
143
144
// operator->
145
TEUCHOS_UNIT_TEST
(
ConstNonconstObjectContainer
, arrow ) {
146
RCP<std::vector<double>
> vec =
rcp
(
new
std::vector<double>);
147
vec->push_back(25.0);
148
vec->push_back(32.0);
149
ConstNonconstObjectContainer<std::vector<double>
> vectorObj(vec);
150
TEST_ASSERT
( vectorObj->size() == 2 );
151
}
152
153
154
TEUCHOS_UNIT_TEST
(
ConstNonconstObjectContainer
, arrowEmpty ) {
155
ConstNonconstObjectContainer<std::vector<double>
> vectorObj;
156
#ifdef TEUCHOS_DEBUG
157
TEST_THROW
( vectorObj->size(),
NullReferenceError
);
158
#endif
159
}
160
161
162
// operator*
163
TEUCHOS_UNIT_TEST
(
ConstNonconstObjectContainer
, dereference ) {
164
RCP<std::vector<double>
> vec =
rcp
(
new
std::vector<double>);
165
vec->push_back(25.0);
166
vec->push_back(32.0);
167
ConstNonconstObjectContainer<std::vector<double>
> vectorObj(vec);
168
TEST_ASSERT
( (*vectorObj)[0] == 25.0 );
169
TEST_ASSERT
( (*vectorObj)[1] == 32.0 );
170
}
171
172
173
TEUCHOS_UNIT_TEST
(
ConstNonconstObjectContainer
, dereferenceEmpty ) {
174
ConstNonconstObjectContainer<std::vector<double>
> vectorObj;
175
#ifdef TEUCHOS_DEBUG
176
TEST_THROW
( (*vectorObj).size(),
NullReferenceError
);
177
#endif
178
}
179
180
181
// implicit cast
182
// RCP<const ObjType> <-
183
// ConstNonconstObjectContainer<const ObjType>
184
TEUCHOS_UNIT_TEST
(
ConstNonconstObjectContainer
, castToRCP ) {
185
RCP<std::vector<double>
> vec =
rcp
(
new
std::vector<double>);
186
ConstNonconstObjectContainer<std::vector<double>
> vectorObj(vec);
187
RCP<const std::vector<double>
> vec2(vectorObj);
188
TEST_ASSERT
( vec == vec2 );
189
}
190
191
192
// implicit cast
193
// RCP<const ObjType> ->
194
// ConstNonconstObjectContainer<const ObjType>
195
// This is already done through the constructors on
196
// ConstNonconstObjectContainer.
197
TEUCHOS_UNIT_TEST
(
ConstNonconstObjectContainer
, castFromRCP ) {
198
RCP<std::vector<double>
> vec =
rcp
(
new
std::vector<double>);
199
ConstNonconstObjectContainer<std::vector<double>
> vectorObj(vec);
200
TEST_ASSERT
( vectorObj.
getConstObj
() == vec );
201
}
202
203
204
TEUCHOS_UNIT_TEST
(
ConstNonconstObjectContainer
,
is_null
) {
205
ConstNonconstObjectContainer<std::vector<double>
> vectorObj;
206
TEST_ASSERT
(
is_null
(vectorObj) );
207
}
208
209
210
TEUCHOS_UNIT_TEST
(
ConstNonconstObjectContainer
,
nonnull
) {
211
RCP<std::vector<double>
> vec =
rcp
(
new
std::vector<double>);
212
ConstNonconstObjectContainer<std::vector<double>
> vectorObj(vec);
213
TEST_ASSERT
(
nonnull
(vectorObj) );
214
}
215
216
217
}
// namespace Teuchos
218
219
220
Teuchos_ConstNonconstObjectContainer.hpp
TEST_ASSERT
#define TEST_ASSERT(v1)
Assert the given statement is true.
Definition
Teuchos_LocalTestingHelpers.hpp:71
TEST_THROW
#define TEST_THROW(code, ExceptType)
Assert that the statement 'code' throws the exception 'ExceptType' (otherwise the test fails).
Definition
Teuchos_LocalTestingHelpers.hpp:198
Teuchos_UnitTestHarness.hpp
Unit testing support.
TEUCHOS_UNIT_TEST
#define TEUCHOS_UNIT_TEST(TEST_GROUP, TEST_NAME)
Macro for defining a (non-templated) unit test.
Definition
Teuchos_UnitTestHelpers.hpp:83
Teuchos::ConstNonconstObjectContainer
Simple class supporting the "runtime protection of const" idiom.
Definition
Teuchos_ConstNonconstObjectContainer.hpp:275
Teuchos::ConstNonconstObjectContainer::uninitialize
void uninitialize()
Definition
Teuchos_ConstNonconstObjectContainer.hpp:303
Teuchos::ConstNonconstObjectContainer::getNonconstObj
RCP< ObjType > getNonconstObj() const
Get an RCP to the non-const contained object.
Definition
Teuchos_ConstNonconstObjectContainer.hpp:325
Teuchos::ConstNonconstObjectContainer::getConstObj
RCP< const ObjType > getConstObj() const
Get an RCP to the const contained object.
Definition
Teuchos_ConstNonconstObjectContainer.hpp:339
Teuchos::ConstNonconstObjectContainer::isConst
bool isConst() const
Returns true if const-only access to the object is allowed.
Definition
Teuchos_ConstNonconstObjectContainer.hpp:309
Teuchos::ConstNonconstObjectContainer::initialize
void initialize(const RCP< ObjType > &obj)
. Initialize using a non-const object. Allows both const and non-const access to the contained object...
Definition
Teuchos_ConstNonconstObjectContainer.hpp:288
Teuchos::NonconstAccessError
Null reference error exception class.
Definition
Teuchos_Exceptions.hpp:86
Teuchos::NullReferenceError
Null reference error exception class.
Definition
Teuchos_Exceptions.hpp:78
Teuchos::RCP
Smart reference counting pointer class for automatic garbage collection.
Definition
Teuchos_RCPDecl.hpp:429
Teuchos::is_null
bool is_null(const std::shared_ptr< T > &p)
Returns true if p.get()==NULL.
Definition
Teuchos_RCPStdSharedPtrConversionsDecl.hpp:148
Teuchos::nonnull
bool nonnull(const std::shared_ptr< T > &p)
Returns true if p.get()!=NULL.
Definition
Teuchos_RCPStdSharedPtrConversionsDecl.hpp:159
Teuchos
Definition
Teuchos_AbstractFactory.hpp:47
Teuchos::rcp
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
Deprecated.
Definition
Teuchos_RCPDecl.hpp:1266
Teuchos::null
@ null
Definition
Teuchos_ENull.hpp:54
Generated by
1.17.0