Teuchos - Trilinos Tools Package Version of the Day
Loading...
Searching...
No Matches
Teuchos_UnitTestHelpers.hpp
Go to the documentation of this file.
1// @HEADER
2// *****************************************************************************
3// Teuchos: Common Tools Package
4//
5// Copyright 2004 NTESS and the Teuchos contributors.
6// SPDX-License-Identifier: BSD-3-Clause
7// *****************************************************************************
8// @HEADER
9
10#ifndef TEUCHOS_UNIT_TEST_HELPERS_HPP
11#define TEUCHOS_UNIT_TEST_HELPERS_HPP
12
13
26#include "Teuchos_StaticSetupMacro.hpp"
27
28
51#define TEUCHOS_UNIT_TEST(TEST_GROUP, TEST_NAME) \
52 class TEST_GROUP##_##TEST_NAME##_UnitTest : public Teuchos::UnitTestBase \
53 { \
54 public: \
55 TEST_GROUP##_##TEST_NAME##_UnitTest() \
56 : Teuchos::UnitTestBase( #TEST_GROUP, #TEST_NAME ) \
57 {} \
58 virtual void runUnitTestImpl( Teuchos::FancyOStream &out, bool &success ) const override; \
59 virtual std::string unitTestFile() const override { return __FILE__; } \
60 virtual long int unitTestFileLineNumber() const override { return __LINE__; } \
61 }; \
62 \
63 [[maybe_unused]] TEST_GROUP##_##TEST_NAME##_UnitTest \
64 instance_##TEST_GROUP##_##TEST_NAME##_UnitTest; \
65 \
66 void TEST_GROUP##_##TEST_NAME##_UnitTest::runUnitTestImpl( \
67 Teuchos::FancyOStream &out, bool &success ) const \
68
69
128#define TEUCHOS_UNIT_TEST_TEMPLATE_1_DECL(TEST_GROUP, TEST_NAME, TYPE) \
129 template<class TYPE> \
130 class TEST_GROUP##_##TEST_NAME##_UnitTest : public Teuchos::UnitTestBase \
131 { \
132 public: \
133 TEST_GROUP##_##TEST_NAME##_UnitTest(const std::string& typeName) \
134 : Teuchos::UnitTestBase( std::string(#TEST_GROUP)+"_"+typeName, #TEST_NAME ) \
135 {} \
136 virtual void runUnitTestImpl( Teuchos::FancyOStream &out, bool &success ) const override \
137 { runUnitTestImplBody(out, success); } \
138 void runUnitTestImplBody( Teuchos::FancyOStream &out, bool &success ) const; \
139 virtual std::string unitTestFile() const { return __FILE__; } \
140 virtual long int unitTestFileLineNumber() const { return __LINE__; } \
141 }; \
142 \
143 template<class TYPE> \
144 void TEST_GROUP##_##TEST_NAME##_UnitTest<TYPE>::runUnitTestImplBody( \
145 Teuchos::FancyOStream &out, bool &success ) const \
146
157#define TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT(TEST_GROUP, TEST_NAME, TYPE) \
158 \
159 template class TEST_GROUP##_##TEST_NAME##_UnitTest<TYPE>; \
160 TEST_GROUP##_##TEST_NAME##_UnitTest<TYPE> \
161 instance_##TEST_GROUP##_##TYPE##_##TEST_NAME##_UnitTest(#TYPE);
162
163
164#ifdef HAVE_TEUCHOS_INST_FLOAT
165# define TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT_FLOAT(TEST_GROUP, TEST_NAME)\
166 TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT(TEST_GROUP, TEST_NAME, float)
167#else
168# define TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT_FLOAT(TEST_GROUP, TEST_NAME)
169#endif
170
171#define TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT_DOUBLE(TEST_GROUP, TEST_NAME)\
172 TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT(TEST_GROUP, TEST_NAME, double)
173
174#ifdef HAVE_TEUCHOS_INST_COMPLEX_FLOAT
175# define TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT_COMPLEX_FLOAT(TEST_GROUP, TEST_NAME)\
176 typedef std::complex<float> ComplexFloat; \
177 TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT(TEST_GROUP, TEST_NAME, ComplexFloat)
178#else
179# define TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT_COMPLEX_FLOAT(TEST_GROUP, TEST_NAME)
180#endif
181
182#ifdef HAVE_TEUCHOS_INST_COMPLEX_DOUBLE
183# define TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT_COMPLEX_DOUBLE(TEST_GROUP, TEST_NAME)\
184 typedef std::complex<double> ComplexDouble; \
185 TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT(TEST_GROUP, TEST_NAME, ComplexDouble)
186#else
187# define TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT_COMPLEX_DOUBLE(TEST_GROUP, TEST_NAME)
188#endif
189
190
196#define TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT_REAL_SCALAR_TYPES(TEST_GROUP, TEST_NAME)\
197 TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT_FLOAT(TEST_GROUP, TEST_NAME) \
198 TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT_DOUBLE(TEST_GROUP, TEST_NAME)
199
200
205#define TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT_SCALAR_TYPES(TEST_GROUP, TEST_NAME)\
206 TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT_FLOAT(TEST_GROUP, TEST_NAME) \
207 TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT_DOUBLE(TEST_GROUP, TEST_NAME) \
208 TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT_COMPLEX_FLOAT(TEST_GROUP, TEST_NAME) \
209 TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT_COMPLEX_DOUBLE(TEST_GROUP, TEST_NAME)
210
211
272#define TEUCHOS_UNIT_TEST_TEMPLATE_2_DECL(TEST_GROUP, TEST_NAME, TYPE1, TYPE2) \
273 template<class TYPE1, class TYPE2> \
274 class TEST_GROUP##_##TEST_NAME##_UnitTest : public Teuchos::UnitTestBase \
275 { \
276 public: \
277 TEST_GROUP##_##TEST_NAME##_UnitTest( \
278 const std::string& type1Name, \
279 const std::string& type2Name \
280 ) \
281 :Teuchos::UnitTestBase( \
282 std::string(#TEST_GROUP)+"_"+type1Name+"_"+type2Name, #TEST_NAME ) \
283 {} \
284 virtual void runUnitTestImpl( Teuchos::FancyOStream &out, bool &success ) const override \
285 { runUnitTestImplBody(out, success); } \
286 void runUnitTestImplBody( Teuchos::FancyOStream &out, bool &success ) const; \
287 virtual std::string unitTestFile() const { return __FILE__; } \
288 virtual long int unitTestFileLineNumber() const { return __LINE__; } \
289 }; \
290 \
291 template<class TYPE1, class TYPE2> \
292 void TEST_GROUP##_##TEST_NAME##_UnitTest<TYPE1,TYPE2>::runUnitTestImplBody( \
293 Teuchos::FancyOStream &out, bool &success ) const \
294
305#define TEUCHOS_UNIT_TEST_TEMPLATE_2_INSTANT(TEST_GROUP, TEST_NAME, TYPE1, TYPE2) \
306 \
307 template class TEST_GROUP##_##TEST_NAME##_UnitTest<TYPE1, TYPE2 >; \
308 TEST_GROUP##_##TEST_NAME##_UnitTest<TYPE1, TYPE2 > \
309 instance_##TEST_GROUP##_##TYPE1##_##TYPE2##_##TEST_NAME##_UnitTest(#TYPE1,#TYPE2);
310
311
316#define TEUCHOS_UNIT_TEST_TEMPLATE_3_DECL(TEST_GROUP, TEST_NAME, TYPE1, TYPE2, TYPE3) \
317 template<class TYPE1, class TYPE2, class TYPE3> \
318 class TEST_GROUP##_##TEST_NAME##_UnitTest : public Teuchos::UnitTestBase \
319 { \
320 public: \
321 TEST_GROUP##_##TEST_NAME##_UnitTest( \
322 const std::string& type1Name, \
323 const std::string& type2Name, \
324 const std::string& type3Name \
325 ) \
326 :Teuchos::UnitTestBase( \
327 std::string(#TEST_GROUP)+"_"+type1Name+"_"+type2Name+"_"+type3Name, #TEST_NAME ) \
328 {} \
329 virtual void runUnitTestImpl( Teuchos::FancyOStream &out, bool &success ) const override \
330 { runUnitTestImplBody(out, success); } \
331 void runUnitTestImplBody( Teuchos::FancyOStream &out, bool &success ) const; \
332 virtual std::string unitTestFile() const { return __FILE__; } \
333 virtual long int unitTestFileLineNumber() const { return __LINE__; } \
334 }; \
335 \
336 template<class TYPE1, class TYPE2, class TYPE3> \
337 void TEST_GROUP##_##TEST_NAME##_UnitTest<TYPE1,TYPE2,TYPE3>::runUnitTestImplBody( \
338 Teuchos::FancyOStream &out, bool &success ) const \
339
340
345#define TEUCHOS_UNIT_TEST_TEMPLATE_3_INSTANT(TEST_GROUP, TEST_NAME, TYPE1, TYPE2, TYPE3) \
346 \
347 template class TEST_GROUP##_##TEST_NAME##_UnitTest<TYPE1, TYPE2, TYPE3 >; \
348 TEST_GROUP##_##TEST_NAME##_UnitTest<TYPE1, TYPE2, TYPE3 > \
349 instance_##TEST_GROUP##_##TYPE1##_##TYPE2##_##TYPE3##_##TEST_NAME##_UnitTest(#TYPE1,#TYPE2,#TYPE3);
350
351
356#define TEUCHOS_UNIT_TEST_TEMPLATE_4_DECL(TEST_GROUP, TEST_NAME, TYPE1, TYPE2, TYPE3, TYPE4) \
357 template<class TYPE1, class TYPE2, class TYPE3, class TYPE4> \
358 class TEST_GROUP##_##TEST_NAME##_UnitTest : public Teuchos::UnitTestBase \
359 { \
360 public: \
361 TEST_GROUP##_##TEST_NAME##_UnitTest( \
362 const std::string& type1Name, \
363 const std::string& type2Name, \
364 const std::string& type3Name, \
365 const std::string& type4Name \
366 ) \
367 :Teuchos::UnitTestBase( \
368 std::string(#TEST_GROUP)+"_"+type1Name+"_"+type2Name+"_"+type3Name+"_"+type4Name, #TEST_NAME ) \
369 {} \
370 virtual void runUnitTestImpl( Teuchos::FancyOStream &out, bool &success ) const override \
371 { runUnitTestImplBody(out, success); } \
372 void runUnitTestImplBody( Teuchos::FancyOStream &out, bool &success ) const; \
373 virtual std::string unitTestFile() const { return __FILE__; } \
374 virtual long int unitTestFileLineNumber() const { return __LINE__; } \
375 }; \
376 \
377 template<class TYPE1, class TYPE2, class TYPE3, class TYPE4> \
378 void TEST_GROUP##_##TEST_NAME##_UnitTest<TYPE1,TYPE2,TYPE3,TYPE4>::runUnitTestImplBody( \
379 Teuchos::FancyOStream &out, bool &success ) const \
380
381
386#define TEUCHOS_UNIT_TEST_TEMPLATE_4_INSTANT(TEST_GROUP, TEST_NAME, TYPE1, TYPE2, TYPE3, TYPE4) \
387 \
388 template class TEST_GROUP##_##TEST_NAME##_UnitTest<TYPE1, TYPE2, TYPE3, TYPE4 >; \
389 TEST_GROUP##_##TEST_NAME##_UnitTest<TYPE1, TYPE2, TYPE3, TYPE4 > \
390 instance_##TEST_GROUP##_##TYPE1##_##TYPE2##_##TYPE3##_##TYPE4##_##TEST_NAME##_UnitTest(#TYPE1,#TYPE2,#TYPE3,#TYPE4);
391
392
393#endif // TEUCHOS_UNIT_TEST_HELPERS_HPP
Unit testing support.