Teuchos - Trilinos Tools Package  Version of the Day
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Macros
Unit Testing Definition Macros

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_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

There macros are used to define individual unit test code blocks. For example:

TEUCHOS_UNIT_TEST(SomeTestGroup, SomeTestName)
{
int i = 1;
int j = 2;
...
}

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::ostream subclass that performs the magic of indenting data sent to an std::ostream object among ...
Unit test base class.
std::string typeName(const T &t)
Template function for returning the concrete type name of a passed-in object.

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_REAL_SCALAR_TYPES (   TEST_GROUP,
  TEST_NAME 
)
Value:
TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT_FLOAT(TEST_GROUP, TEST_NAME) \
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:
TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT_FLOAT(TEST_GROUP, TEST_NAME) \
TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT_DOUBLE(TEST_GROUP, TEST_NAME) \
TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT_COMPLEX_FLOAT(TEST_GROUP, TEST_NAME) \
TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT_COMPLEX_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.