Blame examples/cppunittest/TestAssertTest.cpp

Packit 8c9aa0
#include "CoreSuite.h"
Packit 8c9aa0
#include "TestAssertTest.h"
Packit 8c9aa0
#include <cppunit/portability/FloatingPoint.h>
Packit 8c9aa0
#include <algorithm>
Packit 8c9aa0
#include <limits>
Packit 8c9aa0
Packit 8c9aa0
/*
Packit 8c9aa0
 Note:
Packit 8c9aa0
 - tests need to be added to test asserEquals() template function and
Packit 8c9aa0
 use of assertion traits. Some check may need to be added to check
Packit 8c9aa0
 the message content in Exception.
Packit 8c9aa0
 - code need to be refactored with the use of a test caller that expect
Packit 8c9aa0
 an exception.
Packit 8c9aa0
 */
Packit 8c9aa0
Packit 8c9aa0
enum class EnumClass
Packit 8c9aa0
{
Packit 8c9aa0
    VALUE1,
Packit 8c9aa0
    VALUE2
Packit 8c9aa0
};
Packit 8c9aa0
Packit 8c9aa0
Packit 8c9aa0
CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( TestAssertTest,
Packit 8c9aa0
                                       coreSuiteName() );
Packit 8c9aa0
Packit 8c9aa0
Packit 8c9aa0
TestAssertTest::TestAssertTest()
Packit 8c9aa0
{
Packit 8c9aa0
}
Packit 8c9aa0
Packit 8c9aa0
Packit 8c9aa0
TestAssertTest::~TestAssertTest()
Packit 8c9aa0
{
Packit 8c9aa0
}
Packit 8c9aa0
Packit 8c9aa0
Packit 8c9aa0
void 
Packit 8c9aa0
TestAssertTest::setUp()
Packit 8c9aa0
{
Packit 8c9aa0
}
Packit 8c9aa0
Packit 8c9aa0
Packit 8c9aa0
void 
Packit 8c9aa0
TestAssertTest::tearDown()
Packit 8c9aa0
{
Packit 8c9aa0
}
Packit 8c9aa0
Packit 8c9aa0
Packit 8c9aa0
void 
Packit 8c9aa0
TestAssertTest::testAssertThrow()
Packit 8c9aa0
{
Packit 8c9aa0
   CPPUNIT_ASSERT_THROW( throw std::string(), std::string );
Packit 8c9aa0
Packit 8c9aa0
   try
Packit 8c9aa0
   {
Packit 8c9aa0
      int x;
Packit 8c9aa0
      CPPUNIT_ASSERT_THROW( x = 1234, std::string );
Packit 8c9aa0
      (void) x;
Packit 8c9aa0
   }
Packit 8c9aa0
   catch ( CPPUNIT_NS::Exception & )
Packit 8c9aa0
   {
Packit 8c9aa0
      return;
Packit 8c9aa0
   }
Packit 8c9aa0
Packit 8c9aa0
   throw std::exception();
Packit 8c9aa0
}
Packit 8c9aa0
Packit 8c9aa0
Packit 8c9aa0
void 
Packit 8c9aa0
TestAssertTest::testAssertNoThrow()
Packit 8c9aa0
{
Packit 8c9aa0
   int x;
Packit 8c9aa0
   CPPUNIT_ASSERT_NO_THROW( x = 1234 );
Packit 8c9aa0
   (void)x;
Packit 8c9aa0
Packit 8c9aa0
   try
Packit 8c9aa0
   {
Packit 8c9aa0
      CPPUNIT_ASSERT_NO_THROW( throw std::exception() );
Packit 8c9aa0
   }
Packit 8c9aa0
   catch ( CPPUNIT_NS::Exception & )
Packit 8c9aa0
   {
Packit 8c9aa0
      return;
Packit 8c9aa0
   }
Packit 8c9aa0
   throw std::exception();
Packit 8c9aa0
}
Packit 8c9aa0
Packit 8c9aa0
Packit 8c9aa0
void 
Packit 8c9aa0
TestAssertTest::testAssertAssertionFail()
Packit 8c9aa0
{
Packit 8c9aa0
   CPPUNIT_ASSERT_ASSERTION_FAIL( throw CPPUNIT_NS::Exception() );
Packit 8c9aa0
Packit 8c9aa0
   try
Packit 8c9aa0
   {
Packit 8c9aa0
      int x;
Packit 8c9aa0
      CPPUNIT_ASSERT_ASSERTION_FAIL( x = 1234 );
Packit 8c9aa0
      (void)x;
Packit 8c9aa0
   }
Packit 8c9aa0
   catch ( CPPUNIT_NS::Exception & )
Packit 8c9aa0
   {
Packit 8c9aa0
      return;
Packit 8c9aa0
   }
Packit 8c9aa0
Packit 8c9aa0
   throw std::exception();
Packit 8c9aa0
}
Packit 8c9aa0
Packit 8c9aa0
Packit 8c9aa0
void 
Packit 8c9aa0
TestAssertTest::testAssertAssertionPass()
Packit 8c9aa0
{
Packit 8c9aa0
   int x;
Packit 8c9aa0
   CPPUNIT_ASSERT_ASSERTION_PASS( x = 1234 );
Packit 8c9aa0
   (void)x;
Packit 8c9aa0
Packit 8c9aa0
   try
Packit 8c9aa0
   {
Packit 8c9aa0
      CPPUNIT_ASSERT_ASSERTION_PASS( throw CPPUNIT_NS::Exception() );
Packit 8c9aa0
   }
Packit 8c9aa0
   catch ( CPPUNIT_NS::Exception & )
Packit 8c9aa0
   {
Packit 8c9aa0
      return;
Packit 8c9aa0
   }
Packit 8c9aa0
Packit 8c9aa0
   throw std::exception();
Packit 8c9aa0
}
Packit 8c9aa0
Packit 8c9aa0
Packit 8c9aa0
void 
Packit 8c9aa0
TestAssertTest::testAssert()
Packit 8c9aa0
{
Packit 8c9aa0
  CPPUNIT_ASSERT_ASSERTION_PASS( CPPUNIT_ASSERT( true ) );
Packit 8c9aa0
  
Packit 8c9aa0
  CPPUNIT_ASSERT_ASSERTION_FAIL( CPPUNIT_ASSERT( false ) );
Packit 8c9aa0
}
Packit 8c9aa0
Packit 8c9aa0
Packit 8c9aa0
static int foo() { return 1; }
Packit 8c9aa0
Packit 8c9aa0
Packit 8c9aa0
void 
Packit 8c9aa0
TestAssertTest::testAssertEqual()
Packit 8c9aa0
{
Packit 8c9aa0
  CPPUNIT_ASSERT_ASSERTION_PASS( CPPUNIT_ASSERT_EQUAL( 1, 1 ) );
Packit 8c9aa0
  CPPUNIT_ASSERT_ASSERTION_PASS( CPPUNIT_ASSERT_EQUAL( 1, foo() ) );
Packit 8c9aa0
  CPPUNIT_ASSERT_ASSERTION_PASS( CPPUNIT_ASSERT_EQUAL( 12345678, 12345678 ) );
Packit 8c9aa0
  CPPUNIT_ASSERT_ASSERTION_PASS( CPPUNIT_ASSERT_EQUAL( EnumClass::VALUE1, EnumClass::VALUE1 ) );
Packit 8c9aa0
Packit 8c9aa0
  CPPUNIT_ASSERT_ASSERTION_FAIL( CPPUNIT_ASSERT_EQUAL( 1, 2 ) );
Packit 8c9aa0
  CPPUNIT_ASSERT_ASSERTION_FAIL( CPPUNIT_ASSERT_EQUAL( EnumClass::VALUE1, EnumClass::VALUE2 ) );
Packit 8c9aa0
}
Packit 8c9aa0
Packit 8c9aa0
Packit 8c9aa0
void
Packit 8c9aa0
TestAssertTest::testAssertLess()
Packit 8c9aa0
{
Packit 8c9aa0
    CPPUNIT_ASSERT_ASSERTION_PASS( CPPUNIT_ASSERT_LESS( 2, 1 ) );
Packit 8c9aa0
    CPPUNIT_ASSERT_ASSERTION_PASS( CPPUNIT_ASSERT_LESS( 12345679, 12345678 ) );
Packit 8c9aa0
Packit 8c9aa0
    CPPUNIT_ASSERT_ASSERTION_FAIL( CPPUNIT_ASSERT_LESS( 1, 2 ) );
Packit 8c9aa0
}
Packit 8c9aa0
Packit 8c9aa0
Packit 8c9aa0
void
Packit 8c9aa0
TestAssertTest::testAssertGreater()
Packit 8c9aa0
{
Packit 8c9aa0
    CPPUNIT_ASSERT_ASSERTION_PASS( CPPUNIT_ASSERT_GREATER( 1, 2 ) );
Packit 8c9aa0
    CPPUNIT_ASSERT_ASSERTION_PASS( CPPUNIT_ASSERT_GREATER( 12345678, 12345679 ));
Packit 8c9aa0
Packit 8c9aa0
    CPPUNIT_ASSERT_ASSERTION_FAIL( CPPUNIT_ASSERT_GREATER( 2, 1 ) );
Packit 8c9aa0
    CPPUNIT_ASSERT_ASSERTION_FAIL( CPPUNIT_ASSERT_GREATER( 2, 2 ) );
Packit 8c9aa0
}
Packit 8c9aa0
Packit 8c9aa0
Packit 8c9aa0
void
Packit 8c9aa0
TestAssertTest::testAssertLessEqual()
Packit 8c9aa0
{
Packit 8c9aa0
    CPPUNIT_ASSERT_ASSERTION_PASS( CPPUNIT_ASSERT_LESSEQUAL( 2, 1 ) );
Packit 8c9aa0
    CPPUNIT_ASSERT_ASSERTION_PASS( CPPUNIT_ASSERT_LESSEQUAL( 12345679, 12345678 ));
Packit 8c9aa0
    CPPUNIT_ASSERT_ASSERTION_PASS( CPPUNIT_ASSERT_LESSEQUAL( 2, 2 ) );
Packit 8c9aa0
Packit 8c9aa0
    CPPUNIT_ASSERT_ASSERTION_FAIL( CPPUNIT_ASSERT_LESSEQUAL( 1, 2 ) );
Packit 8c9aa0
}
Packit 8c9aa0
Packit 8c9aa0
void
Packit 8c9aa0
TestAssertTest::testAssertGreaterEqual()
Packit 8c9aa0
{
Packit 8c9aa0
    CPPUNIT_ASSERT_ASSERTION_PASS( CPPUNIT_ASSERT_GREATEREQUAL( 1, 2 ) );
Packit 8c9aa0
    CPPUNIT_ASSERT_ASSERTION_PASS( CPPUNIT_ASSERT_GREATEREQUAL( 12345678, 12345679 ));
Packit 8c9aa0
    CPPUNIT_ASSERT_ASSERTION_PASS( CPPUNIT_ASSERT_GREATEREQUAL( 12345678, 12345678 ));
Packit 8c9aa0
    CPPUNIT_ASSERT_ASSERTION_PASS( CPPUNIT_ASSERT_GREATEREQUAL( 2, 2 ) );
Packit 8c9aa0
Packit 8c9aa0
    CPPUNIT_ASSERT_ASSERTION_FAIL( CPPUNIT_ASSERT_GREATEREQUAL( 2, 1 ) );
Packit 8c9aa0
}
Packit 8c9aa0
Packit 8c9aa0
Packit 8c9aa0
Packit 8c9aa0
void 
Packit 8c9aa0
TestAssertTest::testAssertMessageTrue()
Packit 8c9aa0
{
Packit 8c9aa0
  CPPUNIT_ASSERT_ASSERTION_PASS( 
Packit 8c9aa0
     CPPUNIT_ASSERT_MESSAGE( "This test should not failed", true ) );
Packit 8c9aa0
}
Packit 8c9aa0
Packit 8c9aa0
Packit 8c9aa0
void 
Packit 8c9aa0
TestAssertTest::testAssertMessageFalse()
Packit 8c9aa0
{
Packit 8c9aa0
  bool exceptionCaught = false;
Packit 8c9aa0
  std::string message( "This test message should not be seen" );
Packit 8c9aa0
  try
Packit 8c9aa0
  {
Packit 8c9aa0
    CPPUNIT_ASSERT_MESSAGE( message, 2==3 );
Packit 8c9aa0
  }
Packit 8c9aa0
  catch( CPPUNIT_NS::Exception &e )
Packit 8c9aa0
  {
Packit 8c9aa0
    exceptionCaught = true; // ok, we were expecting an exception.
Packit 8c9aa0
    checkMessageContains( &e, message );
Packit 8c9aa0
  }
Packit 8c9aa0
Packit 8c9aa0
  CPPUNIT_ASSERT( exceptionCaught );
Packit 8c9aa0
}
Packit 8c9aa0
Packit 8c9aa0
Packit 8c9aa0
void 
Packit 8c9aa0
TestAssertTest::testAssertDoubleEquals()
Packit 8c9aa0
{
Packit 8c9aa0
  CPPUNIT_ASSERT_ASSERTION_PASS( CPPUNIT_ASSERT_DOUBLES_EQUAL( 1.1, 1.2, 0.101 ) );
Packit 8c9aa0
  CPPUNIT_ASSERT_ASSERTION_PASS( CPPUNIT_ASSERT_DOUBLES_EQUAL( 1.2, 1.1, 0.101 ) );
Packit 8c9aa0
Packit 8c9aa0
  CPPUNIT_ASSERT_ASSERTION_FAIL( CPPUNIT_ASSERT_DOUBLES_EQUAL( 1.1, 1.2, 0.09 ) );
Packit 8c9aa0
  CPPUNIT_ASSERT_ASSERTION_FAIL( CPPUNIT_ASSERT_DOUBLES_EQUAL( 1.2, 1.1, 0.09 ) );
Packit 8c9aa0
}
Packit 8c9aa0
Packit 8c9aa0
/*
Packit 8c9aa0
 * Test that the error message from CPPUNIT_ASSERT_DOUBLES_EQUAL() 
Packit 8c9aa0
 * has more than the default 6 digits of precision.
Packit 8c9aa0
 */
