मैं ASSERT_EOU/ASSERT_NE के समान ASSERT_DOUBLE_EQ के लिए कुछ ढूंढ रहा हूं।GoogleTest में सुविधाजनक विधि बराबर की तुलना में एक डबल तुलना के लिए?
शायद मुझे ASSERT_DOUBLE_NE के बिना ऐसा करने का एक आसान तरीका याद आ रहा है?
मैं ASSERT_EOU/ASSERT_NE के समान ASSERT_DOUBLE_EQ के लिए कुछ ढूंढ रहा हूं।GoogleTest में सुविधाजनक विधि बराबर की तुलना में एक डबल तुलना के लिए?
शायद मुझे ASSERT_DOUBLE_NE के बिना ऐसा करने का एक आसान तरीका याद आ रहा है?
ऐसा लगता है कि आप भाग्य से बाहर हैं। हालांकि, आप स्वयं को जोड़ सकते हैं। मैंने ASSERT_DOUBLE_EQ और ASSERT_NE का उपयोग पैटर्न के रूप में निम्न कोड बनाया है।
#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);
}
आप साथी मॉकिंग फ्रेमवर्क Google मॉक का उपयोग कर सकते हैं। यह matchers का एक शक्तिशाली पुस्तकालय (एक ला Hamcrest) है, जो आप EXPECT_THAT/ASSERT_THAT मैक्रो के साथ उपयोग कर सकते हैं: बजाय एक नया CmpHelperFloatingPointNE सहायक बनाने की
EXPECT_THAT(value, FloatEq(1));
EXPECT_THAT(another_value, Not(DoubleEq(3.14)));
, तुम बस के प्रतिलोम के रूप में मैक्रो परिभाषित कर सकते हैं मौजूदा सहायक:
#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 \
)
इसका कारण यह है जब जोर विफल रहता है, वहाँ की तरह "उम्मीद मूल्य" और "वास्तविक मूल्य", बस लाइन नंबर और दावे की फ़ाइल में कोई विशिष्ट विवरण हैं deft_code के समाधान के रूप में के रूप में सुंदर नहीं है। मेरे उद्देश्यों के लिए, हालांकि, लाइन संख्या पर्याप्त थी।