diff --git a/modules/core/test/test_intrin.cpp b/modules/core/test/test_intrin.cpp index 681fe3fd0..42b0cfcfd 100644 --- a/modules/core/test/test_intrin.cpp +++ b/modules/core/test/test_intrin.cpp @@ -3,10 +3,29 @@ using namespace cv; +namespace cvtest { namespace hal { + +template static inline void EXPECT_COMPARE_EQ_(const T a, const T b); +template<> inline void EXPECT_COMPARE_EQ_(const float a, const float b) +{ + EXPECT_FLOAT_EQ( a, b ); +} + +template<> inline void EXPECT_COMPARE_EQ_(const double a, const double b) +{ + EXPECT_DOUBLE_EQ( a, b ); +} + template struct TheTest { typedef typename R::lane_type LaneType; + template + static inline void EXPECT_COMPARE_EQ(const T1 a, const T2 b) + { + EXPECT_COMPARE_EQ_((LaneType)a, (LaneType)b); + } + TheTest & test_loadstore() { AlignedData data; @@ -316,9 +335,9 @@ template struct TheTest Data resB = v_sqrt(a), resC = v_invsqrt(a), resE = v_abs(d); for (int i = 0; i < R::nlanes; ++i) { - EXPECT_FLOAT_EQ((float)std::sqrt(dataA[i]), (float)resB[i]); - EXPECT_FLOAT_EQ(1/(float)std::sqrt(dataA[i]), (float)resC[i]); - EXPECT_FLOAT_EQ((float)abs(dataA[i]), (float)resE[i]); + EXPECT_COMPARE_EQ((float)std::sqrt(dataA[i]), (float)resB[i]); + EXPECT_COMPARE_EQ(1/(float)std::sqrt(dataA[i]), (float)resC[i]); + EXPECT_COMPARE_EQ((float)abs(dataA[i]), (float)resE[i]); } return *this; @@ -575,9 +594,9 @@ template struct TheTest EXPECT_EQ(cvFloor(data1[i]), resD[i]); EXPECT_EQ(cvCeil(data1[i]), resE[i]); - EXPECT_DOUBLE_EQ(std::sqrt(data1[i]*data1[i] + data2[i]*data2[i]), resF[i]); - EXPECT_DOUBLE_EQ(data1[i]*data1[i] + data2[i]*data2[i], resG[i]); - EXPECT_DOUBLE_EQ(data1[i]*data2[i] + data3[i], resH[i]); + EXPECT_COMPARE_EQ(std::sqrt(data1[i]*data1[i] + data2[i]*data2[i]), resF[i]); + EXPECT_COMPARE_EQ(data1[i]*data1[i] + data2[i]*data2[i], resG[i]); + EXPECT_COMPARE_EQ(data1[i]*data2[i] + data3[i], resH[i]); } return *this; @@ -862,3 +881,7 @@ TEST(hal_intrin, float64x2) { ; } #endif + +}; + +};