= Parametrized test case =
 In the implementation of the test case, the callback for setUp(), run() and tearDown() are provided through generic functors. Those functors can be bound to a struct functor, a C function or a C++ method. Parameters can also be bound by the functors so that when the call is made, specific values are passed as parameters.

 Here is an excerpt from examples/parametrized_test_case/:

{{{#!cplusplus
#include <cpput/testcase.h>
#include <cpput/testsuite.h>
#include <cpput/testrunner.h>    // cppunit2 testrunner for opentest
#include <cpput/assert.h>
#include <opentest/texttestdriver.h>
#include <opentest/properties.h>


static void testMultiply( int x, int y, int expected_result )
{
   int result = x * y;
   CPPUT_ASSERT_EQUAL( expected_result, result );
}



int main( int argc, const char *argv[] )
{
   CppUT::TestSuitePtr allSuite = CppUT::makeTestSuite( "All tests" );
   allSuite->add( CppUT::makeTestCase( 
       CppTL::bind_cfn( testMultiply, 7, 2, 7*2 ), 
       "multiply 7*2" ) );
   allSuite->add( CppUT::makeTestCase( 
      CppTL::bind_cfn( testMultiply, 7, 5, 7*4 ), 
      "multiply 7*5 (failing demo)" ) );

   CppUT::TestRunner runner;
   CppUT::AbstractTestSuitePtr rootSuite = 
      CppTL::staticPointerCast<CppUT::AbstractTestSuite>( allSuite );
   runner.setRootSuite( rootSuite );

   OpenTest::TextTestDriver driver( runner );
   bool sucessful = driver.run();
   return sucessful ? 0 : 1;
}
}}}

 While this example is trivial, the parameters bound to the test case could easily be read from some input files.
