Teuchos Package Browser (Single Doxygen Collection)  Version of the Day
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Macros
Teuchos_UnitTestHelpers.hpp File Reference

Macros for defining unit tests. More...

#include "Teuchos_UnitTestBase.hpp"
#include "Teuchos_StaticSetupMacro.hpp"
Include dependency graph for Teuchos_UnitTestHelpers.hpp:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Macros

#define TEUCHOS_UNIT_TEST(TEST_GROUP, TEST_NAME)
 Macro for defining a (non-templated) unit test. More...
 
#define TEUCHOS_UNIT_TEST_TEMPLATE_1_DECL(TEST_GROUP, TEST_NAME, TYPE)
 Macro for defining a templated unit test with one template parameter. More...
 
#define TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT(TEST_GROUP, TEST_NAME, TYPE)
 Instantiate a templated unit test with one template parameter. More...
 
#define TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT_FLOAT(TEST_GROUP, TEST_NAME)
 
#define TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT_DOUBLE(TEST_GROUP, TEST_NAME)   TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT(TEST_GROUP, TEST_NAME, double)
 
#define TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT_COMPLEX_FLOAT(TEST_GROUP, TEST_NAME)
 
#define TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT_COMPLEX_DOUBLE(TEST_GROUP, TEST_NAME)
 
#define TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT_REAL_SCALAR_TYPES(TEST_GROUP, TEST_NAME)
 Instantiate a whole group of tests for supported real Scalar types. More...
 
#define TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT_SCALAR_TYPES(TEST_GROUP, TEST_NAME)
 Instantiate a whole group of tests for supported Scalar types. More...
 
#define TEUCHOS_UNIT_TEST_TEMPLATE_2_DECL(TEST_GROUP, TEST_NAME, TYPE1, TYPE2)
 Macro for defining a templated unit test with two template parameters. More...
 
#define TEUCHOS_UNIT_TEST_TEMPLATE_2_INSTANT(TEST_GROUP, TEST_NAME, TYPE1, TYPE2)
 Instantiate a templated unit test with two template parameters. More...
 
#define TEUCHOS_UNIT_TEST_TEMPLATE_3_DECL(TEST_GROUP, TEST_NAME, TYPE1, TYPE2, TYPE3)
 Macro for defining a templated unit test with three template parameters. More...
 
#define TEUCHOS_UNIT_TEST_TEMPLATE_3_INSTANT(TEST_GROUP, TEST_NAME, TYPE1, TYPE2, TYPE3)
 Instantiate a templated unit test with three template parameters. More...
 
#define TEUCHOS_UNIT_TEST_TEMPLATE_4_DECL(TEST_GROUP, TEST_NAME, TYPE1, TYPE2, TYPE3, TYPE4)
 Macro for defining a templated unit test with four template parameters. More...
 
#define TEUCHOS_UNIT_TEST_TEMPLATE_4_INSTANT(TEST_GROUP, TEST_NAME, TYPE1, TYPE2, TYPE3, TYPE4)
 Instantiate a templated unit test with four template parameters. More...
 

Detailed Description

Macros for defining unit tests.

The macros in this file are for naming and defining unit tests. They give your unit test a group and name, so that you can identify it in the test output. You are responsible for filling in the actual test.

For macros (like TEST_NOTHROW) to help you write the actual unit test, see Teuchos_LocalTestingHelpers.hpp and Teuchos_TestingHelpers.hpp.

Definition in file Teuchos_UnitTestHelpers.hpp.

Macro Definition Documentation

#define TEUCHOS_UNIT_TEST (   TEST_GROUP,
  TEST_NAME 
)
Value:
class TEST_GROUP##_##TEST_NAME##_UnitTest : public Teuchos::UnitTestBase \
{ \
public: \
TEST_GROUP##_##TEST_NAME##_UnitTest() \
: Teuchos::UnitTestBase( #TEST_GROUP, #TEST_NAME ) \
{} \
virtual void runUnitTestImpl( Teuchos::FancyOStream &out, bool &success ) const override; \
virtual std::string unitTestFile() const override { return __FILE__; } \
virtual long int unitTestFileLineNumber() const override { return __LINE__; } \
}; \
\
[[maybe_unused]] TEST_GROUP##_##TEST_NAME##_UnitTest \
instance_##TEST_GROUP##_##TEST_NAME##_UnitTest; \
\
void TEST_GROUP##_##TEST_NAME##_UnitTest::runUnitTestImpl( \
Teuchos::FancyOStream &out, bool &success ) const \
virtual std::string unitTestFile() const =0
std::ostream subclass that performs the magic of indenting data sent to an std::ostream object among ...
virtual long int unitTestFileLineNumber() const =0
virtual void runUnitTestImpl(FancyOStream &out, bool &success) const =0
Unit test base class.

Macro for defining a (non-templated) unit test.

The macro parameters TEST_GROUP and TEST_NAME must each be a valid part of a C++ identifier. In particular, they should not contain any spaces or other characters that are not allowed in the name of a class.

Here is a brief example of how to declare a unit test using this macro.

TEUCHOS_UNIT_TEST( myTestGroup, testDouble ) {
double x, y;
// Make sure that assigning 42 to y doesn't throw an exception.
TEST_NOTHROW( x = 42 );
// Make sure that assigning 42 to y doesn't throw an exception.
TEST_NOTHROW( y = 42 );
// Make sure that x and y are now equal.
}

Definition at line 51 of file Teuchos_UnitTestHelpers.hpp.

#define TEUCHOS_UNIT_TEST_TEMPLATE_1_DECL (   TEST_GROUP,
  TEST_NAME,
  TYPE 
)
Value:
template<class TYPE> \
class TEST_GROUP##_##TEST_NAME##_UnitTest : public Teuchos::UnitTestBase \
{ \
public: \
TEST_GROUP##_##TEST_NAME##_UnitTest(const std::string& typeName) \
: Teuchos::UnitTestBase( std::string(#TEST_GROUP)+"_"+typeName, #TEST_NAME ) \
{} \
void runUnitTestImpl( Teuchos::FancyOStream &out, bool &success ) const; \
virtual std::string unitTestFile() const { return __FILE__; } \
virtual long int unitTestFileLineNumber() const { return __LINE__; } \
}; \
\
template<class TYPE> \
void TEST_GROUP##_##TEST_NAME##_UnitTest<TYPE>::runUnitTestImpl( \
Teuchos::FancyOStream &out, bool &success ) const \
std::string typeName(const T &t)
Template function for returning the concrete type name of a passed-in object.
std::ostream subclass that performs the magic of indenting data sent to an std::ostream object among ...
Unit test base class.

Macro for defining a templated unit test with one template parameter.

Use this macro to define the templated unit test. To instantiate the unit test for a particular template parameter, use the TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT macro.

Note
If you don't instantiate the unit test, it won't be run. In fact, in that case, the unit test will only be compiled as a template class. This may not necessarily catch all compilation errors, since invalid substitution of template parameters is not an error.

The macro parameters TEST_GROUP and TEST_NAME must each be a valid part of a C++ identifier. In particular, they should not contain any spaces or other characters that are not allowed in the name of a class.

On instantiation, the macro parameter TYPE must be the name of a valid C++ type. The type will be treated as a template parameter. Thus, if your unit test references typedefs in TYPE, it should use typename to access them. For example:

TEUCHOS_UNIT_TEST_TEMPLATE_1_DECL( myTestGroup, myTestName, StlContainerType ) {
typedef typename StlContainerType::value_type value_type;
// ... the rest of the unit test ...
}

When instantiating the unit test for a particular template parameter using TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT, the macro parameter TYPE must not contain any spaces (Bug 5757). If you want TYPE to be a type with spaces, like unsigned int or long double, you must first use a typedef to alias the original type to a name without spaces, and then use the name without spaces. For example:

// Define the templated unit test.
TEUCHOS_UNIT_TEST_TEMPLATE_1_DECL( myTestGroup, myTestName, RealType ) {
RealType x = 42, y = 42;
// ... the rest of the unit test ...
}
//
// Instantiate the unit test for various values of RealType.
//
TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT( myTestGroup, myTestName, float )
TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT( myTestGroup, myTestName, double )
// Typedef to work around Bug 5757 (TYPE values cannot have spaces).
typedef long double long_double_type;
TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT( myTestGroup, myTestName, long_double_type )

Definition at line 128 of file Teuchos_UnitTestHelpers.hpp.

#define TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT (   TEST_GROUP,
  TEST_NAME,
  TYPE 
)
Value:
\
template class TEST_GROUP##_##TEST_NAME##_UnitTest<TYPE>; \
TEST_GROUP##_##TEST_NAME##_UnitTest<TYPE> \
instance_##TEST_GROUP##_##TYPE##_##TEST_NAME##_UnitTest(#TYPE);

