Teuchos - Trilinos Tools Package Version of the Day
Defines
Unit Testing Definition Macros
Unit Testing Support

Defines

#define TEUCHOS_UNIT_TEST(TEST_GROUP, TEST_NAME)
 Macro for defining a (non-templated) unit test.
#define TEUCHOS_UNIT_TEST_TEMPLATE_1_DECL(TEST_GROUP, TEST_NAME, TYPE)
 Macro for defining a templated unit test with one template parameter.
#define TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT(TEST_GROUP, TEST_NAME, TYPE)
 Instantiate a templated unit test with one template parameter.
#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.
#define TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT_SCALAR_TYPES(TEST_GROUP, TEST_NAME)
 Instantiate a whole group of tests for supported Scalar types.
#define TEUCHOS_UNIT_TEST_TEMPLATE_2_DECL(TEST_GROUP, TEST_NAME, TYPE1, TYPE2)
 Macro for defining a templated unit test with two template parameters.
#define TEUCHOS_UNIT_TEST_TEMPLATE_2_INSTANT(TEST_GROUP, TEST_NAME, TYPE1, TYPE2)
 Instantiate a templated unit test with two template parameters.
#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.
#define TEUCHOS_UNIT_TEST_TEMPLATE_3_INSTANT(TEST_GROUP, TEST_NAME, TYPE1, TYPE2, TYPE3)
 Instantiate a templated unit test with three template parameters.
#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.
#define TEUCHOS_UNIT_TEST_TEMPLATE_4_INSTANT(TEST_GROUP, TEST_NAME, TYPE1, TYPE2, TYPE3, TYPE4)
 Instantiate a templated unit test with four template parameters.

Detailed Description

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

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

Define 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 \

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.
   TEST_EQUALITY_CONST( x, y );
 }

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 \

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;
   TEST_EQUALITY_CONST( x, y );
   // ... 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 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 \
       ) \
      :Teuchos::UnitTestBase( \
         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 \

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 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 \
       ) \
      :Teuchos::UnitTestBase( \
         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 \

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 \
       ) \
      :Teuchos::UnitTestBase( \
         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 \

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.

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines