Teuchos - Trilinos Tools Package  Version of the Day
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; \
virtual std::string unitTestFile() const { return __FILE__; } \
virtual long int unitTestFileLineNumber() const { return __LINE__; } \
}; \
\
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.

1 TEUCHOS_UNIT_TEST( myTestGroup, testDouble ) {
2  double x, y;
3  // Make sure that assigning 42 to y doesn't throw an exception.
4  TEST_NOTHROW( x = 42 );
5  // Make sure that assigning 42 to y doesn't throw an exception.
6  TEST_NOTHROW( y = 42 );
7  // Make sure that x and y are now equal.
8  TEST_EQUALITY_CONST( x, y );
9 }

Definition at line 83 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:

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

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:

1 // Define the templated unit test.
2 TEUCHOS_UNIT_TEST_TEMPLATE_1_DECL( myTestGroup, myTestName, RealType ) {
3  RealType x = 42, y = 42;
4  TEST_EQUALITY_CONST( x, y );
5  // ... the rest of the unit test ...
6 }
7 
8 //
9 // Instantiate the unit test for various values of RealType.
10 //
11 TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT( myTestGroup, myTestName, float )
12 TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT( myTestGroup, myTestName, double )
13 
14 // Typedef to work around Bug 5757 (TYPE values cannot have spaces).
15 typedef long double long_double_type;
16 TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT( myTestGroup, myTestName, long_double_type )

Definition at line 160 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 187 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 226 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 235 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:

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

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:

1 // Define the templated unit test.
2 TEUCHOS_UNIT_TEST_TEMPLATE_2_DECL( myTestGroup, myTestName, IntegerType, RealType ) {
3  IntegerType x = 42;
4  RealType y = 42;
5  TEST_EQUALITY_CONST( x, static_cast<IntegerType> (y) );
6  // ... the rest of the unit test ...
7 }
8 
9 //
10 // Instantiate the unit test for various values of IntegerType and RealType.
11 //
12 TEUCHOS_UNIT_TEST_TEMPLATE_2_INSTANT( myTestGroup, myTestName, int, float )
13 TEUCHOS_UNIT_TEST_TEMPLATE_2_INSTANT( myTestGroup, myTestName, long, double )
14 
15 // Typedef to work around Bug 5757 (TYPE values cannot have spaces).
16 typedef long double long_double_type;
17 TEUCHOS_UNIT_TEST_TEMPLATE_2_INSTANT( myTestGroup, myTestName, int, long_double_type )

Definition at line 302 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 333 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 344 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 371 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 382 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 410 of file Teuchos_UnitTestHelpers.hpp.