Instantiate a templated unit test with one template parameter.

Use this macro to instantiate for a particular template parameter value the templated unit test defined by TEUCHOS_UNIT_TEST_TEMPLATE_1_DECL with the same TEST_GROUP and TEST_NAME values. For more details and examples, see the documentation of TEUCHOS_UNIT_TEST_TEMPLATE_1_DECL.

Definition at line 155 of file Teuchos_UnitTestHelpers.hpp.

#define TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT_FLOAT (   TEST_GROUP,
  TEST_NAME 
)

Definition at line 166 of file Teuchos_UnitTestHelpers.hpp.

#define TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT_DOUBLE (   TEST_GROUP,
  TEST_NAME 
)    TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT(TEST_GROUP, TEST_NAME, double)

Definition at line 169 of file Teuchos_UnitTestHelpers.hpp.

#define TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT_COMPLEX_FLOAT (   TEST_GROUP,
  TEST_NAME 
)

Definition at line 177 of file Teuchos_UnitTestHelpers.hpp.

#define TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT_COMPLEX_DOUBLE (   TEST_GROUP,
  TEST_NAME 
)

Definition at line 185 of file Teuchos_UnitTestHelpers.hpp.

#define TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT_REAL_SCALAR_TYPES (   TEST_GROUP,
  TEST_NAME 
)
Value:
#define TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT_FLOAT(TEST_GROUP, TEST_NAME)
#define TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT_DOUBLE(TEST_GROUP, TEST_NAME)

Instantiate a whole group of tests for supported real Scalar types.

Definition at line 194 of file Teuchos_UnitTestHelpers.hpp.

#define TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT_SCALAR_TYPES (   TEST_GROUP,
  TEST_NAME 
)
Value:
#define TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT_FLOAT(TEST_GROUP, TEST_NAME)
#define TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT_COMPLEX_DOUBLE(TEST_GROUP, TEST_NAME)
#define TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT_COMPLEX_FLOAT(TEST_GROUP, TEST_NAME)
#define TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT_DOUBLE(TEST_GROUP, TEST_NAME)

Instantiate a whole group of tests for supported Scalar types.

Definition at line 203 of file Teuchos_UnitTestHelpers.hpp.

#define TEUCHOS_UNIT_TEST_TEMPLATE_2_DECL (   TEST_GROUP,
  TEST_NAME,
  TYPE1,
  TYPE2 
)
Value:
template<class TYPE1, class TYPE2> \
class TEST_GROUP##_##TEST_NAME##_UnitTest : public Teuchos::UnitTestBase \
{ \
public: \
TEST_GROUP##_##TEST_NAME##_UnitTest( \
const std::string& type1Name, \
const std::string& type2Name \
) \
std::string(#TEST_GROUP)+"_"+type1Name+"_"+type2Name, #TEST_NAME ) \
{} \
void runUnitTestImpl( Teuchos::FancyOStream &out, bool &success ) const; \
virtual std::string unitTestFile() const { return __FILE__; } \
virtual long int unitTestFileLineNumber() const { return __LINE__; } \
}; \
\
template<class TYPE1, class TYPE2> \
void TEST_GROUP##_##TEST_NAME##_UnitTest<TYPE1,TYPE2>::runUnitTestImpl( \
Teuchos::FancyOStream &out, bool &success ) const \
std::ostream subclass that performs the magic of indenting data sent to an std::ostream object among ...
Unit test base class.

