checkRange fixes
1) fix multichannel support 2) remove useless bad_value, read value from original Mat directly 3) add more tests 4) fix docs for cvCeil and checkRange
This commit is contained in:
@@ -2502,40 +2502,25 @@ protected:
|
||||
}
|
||||
};
|
||||
|
||||
class Core_CheckRange_Empty : public cvtest::BaseTest
|
||||
{
|
||||
public:
|
||||
Core_CheckRange_Empty(){}
|
||||
~Core_CheckRange_Empty(){}
|
||||
protected:
|
||||
virtual void run( int start_from );
|
||||
};
|
||||
|
||||
void Core_CheckRange_Empty::run( int )
|
||||
TEST(Core_CheckRange_Empty, accuracy)
|
||||
{
|
||||
cv::Mat m;
|
||||
ASSERT_TRUE( cv::checkRange(m) );
|
||||
}
|
||||
|
||||
TEST(Core_CheckRange_Empty, accuracy) { Core_CheckRange_Empty test; test.safe_run(); }
|
||||
|
||||
class Core_CheckRange_INT_MAX : public cvtest::BaseTest
|
||||
{
|
||||
public:
|
||||
Core_CheckRange_INT_MAX(){}
|
||||
~Core_CheckRange_INT_MAX(){}
|
||||
protected:
|
||||
virtual void run( int start_from );
|
||||
};
|
||||
|
||||
void Core_CheckRange_INT_MAX::run( int )
|
||||
TEST(Core_CheckRange_INT_MAX, accuracy)
|
||||
{
|
||||
cv::Mat m(3, 3, CV_32SC1, cv::Scalar(INT_MAX));
|
||||
ASSERT_FALSE( cv::checkRange(m, true, 0, 0, INT_MAX) );
|
||||
ASSERT_TRUE( cv::checkRange(m) );
|
||||
}
|
||||
|
||||
TEST(Core_CheckRange_INT_MAX, accuracy) { Core_CheckRange_INT_MAX test; test.safe_run(); }
|
||||
TEST(Core_CheckRange_INT_MAX1, accuracy)
|
||||
{
|
||||
cv::Mat m(3, 3, CV_32SC1, cv::Scalar(INT_MAX));
|
||||
ASSERT_TRUE( cv::checkRange(m, true, 0, 0, INT_MAX+1.0f) );
|
||||
ASSERT_TRUE( cv::checkRange(m) );
|
||||
}
|
||||
|
||||
template <typename T> class Core_CheckRange : public testing::Test {};
|
||||
|
||||
@@ -2546,13 +2531,30 @@ TYPED_TEST_P(Core_CheckRange, Negative)
|
||||
double min_bound = 4.5;
|
||||
double max_bound = 16.0;
|
||||
|
||||
TypeParam data[] = {5, 10, 15, 4, 10, 2, 8, 12, 14};
|
||||
TypeParam data[] = {5, 10, 15, 10, 10, 2, 8, 12, 14};
|
||||
cv::Mat src = cv::Mat(3,3, cv::DataDepth<TypeParam>::value, data);
|
||||
|
||||
cv::Point bad_pt(0, 0);
|
||||
|
||||
ASSERT_FALSE(checkRange(src, true, &bad_pt, min_bound, max_bound));
|
||||
ASSERT_EQ(bad_pt.x, 0);
|
||||
ASSERT_EQ(bad_pt.x, 2);
|
||||
ASSERT_EQ(bad_pt.y, 1);
|
||||
}
|
||||
|
||||
TYPED_TEST_P(Core_CheckRange, Negative3CN)
|
||||
{
|
||||
double min_bound = 4.5;
|
||||
double max_bound = 16.0;
|
||||
|
||||
TypeParam data[] = { 5, 6, 7, 10, 11, 12, 13, 14, 15,
|
||||
10, 11, 12, 10, 11, 12, 2, 5, 6,
|
||||
8, 8, 8, 12, 12, 12, 14, 14, 14};
|
||||
cv::Mat src = cv::Mat(3,3, CV_MAKETYPE(cv::DataDepth<TypeParam>::value, 3), data);
|
||||
|
||||
cv::Point bad_pt(0, 0);
|
||||
|
||||
ASSERT_FALSE(checkRange(src, true, &bad_pt, min_bound, max_bound));
|
||||
ASSERT_EQ(bad_pt.x, 2);
|
||||
ASSERT_EQ(bad_pt.y, 1);
|
||||
}
|
||||
|
||||
@@ -2614,7 +2616,49 @@ TYPED_TEST_P(Core_CheckRange, One)
|
||||
ASSERT_TRUE( checkRange(src2, true, NULL, min_bound, max_bound) );
|
||||
}
|
||||
|
||||
REGISTER_TYPED_TEST_CASE_P(Core_CheckRange, Negative, Positive, Bounds, Zero, One);
|
||||
TEST(Core_CheckRange, NaN)
|
||||
{
|
||||
float data[] = { 5, 6, 7, 10, 11, 12, 13, 14, 15,
|
||||
10, 11, 12, 10, 11, 12, 5, 5, std::numeric_limits<float>::quiet_NaN(),
|
||||
8, 8, 8, 12, 12, 12, 14, 14, 14};
|
||||
cv::Mat src = cv::Mat(3,3, CV_32FC3, data);
|
||||
|
||||
cv::Point bad_pt(0, 0);
|
||||
|
||||
ASSERT_FALSE(checkRange(src, true, &bad_pt));
|
||||
ASSERT_EQ(bad_pt.x, 2);
|
||||
ASSERT_EQ(bad_pt.y, 1);
|
||||
}
|
||||
|
||||
TEST(Core_CheckRange, Inf)
|
||||
{
|
||||
float data[] = { 5, 6, 7, 10, 11, 12, 13, 14, 15,
|
||||
10, 11, 12, 10, 11, 12, 5, 5, std::numeric_limits<float>::infinity(),
|
||||
8, 8, 8, 12, 12, 12, 14, 14, 14};
|
||||
cv::Mat src = cv::Mat(3,3, CV_32FC3, data);
|
||||
|
||||
cv::Point bad_pt(0, 0);
|
||||
|
||||
ASSERT_FALSE(checkRange(src, true, &bad_pt));
|
||||
ASSERT_EQ(bad_pt.x, 2);
|
||||
ASSERT_EQ(bad_pt.y, 1);
|
||||
}
|
||||
|
||||
TEST(Core_CheckRange, Inf_Minus)
|
||||
{
|
||||
float data[] = { 5, 6, 7, 10, 11, 12, 13, 14, 15,
|
||||
10, 11, 12, 10, 11, 12, 5, 5, -std::numeric_limits<float>::infinity(),
|
||||
8, 8, 8, 12, 12, 12, 14, 14, 14};
|
||||
cv::Mat src = cv::Mat(3,3, CV_32FC3, data);
|
||||
|
||||
cv::Point bad_pt(0, 0);
|
||||
|
||||
ASSERT_FALSE(checkRange(src, true, &bad_pt));
|
||||
ASSERT_EQ(bad_pt.x, 2);
|
||||
ASSERT_EQ(bad_pt.y, 1);
|
||||
}
|
||||
|
||||
REGISTER_TYPED_TEST_CASE_P(Core_CheckRange, Negative, Negative3CN, Positive, Bounds, Zero, One);
|
||||
|
||||
typedef ::testing::Types<signed char,unsigned char, signed short, unsigned short, signed int> mat_data_types;
|
||||
INSTANTIATE_TYPED_TEST_CASE_P(Negative_Test, Core_CheckRange, mat_data_types);
|
||||
|
Reference in New Issue
Block a user