2010-08-18 13 views

cevap

1

Şansınız yok gibi görünüyor. Ancak, kendiniz ekleyebilirsiniz. Aşağıdaki kodu bir desen olarak ASSERT_DOUBLE_EQ ve ASSERT_NE kullanarak oluşturdum.

#define ASSERT_DOUBLE_NE(expected, actual)\ 
    ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointNE<double>, \ 
         expected, actual) 


// Helper template function for comparing floating-points. 
// 
// Template parameter: 
// 
// RawType: the raw floating-point type (either float or double) 
// 
// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. 
template <typename RawType> 
AssertionResult CmpHelperFloatingPointNE(const char* expected_expression, 
             const char* actual_expression, 
             RawType expected, 
             RawType actual) { 
    const FloatingPoint<RawType> lhs(expected), rhs(actual); 

    if (! lhs.AlmostEquals(rhs)) { 
    return AssertionSuccess(); 
    } 

    StrStream expected_ss; 
    expected_ss << std::setprecision(std::numeric_limits<RawType>::digits10 + 2) 
       << expected; 

    StrStream actual_ss; 
    actual_ss << std::setprecision(std::numeric_limits<RawType>::digits10 + 2) 
      << actual; 

    Message msg; 
    msg << "Expected: (" << expected_expression << ") != (" << actual_expression 
     << "), actual: (" << StrStreamToString(expected_ss) << ") == (" 
     << StrStreamToString(actual_ss) << ")"; 
    return AssertionFailure(msg); 
} 
6

Tamamlayıcı alay çerçevesi Google Mock'u kullanabilirsiniz. Bu EXPECT_THAT/ASSERT_THAT makrolarıyla kullanabilirsiniz matchers güçlü bir kitaplığı (a la hamcrest) vardır:

EXPECT_THAT(value, FloatEq(1)); 
EXPECT_THAT(another_value, Not(DoubleEq(3.14))); 
0

yerine yeni CmpHelperFloatingPointNE yardımcı oluşturmak yerine, sadece tersi olarak makro tanımlayabiliriz varolan yardımcı: onaylama işlemi başarısız olduğunda, "beklenen değer" ve "gerçek değeri", sadece çizgi sayısı ve onaylamanın dosyası gibi özel ayrıntılar vardır çünkü

#include "gtest/gtest.h" 

#define ASSERT_FLOAT_NE(val1, val2) ASSERT_PRED_FORMAT2(\ 
    !::testing::internal::CmpHelperFloatingPointEQ<float>, val1, val2 \ 
) 

#define ASSERT_DOUBLE_NE(val1, val2) ASSERT_PRED_FORMAT2(\ 
    !::testing::internal::CmpHelperFloatingPointEQ<double>, val1, val2 \ 
) 

Bu deft_code çözümüyle kadar zarif değildir. Benim amaçlarım için, hat numarası yeterliydi.

İlgili konular