Macro for defining a templated unit test with two template parameters.

Use this macro to define the templated unit test. To instantiate the unit test for particular template parameter values, use the TEUCHOS_UNIT_TEST_TEMPLATE_2_INSTANT macro.

Note
If you don't instantiate the unit test, it won't be run. In fact, in that case, the unit test will only be compiled as a template class. This may not necessarily catch all compilation errors, since invalid substitution of template parameters is not an error.

The macro parameters TEST_GROUP and TEST_NAME must each be a valid part of a C++ identifier. In particular, they should not contain any spaces or other characters that are not allowed in the name of a class.

On instantiation, the macro parameters TYPE1 and TYPE2 must be the name of a valid C++ type. The types will be treated as template parameters. Thus, if your unit test references typedefs in TYPE1 or TYPE2, it should use typename to access them. For example:

TEUCHOS_UNIT_TEST_TEMPLATE_2_DECL( myTestGroup, myTestName, StlContainer1Type, StlContainer2Type ) {
typedef typename StlContainer1Type::value_type value1_type;
typedef typename StlContainer2Type::value_type value2_type;
// ... the rest of the unit test ...
}

When instantiating the unit test for a particular template parameter using TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT, the macro parameter values TYPE1 and TYPE2 must not contain any spaces (Bug 5757). If you want TYPE1 or TYPE2 to be a type with spaces, like unsigned int or long double, you must first use a typedef to alias the original type to a name without spaces, and then use the name without spaces. For example:

// Define the templated unit test.
TEUCHOS_UNIT_TEST_TEMPLATE_2_DECL( myTestGroup, myTestName, IntegerType, RealType ) {
IntegerType x = 42;
RealType y = 42;
TEST_EQUALITY_CONST( x, static_cast<IntegerType> (y) );
// ... the rest of the unit test ...
}
//
// Instantiate the unit test for various values of IntegerType and RealType.
//
TEUCHOS_UNIT_TEST_TEMPLATE_2_INSTANT( myTestGroup, myTestName, int, float )
TEUCHOS_UNIT_TEST_TEMPLATE_2_INSTANT( myTestGroup, myTestName, long, double )
// Typedef to work around Bug 5757 (TYPE values cannot have spaces).
typedef long double long_double_type;
TEUCHOS_UNIT_TEST_TEMPLATE_2_INSTANT( myTestGroup, myTestName, int, long_double_type )

Definition at line 270 of file Teuchos_UnitTestHelpers.hpp.

#define TEUCHOS_UNIT_TEST_TEMPLATE_2_INSTANT (   TEST_GROUP,
  TEST_NAME,
  TYPE1,
  TYPE2 
)
Value:
\
template class TEST_GROUP##_##TEST_NAME##_UnitTest<TYPE1, TYPE2 >; \
TEST_GROUP##_##TEST_NAME##_UnitTest<TYPE1, TYPE2 > \
instance_##TEST_GROUP##_##TYPE1##_##TYPE2##_##TEST_NAME##_UnitTest(#TYPE1,#TYPE2);

Instantiate a templated unit test with two template parameters.

Use this macro to instantiate for particular template parameter values the templated unit test defined by TEUCHOS_UNIT_TEST_TEMPLATE_2_DECL with the same TEST_GROUP and TEST_NAME values. For more details and examples, see the documentation of TEUCHOS_UNIT_TEST_TEMPLATE_2_DECL.

Definition at line 301 of file Teuchos_UnitTestHelpers.hpp.

