mirror of
https://github.com/catchorg/Catch2.git
synced 2024-11-22 21:36:11 +01:00
Allow { NULL <op> T }to work
This commit is contained in:
parent
ef611c65d9
commit
7dfd830a3a
@ -224,7 +224,16 @@ TEST_CASE( "./succeeding/conditions/ptr", "Pointers can be compared to null" )
|
|||||||
|
|
||||||
TestData data;
|
TestData data;
|
||||||
p = &data;
|
p = &data;
|
||||||
|
|
||||||
REQUIRE( p != NULL );
|
REQUIRE( p != NULL );
|
||||||
|
|
||||||
|
const TestData* cp = p;
|
||||||
|
REQUIRE( cp != NULL );
|
||||||
|
|
||||||
|
const TestData* const cpc = p;
|
||||||
|
REQUIRE( cpc != NULL );
|
||||||
|
|
||||||
|
// REQUIRE( NULL != p ); // gives warning, but should compile and run ok
|
||||||
}
|
}
|
||||||
|
|
||||||
// Not (!) tests
|
// Not (!) tests
|
||||||
|
@ -395,65 +395,65 @@ private:
|
|||||||
const T& m_lhs;
|
const T& m_lhs;
|
||||||
};
|
};
|
||||||
|
|
||||||
template<typename LhsT>
|
template<typename LhsT>
|
||||||
class PtrExpression
|
class PtrExpression
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////
|
||||||
|
PtrExpression
|
||||||
|
(
|
||||||
|
MutableResultInfo& result,
|
||||||
|
const LhsT* lhs
|
||||||
|
)
|
||||||
|
: m_result( result ),
|
||||||
|
m_lhs( lhs )
|
||||||
|
{}
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////
|
||||||
|
template<typename RhsT>
|
||||||
|
MutableResultInfo& operator ==
|
||||||
|
(
|
||||||
|
const RhsT* rhs
|
||||||
|
)
|
||||||
{
|
{
|
||||||
public:
|
return m_result.captureExpression<Internal::IsEqualTo>( m_lhs, rhs );
|
||||||
|
}
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////
|
||||||
PtrExpression
|
// This catches NULL
|
||||||
(
|
MutableResultInfo& operator ==
|
||||||
MutableResultInfo& result,
|
(
|
||||||
const LhsT* lhs
|
LhsT* rhs
|
||||||
)
|
)
|
||||||
: m_result( result ),
|
{
|
||||||
m_lhs( lhs )
|
return m_result.captureExpression<Internal::IsEqualTo>( m_lhs, rhs );
|
||||||
{}
|
}
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////
|
||||||
template<typename RhsT>
|
template<typename RhsT>
|
||||||
MutableResultInfo& operator ==
|
MutableResultInfo& operator !=
|
||||||
(
|
(
|
||||||
const RhsT* rhs
|
const RhsT* rhs
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
return m_result.captureExpression<Internal::IsEqualTo>( m_lhs, rhs );
|
return m_result.captureExpression<Internal::IsNotEqualTo>( m_lhs, rhs );
|
||||||
}
|
}
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////
|
||||||
// This catches NULL
|
// This catches NULL
|
||||||
MutableResultInfo& operator ==
|
MutableResultInfo& operator !=
|
||||||
(
|
(
|
||||||
LhsT* rhs
|
LhsT* rhs
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
return m_result.captureExpression<Internal::IsEqualTo>( m_lhs, rhs );
|
return m_result.captureExpression<Internal::IsNotEqualTo>( m_lhs, rhs );
|
||||||
}
|
}
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////
|
private:
|
||||||
template<typename RhsT>
|
MutableResultInfo& m_result;
|
||||||
MutableResultInfo& operator !=
|
const LhsT* m_lhs;
|
||||||
(
|
};
|
||||||
const RhsT* rhs
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return m_result.captureExpression<Internal::IsNotEqualTo>( m_lhs, rhs );
|
|
||||||
}
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////
|
|
||||||
// This catches NULL
|
|
||||||
MutableResultInfo& operator !=
|
|
||||||
(
|
|
||||||
LhsT* rhs
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return m_result.captureExpression<Internal::IsNotEqualTo>( m_lhs, rhs );
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
|
||||||
MutableResultInfo& m_result;
|
|
||||||
const LhsT* m_lhs;
|
|
||||||
};
|
|
||||||
|
|
||||||
class ResultBuilder
|
class ResultBuilder
|
||||||
{
|
{
|
||||||
|
@ -217,6 +217,20 @@ namespace Internal
|
|||||||
return applyEvaluator<Op>( static_cast<unsigned long>( lhs ), rhs, testLhsSign( lhs ) );
|
return applyEvaluator<Op>( static_cast<unsigned long>( lhs ), rhs, testLhsSign( lhs ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<Operator Op, typename T>
|
||||||
|
bool compare( long lhs, const T* rhs )
|
||||||
|
{
|
||||||
|
return Evaluator<T*, T*, Op>::evaluate( reinterpret_cast<T*>( NULL ), rhs );
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
template<Operator Op, typename T>
|
||||||
|
bool compare( long lhs, T* rhs )
|
||||||
|
{
|
||||||
|
return Evaluator<T*, T*, Op>::evaluate( reinterpret_cast<T*>( lhs ), rhs );
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
} // end of namespace Internal
|
} // end of namespace Internal
|
||||||
} // end of namespace Catch
|
} // end of namespace Catch
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user