Packit 8c9aa0
void 
Packit 8c9aa0
TestAssertTest::testAssertDoubleEqualsPrecision()
Packit 8c9aa0
{
Packit 8c9aa0
  std::string failure( "2.000000001" );
Packit 8c9aa0
  try
Packit 8c9aa0
  {
Packit 8c9aa0
    CPPUNIT_ASSERT_DOUBLES_EQUAL( 1.0, 2.000000001, 1 );
Packit 8c9aa0
  }
Packit 8c9aa0
  catch( CPPUNIT_NS::Exception &e )
Packit 8c9aa0
  {
Packit 8c9aa0
    checkMessageContains( &e, failure );
Packit 8c9aa0
    return;
Packit 8c9aa0
  }
Packit 8c9aa0
  CPPUNIT_FAIL( "Expected assertion failure" );
Packit 8c9aa0
}
Packit 8c9aa0
Packit 8c9aa0
Packit 8c9aa0
void 
Packit 8c9aa0
TestAssertTest::testAssertDoubleNonFinite()
Packit 8c9aa0
{
Packit 8c9aa0
  double inf = std::numeric_limits<double>::infinity();
Packit 8c9aa0
  double nan = std::numeric_limits<double>::quiet_NaN();
Packit 8c9aa0
  // test our portable floating-point primitives that detect NaN values
Packit 8c9aa0
  CPPUNIT_ASSERT( CPPUNIT_NS::floatingPointIsUnordered( nan ) );
Packit 8c9aa0
  CPPUNIT_ASSERT( !CPPUNIT_NS::floatingPointIsUnordered( inf ) );
Packit 8c9aa0
  CPPUNIT_ASSERT( !CPPUNIT_NS::floatingPointIsUnordered( -inf ) );
Packit 8c9aa0
  CPPUNIT_ASSERT( !CPPUNIT_NS::floatingPointIsUnordered( 1.0 ) );
Packit 8c9aa0
  CPPUNIT_ASSERT( !CPPUNIT_NS::floatingPointIsUnordered( 1.5 ) );
Packit 8c9aa0
  CPPUNIT_ASSERT( !CPPUNIT_NS::floatingPointIsUnordered( 2.0 ) );
Packit 8c9aa0
  CPPUNIT_ASSERT( !CPPUNIT_NS::floatingPointIsUnordered( 2.5 ) );
Packit 8c9aa0
  CPPUNIT_ASSERT( !CPPUNIT_NS::floatingPointIsUnordered( 0.0 ) );
Packit 8c9aa0
  CPPUNIT_ASSERT( !CPPUNIT_NS::floatingPointIsUnordered( -1.0 ) );
Packit 8c9aa0
  CPPUNIT_ASSERT( !CPPUNIT_NS::floatingPointIsUnordered( -2.0 ) );
Packit 8c9aa0
  // test our portable floating-point primitives that detect finite values
Packit 8c9aa0
  CPPUNIT_ASSERT( CPPUNIT_NS::floatingPointIsFinite( 0.0 ) );
Packit 8c9aa0
  CPPUNIT_ASSERT( CPPUNIT_NS::floatingPointIsFinite( 0.5 ) );
Packit 8c9aa0
  CPPUNIT_ASSERT( CPPUNIT_NS::floatingPointIsFinite( 1.0 ) );
Packit 8c9aa0
  CPPUNIT_ASSERT( CPPUNIT_NS::floatingPointIsFinite( 1.5 ) );
Packit 8c9aa0
  CPPUNIT_ASSERT( CPPUNIT_NS::floatingPointIsFinite( 2.0 ) );
Packit 8c9aa0
  CPPUNIT_ASSERT( CPPUNIT_NS::floatingPointIsFinite( 2.5 ) );
Packit 8c9aa0
  CPPUNIT_ASSERT( CPPUNIT_NS::floatingPointIsFinite( -1.5 ) );
Packit 8c9aa0
  CPPUNIT_ASSERT( !CPPUNIT_NS::floatingPointIsFinite( nan ) );
Packit 8c9aa0
  CPPUNIT_ASSERT( !CPPUNIT_NS::floatingPointIsFinite( inf ) );
Packit 8c9aa0
  CPPUNIT_ASSERT( !CPPUNIT_NS::floatingPointIsFinite( -inf ) );
Packit 8c9aa0
  // Infinity tests
Packit 8c9aa0
  CPPUNIT_ASSERT( inf == inf );
Packit 8c9aa0
  CPPUNIT_ASSERT( -inf == -inf );
Packit 8c9aa0
  CPPUNIT_ASSERT( -inf != inf );
Packit 8c9aa0
  CPPUNIT_ASSERT( -inf < inf );
Packit 8c9aa0
  CPPUNIT_ASSERT( inf > -inf );
Packit 8c9aa0
  CPPUNIT_ASSERT_ASSERTION_FAIL( CPPUNIT_ASSERT_DOUBLES_EQUAL( inf, 0.0, 1.0 ) );
Packit 8c9aa0
  CPPUNIT_ASSERT_ASSERTION_FAIL( CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.0, inf, 1.0 ) );
