2010-11-10 00:24:00 +01:00
|
|
|
/*
|
|
|
|
* TrickyTests.cpp
|
|
|
|
* Catch - Test
|
|
|
|
*
|
|
|
|
* Created by Phil on 09/11/2010.
|
|
|
|
* Copyright 2010 Two Blue Cubes Ltd. All rights reserved.
|
|
|
|
*
|
|
|
|
* Distributed under the Boost Software License, Version 1.0. (See accompanying
|
|
|
|
* file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
|
2010-11-12 09:12:01 +01:00
|
|
|
#include "../catch.hpp"
|
2010-11-10 00:24:00 +01:00
|
|
|
|
|
|
|
namespace Catch
|
|
|
|
{
|
|
|
|
template<>
|
|
|
|
std::string toString<std::pair<int, int> >( const std::pair<int, int>& value )
|
|
|
|
{
|
|
|
|
std::ostringstream oss;
|
|
|
|
oss << "std::pair( " << value.first << ", " << value.second << " )";
|
|
|
|
return oss.str();
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2011-03-10 15:09:32 +01:00
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
TEST_CASE
|
|
|
|
(
|
|
|
|
"./succeeding/Tricky/std::pair",
|
|
|
|
"Parsing a std::pair"
|
|
|
|
)
|
2010-11-10 00:24:00 +01:00
|
|
|
{
|
|
|
|
std::pair<int, int> aNicePair( 1, 2 );
|
|
|
|
|
|
|
|
// !TBD: would be nice if this could compile without the extra parentheses
|
2010-12-14 10:00:09 +01:00
|
|
|
REQUIRE( (std::pair<int, int>( 1, 2 )) == aNicePair );
|
2010-11-10 00:24:00 +01:00
|
|
|
|
2010-11-10 20:18:46 +01:00
|
|
|
}
|
|
|
|
|
2011-03-10 15:09:32 +01:00
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
TEST_CASE
|
|
|
|
(
|
2011-03-10 20:18:14 +01:00
|
|
|
"./inprogress/failing/Tricky/complex lhs",
|
2011-03-10 15:09:32 +01:00
|
|
|
"Where the LHS is not a simple value"
|
|
|
|
)
|
2010-11-10 20:18:46 +01:00
|
|
|
{
|
2011-03-10 20:18:14 +01:00
|
|
|
/*
|
2010-11-10 20:18:46 +01:00
|
|
|
int a = 1;
|
|
|
|
int b = 2;
|
|
|
|
|
2010-11-11 08:21:57 +01:00
|
|
|
// This only captures part of the expression, but issues a warning about the rest
|
2010-12-14 10:00:09 +01:00
|
|
|
REQUIRE( a == 2 || b == 2 );
|
2011-03-10 20:18:14 +01:00
|
|
|
*/
|
|
|
|
}
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
TEST_CASE
|
|
|
|
(
|
|
|
|
"./inprogress/failing/Tricky/complex 2",
|
|
|
|
"Where the LHS is not a simple value"
|
|
|
|
)
|
|
|
|
{
|
|
|
|
/*
|
|
|
|
int a = 1;
|
|
|
|
int b = 2;
|
|
|
|
|
|
|
|
// This only captures part of the expression, but issues a warning about the rest
|
|
|
|
REQUIRE( a+1 == b-1 );
|
|
|
|
*/
|
2010-11-11 21:37:46 +01:00
|
|
|
}
|
2010-11-29 20:40:44 +01:00
|
|
|
|
2010-11-16 20:30:41 +01:00
|
|
|
struct Opaque
|
|
|
|
{
|
|
|
|
int val;
|
2011-03-10 15:09:32 +01:00
|
|
|
bool operator ==( const Opaque& o ) const
|
2010-11-16 20:30:41 +01:00
|
|
|
{
|
2010-11-16 20:48:05 +01:00
|
|
|
return val == o.val;
|
2010-11-16 20:30:41 +01:00
|
|
|
}
|
|
|
|
};
|
|
|
|
|
2011-03-10 15:09:32 +01:00
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
TEST_CASE
|
|
|
|
(
|
|
|
|
"./failing/Tricky/non streamable type",
|
|
|
|
"A failing expression with a non streamable type is still captured"
|
|
|
|
)
|
2010-11-16 20:30:41 +01:00
|
|
|
{
|
|
|
|
|
|
|
|
Opaque o1, o2;
|
|
|
|
o1.val = 7;
|
|
|
|
o2.val = 8;
|
|
|
|
|
|
|
|
CHECK( &o1 == &o2 );
|
|
|
|
CHECK( o1 == o2 );
|
2010-11-29 20:48:37 +01:00
|
|
|
}
|
2011-03-10 15:09:32 +01:00
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
TEST_CASE
|
|
|
|
(
|
|
|
|
"./failing/string literals",
|
|
|
|
"string literals of different sizes can be compared"
|
|
|
|
)
|
|
|
|
{
|
|
|
|
REQUIRE( std::string( "first" ) == "second" );
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
TEST_CASE
|
|
|
|
(
|
|
|
|
"./succeeding/side-effects",
|
|
|
|
"An expression with side-effects should only be evaluated once"
|
|
|
|
)
|
|
|
|
{
|
|
|
|
int i = 7;
|
|
|
|
|
|
|
|
REQUIRE( i++ == 7 );
|
|
|
|
REQUIRE( i++ == 8 );
|
|
|
|
|
|
|
|
}
|