#define TEUCHOS_UNIT_TEST_TEMPLATE_3_DECL (   TEST_GROUP,
  TEST_NAME,
  TYPE1,
  TYPE2,
  TYPE3 
)
Value:
template<class TYPE1, class TYPE2, class TYPE3> \
class TEST_GROUP##_##TEST_NAME##_UnitTest : public Teuchos::UnitTestBase \
{ \
public: \
TEST_GROUP##_##TEST_NAME##_UnitTest( \
const std::string& type1Name, \
const std::string& type2Name, \
const std::string& type3Name \
) \
std::string(#TEST_GROUP)+"_"+type1Name+"_"+type2Name+"_"+type3Name, #TEST_NAME ) \
{} \
void runUnitTestImpl( Teuchos::FancyOStream &out, bool &success ) const; \
virtual std::string unitTestFile() const { return __FILE__; } \
virtual long int unitTestFileLineNumber() const { return __LINE__; } \
}; \
\
template<class TYPE1, class TYPE2, class TYPE3> \
void TEST_GROUP##_##TEST_NAME##_UnitTest<TYPE1,TYPE2,TYPE3>::runUnitTestImpl( \
Teuchos::FancyOStream &out, bool &success ) const \
std::ostream subclass that performs the magic of indenting data sent to an std::ostream object among ...
Unit test base class.

Macro for defining a templated unit test with three template parameters.

Definition at line 312 of file Teuchos_UnitTestHelpers.hpp.

#define TEUCHOS_UNIT_TEST_TEMPLATE_3_INSTANT (   TEST_GROUP,
  TEST_NAME,
  TYPE1,
  TYPE2,
  TYPE3 
)
Value:
\
template class TEST_GROUP##_##TEST_NAME##_UnitTest<TYPE1, TYPE2, TYPE3 >; \
TEST_GROUP##_##TEST_NAME##_UnitTest<TYPE1, TYPE2, TYPE3 > \
instance_##TEST_GROUP##_##TYPE1##_##TYPE2##_##TYPE3##_##TEST_NAME##_UnitTest(#TYPE1,#TYPE2,#TYPE3);

Instantiate a templated unit test with three template parameters.

Definition at line 339 of file Teuchos_UnitTestHelpers.hpp.

#define TEUCHOS_UNIT_TEST_TEMPLATE_4_DECL (   TEST_GROUP,
  TEST_NAME,
  TYPE1,
  TYPE2,
  TYPE3,
  TYPE4 
)
Value:
template<class TYPE1, class TYPE2, class TYPE3, class TYPE4> \
class TEST_GROUP##_##TEST_NAME##_UnitTest : public Teuchos::UnitTestBase \
{ \
public: \
TEST_GROUP##_##TEST_NAME##_UnitTest( \
const std::string& type1Name, \
const std::string& type2Name, \
const std::string& type3Name, \
const std::string& type4Name \
) \
std::string(#TEST_GROUP)+"_"+type1Name+"_"+type2Name+"_"+type3Name+"_"+type4Name, #TEST_NAME ) \
{} \
void runUnitTestImpl( Teuchos::FancyOStream &out, bool &success ) const; \
virtual std::string unitTestFile() const { return __FILE__; } \
virtual long int unitTestFileLineNumber() const { return __LINE__; } \
}; \
\
template<class TYPE1, class TYPE2, class TYPE3, class TYPE4> \
void TEST_GROUP##_##TEST_NAME##_UnitTest<TYPE1,TYPE2,TYPE3,TYPE4>::runUnitTestImpl( \
Teuchos::FancyOStream &out, bool &success ) const \
std::ostream subclass that performs the magic of indenting data sent to an std::ostream object among ...
Unit test base class.

Macro for defining a templated unit test with four template parameters.

Definition at line 350 of file Teuchos_UnitTestHelpers.hpp.

#define TEUCHOS_UNIT_TEST_TEMPLATE_4_INSTANT (   TEST_GROUP,
  TEST_NAME,
  TYPE1,
  TYPE2,
  TYPE3,
  TYPE4 
)
Value:
\
template class TEST_GROUP##_##TEST_NAME##_UnitTest<TYPE1, TYPE2, TYPE3, TYPE4 >; \
TEST_GROUP##_##TEST_NAME##_UnitTest<TYPE1, TYPE2, TYPE3, TYPE4 > \
instance_##TEST_GROUP##_##TYPE1##_##TYPE2##_##TYPE3##_##TYPE4##_##TEST_NAME##_UnitTest(#TYPE1,#TYPE2,#TYPE3,#TYPE4);

Instantiate a templated unit test with four template parameters.

Definition at line 378 of file Teuchos_UnitTestHelpers.hpp.