Packit 8c9aa0
  CPPUNIT_ASSERT_ASSERTION_PASS( CPPUNIT_ASSERT_DOUBLES_EQUAL( inf, inf, 1.0 ) );
Packit 8c9aa0
  // NaN tests 
Packit 8c9aa0
  CPPUNIT_ASSERT_ASSERTION_FAIL( CPPUNIT_ASSERT_DOUBLES_EQUAL( nan, 0.0, 1.0 ) );
Packit 8c9aa0
  CPPUNIT_ASSERT_ASSERTION_FAIL( CPPUNIT_ASSERT_DOUBLES_EQUAL( nan, nan, 1.0 ) );
Packit 8c9aa0
  CPPUNIT_ASSERT_ASSERTION_FAIL( CPPUNIT_ASSERT_DOUBLES_EQUAL( nan, inf, 1.0 ) );
Packit 8c9aa0
  CPPUNIT_ASSERT_ASSERTION_FAIL( CPPUNIT_ASSERT_DOUBLES_EQUAL( inf, nan, 1.0 ) );
Packit 8c9aa0
}
Packit 8c9aa0
Packit 8c9aa0
Packit 8c9aa0
void 
Packit 8c9aa0
TestAssertTest::testFail()
Packit 8c9aa0
{
Packit 8c9aa0
  bool exceptionCaught = false;
Packit 8c9aa0
  std::string failure( "FailureMessage" );
Packit 8c9aa0
  try
Packit 8c9aa0
  {
Packit 8c9aa0
    CPPUNIT_FAIL( failure );
Packit 8c9aa0
  }
Packit 8c9aa0
  catch( CPPUNIT_NS::Exception &e )
Packit 8c9aa0
  {
Packit 8c9aa0
    exceptionCaught = true;
Packit 8c9aa0
    checkMessageContains( &e, failure );
Packit 8c9aa0
  }
Packit 8c9aa0
  CPPUNIT_ASSERT( exceptionCaught );
Packit 8c9aa0
}
Packit 8c9aa0
Packit 8c9aa0
Packit 8c9aa0
void 
Packit 8c9aa0
TestAssertTest::checkMessageContains( CPPUNIT_NS::Exception *e,
Packit 8c9aa0
                                      std::string expected )
Packit 8c9aa0
{
Packit 8c9aa0
  std::string actual = e->what();
Packit 8c9aa0
  CPPUNIT_ASSERT_MESSAGE( "Expected message not found: " + expected +
Packit 8c9aa0
                          ", was: " + actual,
Packit 8c9aa0
      std::search( actual.begin(), actual.end(), 
Packit 8c9aa0
                   expected.begin(), expected.end() ) != actual.end() );
Packit 8c9aa0
}