mirror of
https://github.com/mat007/turtle.git
synced 2026-06-22 12:13:43 +00:00
Added MOCK_TERNARY_CONSTRAINT helper macro
git-svn-id: https://svn.code.sf.net/p/turtle/code/trunk@658 860be788-9bd5-4423-9f1e-828f051e677b
This commit is contained in:
parent
8919e56678
commit
c8072405c8
3 changed files with 67 additions and 5 deletions
|
|
@ -771,3 +771,10 @@ MOCK_BINARY_CONSTRAINT( equal, actual == expected ) // this is
|
||||||
MOCK_BINARY_CONSTRAINT( near, std::abs( actual - expected ) < 0.01 ) // this defines a 'near' constraint which can be used as 'near( 42 )'
|
MOCK_BINARY_CONSTRAINT( near, std::abs( actual - expected ) < 0.01 ) // this defines a 'near' constraint which can be used as 'near( 42 )'
|
||||||
//]
|
//]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
namespace helpers_example_3
|
||||||
|
{
|
||||||
|
//[ helpers_example_3
|
||||||
|
MOCK_TERNARY_CONSTRAINT( near, std::abs( actual - expected ) < arg ) // this defines a 'near' constraint which can be used as 'near( 42, 0.01 )'
|
||||||
|
//]
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -518,6 +518,22 @@ Example :
|
||||||
|
|
||||||
[endsect]
|
[endsect]
|
||||||
|
|
||||||
|
[section MOCK_TERNARY_CONSTRAINT]
|
||||||
|
|
||||||
|
Synopsis :
|
||||||
|
|
||||||
|
MOCK_TERNARY_CONSTRAINT( name, expression ) // defines a constraint 'name' based on the given 'expression'
|
||||||
|
|
||||||
|
The expression manipulates the received parameter 'actual' as well as the passed arguments 'expected' and 'arg' in order to implement the constraint.
|
||||||
|
|
||||||
|
[note The types of expected and arg must be copy-constructible and assignable.]
|
||||||
|
|
||||||
|
Example :
|
||||||
|
|
||||||
|
[helpers_example_3]
|
||||||
|
|
||||||
|
[endsect]
|
||||||
|
|
||||||
[endsect]
|
[endsect]
|
||||||
|
|
||||||
[endsect]
|
[endsect]
|
||||||
|
|
|
||||||
|
|
@ -164,10 +164,49 @@ namespace detail
|
||||||
Expected expected_; \
|
Expected expected_; \
|
||||||
}; \
|
}; \
|
||||||
} \
|
} \
|
||||||
template< typename T > \
|
template< typename Expected > \
|
||||||
mock::constraint< detail::N< T > > N( T t ) \
|
mock::constraint< detail::N< Expected > > N( Expected expected ) \
|
||||||
{ \
|
{ \
|
||||||
return detail::N< T >( t ); \
|
return detail::N< Expected >( expected ); \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define MOCK_TERNARY_CONSTRAINT(N, Expr) \
|
||||||
|
namespace detail \
|
||||||
|
{ \
|
||||||
|
template< typename Expected, typename Arg > \
|
||||||
|
struct N \
|
||||||
|
{ \
|
||||||
|
explicit N( const Expected& expected, const Arg& arg ) \
|
||||||
|
: expected_( expected ) \
|
||||||
|
, arg_( arg ) \
|
||||||
|
{} \
|
||||||
|
template< typename Actual > \
|
||||||
|
bool operator()( const Actual& actual ) const \
|
||||||
|
{ \
|
||||||
|
return test( actual, boost::unwrap_ref( expected_ ), \
|
||||||
|
boost::unwrap_ref( arg_ ) ); \
|
||||||
|
} \
|
||||||
|
template< typename Actual, typename T1, typename T2 > \
|
||||||
|
bool test( const Actual& actual, \
|
||||||
|
const T1& expected, const T2& arg ) const \
|
||||||
|
{ \
|
||||||
|
return Expr; \
|
||||||
|
} \
|
||||||
|
friend std::ostream& operator<<( std::ostream& s, const N& n ) \
|
||||||
|
{ \
|
||||||
|
return s << BOOST_STRINGIZE(N) \
|
||||||
|
<< "( " << mock::format( n.expected_ ) \
|
||||||
|
<< ", " << mock::format( n.arg_ ) << " )"; \
|
||||||
|
} \
|
||||||
|
Expected expected_; \
|
||||||
|
Arg arg_; \
|
||||||
|
}; \
|
||||||
|
} \
|
||||||
|
template< typename Expected, typename Arg > \
|
||||||
|
mock::constraint< detail::N< Expected, Arg > > N( \
|
||||||
|
Expected expected, Arg arg ) \
|
||||||
|
{ \
|
||||||
|
return detail::N< Expected, Arg >( expected, arg ); \
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // MOCK_CONSTRAINT_HPP_INCLUDED
|
#endif // MOCK_CONSTRAINT_HPP_INCLUDED
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue