75 const Array<RCP<T> > a_in = generateArrayRcp<T>(n);
88 const Array<RCP<T> > a_data = generateArrayRcp<T>(n);
89 Array<Ptr<const T> > a_in(n);
91 a_in[i] = a_data[i].ptr();
96 T a_out = testArrayViewInput<T>(a_in);
105 const Array<RCP<T> > a_data = generateArrayRcp<T>(n);
106 Array<Ptr<T> > a_out;
109 *a_data[i] = ST::zero();
110 a_out.push_back( a_data[i].ptr() );
115 testArrayViewOutput<T>(a_out);
125 const Array<RCP<T> > a_in = generateArrayRcp<T>(n);
126 const Array<Ptr<const T> > a_out = arrayPtrConv<const T>(a_in);
137 const Array<RCP<T> > a_in = generateArrayRcp<T>(n);
138 const Array<Ptr<T> > a_out = arrayPtrConv<T>(a_in);
149 const Array<RCP<T> > a_in = generateArrayRcp<T>(n);
150 const Array<Ptr<T> > a1_out = arrayPtrConv<T>(a_in);
151 const Array<Ptr<T> > a2_out = arrayPtrConv<T>(a1_out());
158 const Array<RCP<T> > a_in = generateArrayRcp<T>(n);
159 const Array<Ptr<T> > a1_out = arrayPtrConv<T>(a_in);
160 const Array<Ptr<const T> > a2_out = arrayPtrConv<const T>(a1_out());
167 const Array<RCP<T> > a_in = generateArrayRcp<T>(n);
168 const Array<Ptr<const T> > a1_out = arrayPtrConv<const T>(a_in);
169 const Array<Ptr<const T> > a2_out = arrayPtrConv<const T>(a1_out());
176 Array<RCP<T> > a_in = generateArrayRcp<T>(n);
177 T a = testArrayViewInput<T>(arrayPtrConv<const T>(a_in));
178 T a_exact = as<T>(n*(n-1)/2);
186 Array<RCP<T> > a_out = generateArrayRcp<T>(n);
188 *a_out[i] = ST::zero();
193 testArrayViewOutput<T>(arrayPtrConv<T>(a_out));
203 const Array<RCP<T> > a_in = generateArrayRcp<T>(n);
204 const Array<RCP<T> > a1_out = arrayRcpConv<T>(a_in);
211 const Array<RCP<T> > a_in = generateArrayRcp<T>(n);
212 const Array<RCP<const T> > a1_out = arrayRcpConv<const T>(a_in);
219 const Array<RCP<T> > a_in = generateArrayRcp<T>(n);
220 const Array<RCP<const T> > a1_out = arrayRcpConv<const T>(a_in);
221 const Array<RCP<const T> > a2_out = arrayRcpConv<const T>(a1_out);
229 Array<RCP<T> > a_rcp = generateArrayRcp<T>(n);
230 Array<Ptr<T> > a_ptr = arrayPtrConv<T>(a_rcp);
231 const ArrayView<const Ptr<T> > av_ptr_nonconst = a_ptr();
232 const ArrayView<const Ptr<const T> > av_ptr_const =
241 Array<RCP<T> > a_rcp = generateArrayRcp<T>(n);
242 Array<Ptr<const T> > a_ptr = arrayPtrConv<const T>(a_rcp);
243 const ArrayView<const Ptr<const T> > av_ptr_const1 = a_ptr();
244 const ArrayView<const Ptr<const T> > av_ptr_const2 =
253 Array<RCP<T> > a_rcp = generateArrayRcp<T>(n);
254 const ArrayView<const RCP<T> > av_rcp_nonconst = a_rcp();
255 const ArrayView<const RCP<const T> > av_rcp_const =
264 Array<RCP<T> > a_rcp_orig = generateArrayRcp<T>(n);
265 Array<RCP<const T> > a_rcp = arrayRcpConv<const T>(a_rcp_orig);
266 const ArrayView<const RCP<const T> > av_rcp_const1 = a_rcp();
267 const ArrayView<const RCP<const T> > av_rcp_const2 =
273#ifdef HAVE_TEUCHOS_ARRAY_BOUNDSCHECK
275# define DEBUG_UNIT_TEST_GROUP( T )
279# define DEBUG_UNIT_TEST_GROUP( T )
283#define UNIT_TEST_GROUP( T ) \
284 TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT( ArrayConversions, generateArrayRcp, T ) \
285 TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT( ArrayConversions, testArrayViewInput, T ) \
286 TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT( ArrayConversions, testArrayViewOutput, T ) \
287 TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT( ArrayConversions, arrayPtrConv_RcpNonconst_to_PtrConst, T ) \
288 TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT( ArrayConversions, arrayPtrConv_RcpNonconst_to_PtrNonconst, T ) \
289 TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT( ArrayConversions, arrayPtrConv_PtrNonconst_to_PtrNonconst, T ) \
290 TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT( ArrayConversions, arrayPtrConv_PtrNonconst_to_PtrConst, T ) \
291 TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT( ArrayConversions, arrayPtrConv_PtrConst_to_PtrConst, T ) \
292 TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT( ArrayConversions, arrayRcpConv_RcpConst_to_RcpConst, T ) \
293 TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT( ArrayConversions, arrayPtrConv_PassConst, T ) \
294 TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT( ArrayConversions, arrayPtrConv_PassNonconst, T ) \
295 TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT( ArrayConversions, arrayRcpConv_RcpNonconst_to_RcpNonconst, T ) \
296 TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT( ArrayConversions, arrayRcpConv_RcpNonconst_to_RcpConst, T ) \
297 TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT( ArrayConversions, arrayConstPtrConstCast_nonconst_to_const, T ) \
298 TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT( ArrayConversions, arrayConstPtrConstCast_const_to_const, T ) \
299 TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT( ArrayConversions, arrayConstRcpConstCast_nonconst_to_const, T ) \
300 TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT( ArrayConversions, arrayConstRcpConstCast_const_to_const, T ) \
301 DEBUG_UNIT_TEST_GROUP( T )
310TEUCHOS_UNIT_TEST( ArrayConversions, arrayPtrConv_RcpNonconstDerived_to_PtrNonconstBase)
312 const Array<RCP<C> > a_in = generateArrayRcpGen<C>(n);
313 const Array<Ptr<A> > a_out = arrayPtrConv<A>(a_in);
316 TEST_EQUALITY( &*a_out[i], implicit_ptr_cast<A>(&*a_in[i]) );
321TEUCHOS_UNIT_TEST( ArrayConversions, arrayPtrConv_RcpNonconstDerived_to_PtrConstBase)
323 const Array<RCP<C> > a_in = generateArrayRcpGen<C>(n);
324 const Array<Ptr<const A> > a_out = arrayPtrConv<const A>(a_in);
327 TEST_EQUALITY( &*a_out[i], implicit_ptr_cast<const A>(&*a_in[i]) );
332TEUCHOS_UNIT_TEST( ArrayConversions, arrayPtrConv_RcpConstDerived_to_PtrConstBase)
334 const Array<RCP<C> > a_in = generateArrayRcpGen<C>(n);
335 const Array<RCP<const C> > a1_out = arrayRcpConv<const C>(a_in);
336 const Array<Ptr<const A> > a2_out = arrayPtrConv<const A>(a1_out);
339 TEST_EQUALITY( &*a2_out[i], implicit_ptr_cast<const A>(&*a_in[i]) );
344TEUCHOS_UNIT_TEST( ArrayConversions, arrayRcpConv_RcpNonconstDerived_to_RcpNonconstBase)
346 const Array<RCP<C> > a_in = generateArrayRcpGen<C>(n);
347 const Array<RCP<A> > a_out = arrayRcpConv<A>(a_in);
350 TEST_EQUALITY( &*a_out[i], implicit_ptr_cast<A>(&*a_in[i]) );
355TEUCHOS_UNIT_TEST( ArrayConversions, arrayRcpConv_RcpNonconstDerived_to_RcpConstBase)
357 const Array<RCP<C> > a_in = generateArrayRcpGen<C>(n);
358 const Array<RCP<const A> > a_out = arrayRcpConv<const A>(a_in);
361 TEST_EQUALITY( &*a_out[i], implicit_ptr_cast<A>(&*a_in[i]) );
366TEUCHOS_UNIT_TEST( ArrayConversions, arrayRcpConv_RcpConstDerived_to_RcpConstBase)
368 const Array<RCP<C> > a_in = generateArrayRcpGen<C>(n);
369 const Array<RCP<const C> > a1_out = arrayRcpConv<const C>(a_in);
370 const Array<RCP<const A> > a2_out = arrayRcpConv<const A>(a1_out);
373 TEST_EQUALITY( &*a2_out[i], implicit_ptr_cast<A>(&*a_in[i]) );
378TEUCHOS_UNIT_TEST( ArrayConversions, arrayViewPtrConv_RcpNonconstDerived_to_PtrNonconstBase)
380 const Array<RCP<C> > a_in = generateArrayRcpGen<C>(n);
381 Array<Ptr<A> > a_out(n);
382 arrayViewPtrConv(a_in, a_out());
385 TEST_EQUALITY( &*a_out[i], implicit_ptr_cast<A>(&*a_in[i]) );
390TEUCHOS_UNIT_TEST( ArrayConversions, arrayViewPtrConv_RcpNonconstDerived_to_PtrConstBase)
392 const Array<RCP<C> > a_in = generateArrayRcpGen<C>(n);
393 Array<Ptr<const A> > a_out(n);
394 arrayViewPtrConv(a_in, a_out());
397 TEST_EQUALITY( &*a_out[i], implicit_ptr_cast<const A>(&*a_in[i]) );
402TEUCHOS_UNIT_TEST( ArrayConversions, arrayViewPtrConv_RcpConstDerived_to_PtrConstBase)
404 const Array<RCP<C> > a_in = generateArrayRcpGen<C>(n);
405 Array<RCP<const C> > a1_out(n);
406 arrayViewRcpConv(a_in, a1_out());
407 Array<Ptr<const A> > a2_out(n);
408 arrayViewPtrConv(a1_out, a2_out());
411 TEST_EQUALITY( &*a2_out[i], implicit_ptr_cast<const A>(&*a_in[i]) );
416TEUCHOS_UNIT_TEST( ArrayConversions, arrayViewRcpConv_RcpNonconstDerived_to_RcpNonconstBase)
418 const Array<RCP<C> > a_in = generateArrayRcpGen<C>(n);
419 Array<RCP<A> > a_out(n);
420 arrayViewRcpConv(a_in, a_out());
423 TEST_EQUALITY( &*a_out[i], implicit_ptr_cast<A>(&*a_in[i]) );
428TEUCHOS_UNIT_TEST( ArrayConversions, arrayViewRcpConv_RcpNonconstDerived_to_RcpConstBase)
430 const Array<RCP<C> > a_in = generateArrayRcpGen<C>(n);
431 Array<RCP<const A> > a_out(n);
432 arrayViewRcpConv(a_in, a_out());
435 TEST_EQUALITY( &*a_out[i], implicit_ptr_cast<A>(&*a_in[i]) );
440TEUCHOS_UNIT_TEST( ArrayConversions, arrayViewRcpConv_RcpConstDerived_to_RcpConstBase)
442 const Array<RCP<C> > a_in = generateArrayRcpGen<C>(n);
443 Array<RCP<const C> > a1_out(n);
444 arrayViewRcpConv(a_in, a1_out());
445 Array<RCP<const A> > a2_out(n);
446 arrayViewRcpConv(a1_out, a2_out());
449 TEST_EQUALITY( &*a2_out[i], implicit_ptr_cast<A>(&*a_in[i]) );
#define UNIT_TEST_GROUP(T)
Templated conversions between Array<RCP<T> > and ArrayView<Ptr<T> >
#define TEST_EQUALITY_CONST(v1, v2)
Assert the equality of v1 and constant v2.
#define TEST_EQUALITY(v1, v2)
Assert the equality of v1 and v2.
#define TEST_COMPARE_ARRAYS(a1, a2)
Assert that a1.size()==a2.size() and a[i]==b[i], i=0....
#define TEUCHOS_UNIT_TEST_TEMPLATE_1_DECL(TEST_GROUP, TEST_NAME, TYPE)
Macro for defining a templated unit test with one template parameter.
#define TEUCHOS_UNIT_TEST(TEST_GROUP, TEST_NAME)
Macro for defining a (non-templated) unit test.
Replacement for std::vector that is compatible with the Teuchos Memory Management classes.
Simple wrapper class for raw pointers to single objects where no persisting relationship exists.
Smart reference counting pointer class for automatic garbage collection.
Concrete serial communicator subclass.
bool is_null(const std::shared_ptr< T > &p)
Returns true if p.get()==NULL.
void testArrayViewOutput(const ArrayView< const Ptr< T > > &a_out)
Array< RCP< T > > generateArrayRcp(const Teuchos_Ordinal n_in)
T testArrayViewInput(const ArrayView< const Ptr< const T > > &a_in)
Array< RCP< T > > generateArrayRcpGen(const Teuchos_Ordinal n_in)
void arrayViewPtrConv(const ArrayPtrT_in &a_in, const ArrayView< Ptr< T_out > > &a_out)
Utility function to convert from an an input Array[View,RCP]<[const] PTR<T_in> > object to an output ...
TypeTo as(const TypeFrom &t)
Convert from one value type to another.
TypeTo * implicit_ptr_cast(TypeFrom *t)
Perform an implicit cast of pointer types with a pointer being returned.
ArrayView< const RCP< const T > > arrayConstRcpConstCast(const ArrayView< const RCP< T > > &a_in)
Utility function that does a reinterpret case to convert an ArrayView<const RCP<T> > object to an Arr...
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
Deprecated.
Array< Ptr< T_out > > arrayPtrConv(const ArrayPtrT_in &a_in)
Utility function to convert an Array[View,RCP]<[const] PTR<T_in> > object to an Array<Ptr<T_out> > ob...
ArrayView< const Ptr< const T > > arrayConstPtrConstCast(const ArrayView< const Ptr< T > > &a_in)
Utility function that does a reinterpret case to convert an ArrayView<const Ptr<T> > object to an Arr...
void arrayViewRcpConv(const ArrayPtrT_in &a_in, const ArrayView< RCP< T_out > > &a_out)
Utility function to convert from an input Array[View,RCP]<[const] RCP<T_in> > object to an output Arr...
Array< RCP< T_out > > arrayRcpConv(const ArrayPtrT_in &a_in)
Utility function to convert any Array[View,RCP]<[const] RCP<T_in> > object to an Array<RCP<T_out> > o...