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 void runUnitTestImpl( Teuchos::FancyOStream &out, bool &success ) const; \
137 virtual std::string unitTestFile() const { return __FILE__; } \
138 virtual long int unitTestFileLineNumber() const { return __LINE__; } \
139 }; \
140 \
141 template<class TYPE> \
142 void TEST_GROUP##_##TEST_NAME##_UnitTest<TYPE>::runUnitTestImpl( \
143 Teuchos::FancyOStream &out, bool &success ) const \
144
155#define TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT(TEST_GROUP, TEST_NAME, TYPE) \
156 \
157 template class TEST_GROUP##_##TEST_NAME##_UnitTest<TYPE>; \
158 TEST_GROUP##_##TEST_NAME##_UnitTest<TYPE> \
159 instance_##TEST_GROUP##_##TYPE##_##TEST_NAME##_UnitTest(#TYPE);
160
161
162#ifdef HAVE_TEUCHOS_INST_FLOAT
163# define TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT_FLOAT(TEST_GROUP, TEST_NAME)\
164 TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT(TEST_GROUP, TEST_NAME, float)
165#else
166# define TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT_FLOAT(TEST_GROUP, TEST_NAME)
167#endif
168
169#define TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT_DOUBLE(TEST_GROUP, TEST_NAME)\
170 TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT(TEST_GROUP, TEST_NAME, double)
171
172#ifdef HAVE_TEUCHOS_INST_COMPLEX_FLOAT
173# define TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT_COMPLEX_FLOAT(TEST_GROUP, TEST_NAME)\
174 typedef std::complex<float> ComplexFloat; \
175 TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT(TEST_GROUP, TEST_NAME, ComplexFloat)
176#else
177# define TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT_COMPLEX_FLOAT(TEST_GROUP, TEST_NAME)
178#endif
179
180#ifdef HAVE_TEUCHOS_INST_COMPLEX_DOUBLE
181# define TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT_COMPLEX_DOUBLE(TEST_GROUP, TEST_NAME)\
182 typedef std::complex<double> ComplexDouble; \
183 TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT(TEST_GROUP, TEST_NAME, ComplexDouble)
184#else
185# define TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT_COMPLEX_DOUBLE(TEST_GROUP, TEST_NAME)
186#endif
187
188
194#define TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT_REAL_SCALAR_TYPES(TEST_GROUP, TEST_NAME)\
195 TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT_FLOAT(TEST_GROUP, TEST_NAME) \
196 TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT_DOUBLE(TEST_GROUP, TEST_NAME)
197
198
203#define TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT_SCALAR_TYPES(TEST_GROUP, TEST_NAME)\
204 TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT_FLOAT(TEST_GROUP, TEST_NAME) \
205 TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT_DOUBLE(TEST_GROUP, TEST_NAME) \
206 TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT_COMPLEX_FLOAT(TEST_GROUP, TEST_NAME) \
207 TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT_COMPLEX_DOUBLE(TEST_GROUP, TEST_NAME)
208
209
270#define TEUCHOS_UNIT_TEST_TEMPLATE_2_DECL(TEST_GROUP, TEST_NAME, TYPE1, TYPE2) \
271 template<class TYPE1, class TYPE2> \
272 class TEST_GROUP##_##TEST_NAME##_UnitTest : public Teuchos::UnitTestBase \
273 { \
274 public: \
275 TEST_GROUP##_##TEST_NAME##_UnitTest( \
276 const std::string& type1Name, \
277 const std::string& type2Name \
278 ) \
279 :Teuchos::UnitTestBase( \
280 std::string(#TEST_GROUP)+"_"+type1Name+"_"+type2Name, #TEST_NAME ) \
281 {} \
282 void runUnitTestImpl( Teuchos::FancyOStream &out, bool &success ) const; \
283 virtual std::string unitTestFile() const { return __FILE__; } \
284 virtual long int unitTestFileLineNumber() const { return __LINE__; } \
285 }; \
286 \
287 template<class TYPE1, class TYPE2> \
288 void TEST_GROUP##_##TEST_NAME##_UnitTest<TYPE1,TYPE2>::runUnitTestImpl( \
289 Teuchos::FancyOStream &out, bool &success ) const \
290
301#define TEUCHOS_UNIT_TEST_TEMPLATE_2_INSTANT(TEST_GROUP, TEST_NAME, TYPE1, TYPE2) \
302 \
303 template class TEST_GROUP##_##TEST_NAME##_UnitTest<TYPE1, TYPE2 >; \
304 TEST_GROUP##_##TEST_NAME##_UnitTest<TYPE1, TYPE2 > \
305 instance_##TEST_GROUP##_##TYPE1##_##TYPE2##_##TEST_NAME##_UnitTest(#TYPE1,#TYPE2);
306
307
312#define TEUCHOS_UNIT_TEST_TEMPLATE_3_DECL(TEST_GROUP, TEST_NAME, TYPE1, TYPE2, TYPE3) \
313 template<class TYPE1, class TYPE2, class TYPE3> \
314 class TEST_GROUP##_##TEST_NAME##_UnitTest : public Teuchos::UnitTestBase \
315 { \
316 public: \
317 TEST_GROUP##_##TEST_NAME##_UnitTest( \
318 const std::string& type1Name, \
319 const std::string& type2Name, \
320 const std::string& type3Name \
321 ) \
322 :Teuchos::UnitTestBase( \
323 std::string(#TEST_GROUP)+"_"+type1Name+"_"+type2Name+"_"+type3Name, #TEST_NAME ) \
324 {} \
325 void runUnitTestImpl( Teuchos::FancyOStream &out, bool &success ) const; \
326 virtual std::string unitTestFile() const { return __FILE__; } \
327 virtual long int unitTestFileLineNumber() const { return __LINE__; } \
328 }; \
329 \
330 template<class TYPE1, class TYPE2, class TYPE3> \
331 void TEST_GROUP##_##TEST_NAME##_UnitTest<TYPE1,TYPE2,TYPE3>::runUnitTestImpl( \
332 Teuchos::FancyOStream &out, bool &success ) const \
333
334
339#define TEUCHOS_UNIT_TEST_TEMPLATE_3_INSTANT(TEST_GROUP, TEST_NAME, TYPE1, TYPE2, TYPE3) \
340 \
341 template class TEST_GROUP##_##TEST_NAME##_UnitTest<TYPE1, TYPE2, TYPE3 >; \
342 TEST_GROUP##_##TEST_NAME##_UnitTest<TYPE1, TYPE2, TYPE3 > \
343 instance_##TEST_GROUP##_##TYPE1##_##TYPE2##_##TYPE3##_##TEST_NAME##_UnitTest(#TYPE1,#TYPE2,#TYPE3);
344
345
350#define TEUCHOS_UNIT_TEST_TEMPLATE_4_DECL(TEST_GROUP, TEST_NAME, TYPE1, TYPE2, TYPE3, TYPE4) \
351 template<class TYPE1, class TYPE2, class TYPE3, class TYPE4> \
352 class TEST_GROUP##_##TEST_NAME##_UnitTest : public Teuchos::UnitTestBase \
353 { \
354 public: \
355 TEST_GROUP##_##TEST_NAME##_UnitTest( \
356 const std::string& type1Name, \
357 const std::string& type2Name, \
358 const std::string& type3Name, \
359 const std::string& type4Name \
360 ) \
361 :Teuchos::UnitTestBase( \
362 std::string(#TEST_GROUP)+"_"+type1Name+"_"+type2Name+"_"+type3Name+"_"+type4Name, #TEST_NAME ) \
363 {} \
364 void runUnitTestImpl( Teuchos::FancyOStream &out, bool &success ) const; \
365 virtual std::string unitTestFile() const { return __FILE__; } \
366 virtual long int unitTestFileLineNumber() const { return __LINE__; } \
367 }; \
368 \
369 template<class TYPE1, class TYPE2, class TYPE3, class TYPE4> \
370 void TEST_GROUP##_##TEST_NAME##_UnitTest<TYPE1,TYPE2,TYPE3,TYPE4>::runUnitTestImpl( \
371 Teuchos::FancyOStream &out, bool &success ) const \
372
373
378#define TEUCHOS_UNIT_TEST_TEMPLATE_4_INSTANT(TEST_GROUP, TEST_NAME, TYPE1, TYPE2, TYPE3, TYPE4) \
379 \
380 template class TEST_GROUP##_##TEST_NAME##_UnitTest<TYPE1, TYPE2, TYPE3, TYPE4 >; \
381 TEST_GROUP##_##TEST_NAME##_UnitTest<TYPE1, TYPE2, TYPE3, TYPE4 > \
382 instance_##TEST_GROUP##_##TYPE1##_##TYPE2##_##TYPE3##_##TYPE4##_##TEST_NAME##_UnitTest(#TYPE1,#TYPE2,#TYPE3,#TYPE4);
383
384
385#endif // TEUCHOS_UNIT_TEST_HELPERS_HPP
Unit testing support.