Blame examples/cppunittest/TestAssertTest.cpp

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