mirror of
				https://github.com/catchorg/Catch2.git
				synced 2025-11-04 05:59:32 +01:00 
			
		
		
		
	Pointer comparisons and compare to NULL
This commit is contained in:
		@@ -154,6 +154,39 @@ inline std::string toString
 | 
			
		||||
{
 | 
			
		||||
    return value ? "true" : "false";
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
///////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
inline std::string toString
 | 
			
		||||
(
 | 
			
		||||
    void* p
 | 
			
		||||
)
 | 
			
		||||
{
 | 
			
		||||
    if( !p )
 | 
			
		||||
        return INTERNAL_CATCH_STRINGIFY( NULL );
 | 
			
		||||
    std::ostringstream oss;
 | 
			
		||||
    oss << p;
 | 
			
		||||
    return oss.str();
 | 
			
		||||
}
 | 
			
		||||
    
 | 
			
		||||
///////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
template<typename T>
 | 
			
		||||
inline std::string toString
 | 
			
		||||
(
 | 
			
		||||
    T* p
 | 
			
		||||
)
 | 
			
		||||
{
 | 
			
		||||
    return toString( static_cast<void*>( p ) );
 | 
			
		||||
}
 | 
			
		||||
    
 | 
			
		||||
///////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
template<typename T>
 | 
			
		||||
inline std::string toString
 | 
			
		||||
(
 | 
			
		||||
    const T* p
 | 
			
		||||
)
 | 
			
		||||
{
 | 
			
		||||
    return toString( static_cast<void*>( const_cast<T*>( p ) ) );
 | 
			
		||||
}
 | 
			
		||||
    
 | 
			
		||||
struct TestFailureException
 | 
			
		||||
{
 | 
			
		||||
@@ -226,8 +259,9 @@ public:
 | 
			
		||||
    
 | 
			
		||||
private:
 | 
			
		||||
    friend class ResultBuilder;
 | 
			
		||||
    template<typename T>
 | 
			
		||||
    friend class Expression;
 | 
			
		||||
    template<typename T> friend class Expression;
 | 
			
		||||
 | 
			
		||||
    template<typename T> friend class PtrExpression;
 | 
			
		||||
 | 
			
		||||
    ///////////////////////////////////////////////////////////////////////////
 | 
			
		||||
    MutableResultInfo& captureBoolExpression
 | 
			
		||||
@@ -361,6 +395,66 @@ private:
 | 
			
		||||
    const T& m_lhs;
 | 
			
		||||
};
 | 
			
		||||
    
 | 
			
		||||
    template<typename LhsT> 
 | 
			
		||||
    class PtrExpression
 | 
			
		||||
    {
 | 
			
		||||
    public:
 | 
			
		||||
 | 
			
		||||
        ///////////////////////////////////////////////////////////////////////////
 | 
			
		||||
        PtrExpression
 | 
			
		||||
        (
 | 
			
		||||
            MutableResultInfo& result, 
 | 
			
		||||
            const LhsT* lhs 
 | 
			
		||||
        )
 | 
			
		||||
        :   m_result( result ),
 | 
			
		||||
            m_lhs( lhs )
 | 
			
		||||
        {}
 | 
			
		||||
        
 | 
			
		||||
        ///////////////////////////////////////////////////////////////////////////
 | 
			
		||||
        template<typename RhsT>
 | 
			
		||||
        MutableResultInfo& operator == 
 | 
			
		||||
        (
 | 
			
		||||
            const RhsT* rhs
 | 
			
		||||
        )
 | 
			
		||||
        {
 | 
			
		||||
            return m_result.captureExpression<Internal::IsEqualTo>( m_lhs, rhs );
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        ///////////////////////////////////////////////////////////////////////////
 | 
			
		||||
        // This catches NULL
 | 
			
		||||
        MutableResultInfo& operator == 
 | 
			
		||||
        (
 | 
			
		||||
            LhsT* rhs
 | 
			
		||||
        )
 | 
			
		||||
        {
 | 
			
		||||
            return m_result.captureExpression<Internal::IsEqualTo>( m_lhs, rhs );
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        ///////////////////////////////////////////////////////////////////////////
 | 
			
		||||
        template<typename RhsT>
 | 
			
		||||
        MutableResultInfo& operator != 
 | 
			
		||||
        (
 | 
			
		||||
            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
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
@@ -389,6 +483,30 @@ public:
 | 
			
		||||
        return expr;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    ///////////////////////////////////////////////////////////////////////////
 | 
			
		||||
    template<typename T>
 | 
			
		||||
    PtrExpression<T> operator->*
 | 
			
		||||
    (
 | 
			
		||||
        const T* operand
 | 
			
		||||
    )
 | 
			
		||||
    {
 | 
			
		||||
        PtrExpression<T> expr( m_result, operand );
 | 
			
		||||
        
 | 
			
		||||
        return expr;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    ///////////////////////////////////////////////////////////////////////////
 | 
			
		||||
    template<typename T>
 | 
			
		||||
    PtrExpression<T> operator->*
 | 
			
		||||
    (
 | 
			
		||||
        T* operand
 | 
			
		||||
    )
 | 
			
		||||
    {
 | 
			
		||||
        PtrExpression<T> expr( m_result, operand );
 | 
			
		||||
        
 | 
			
		||||
        return expr;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    ///////////////////////////////////////////////////////////////////////////
 | 
			
		||||
    template<typename T>
 | 
			
		||||
    ResultBuilder& operator <<
 | 
			
		||||
@@ -478,7 +596,7 @@ class Approx
 | 
			
		||||
public:
 | 
			
		||||
    ///////////////////////////////////////////////////////////////////////////
 | 
			
		||||
    // !TBD more generic
 | 
			
		||||
    Approx
 | 
			
		||||
    explicit Approx
 | 
			
		||||
    (
 | 
			
		||||
        double d
 | 
			
		||||
    )
 | 
			
		||||
 
 | 
			
		||||
@@ -17,6 +17,9 @@
 | 
			
		||||
#define INTERNAL_CATCH_UNIQUE_NAME_LINE( name, line ) INTERNAL_CATCH_UNIQUE_NAME_LINE2( name, line )
 | 
			
		||||
#define INTERNAL_CATCH_UNIQUE_NAME( name ) INTERNAL_CATCH_UNIQUE_NAME_LINE( name, __LINE__ )
 | 
			
		||||
 | 
			
		||||
#define INTERNAL_CATCH_STRINGIFY2( expr ) #expr
 | 
			
		||||
#define INTERNAL_CATCH_STRINGIFY( expr ) INTERNAL_CATCH_STRINGIFY2( expr )
 | 
			
		||||
 | 
			
		||||
#ifdef __GNUC__
 | 
			
		||||
#define ATTRIBUTE_NORETURN __attribute__ ((noreturn))
 | 
			
		||||
#else
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user