GAPI - KW fixes

- avoid overflow in own::Mat::total() and according tests
This commit is contained in:
Anton Potapov 2020-03-12 13:29:54 +03:00
parent 866b15ddb8
commit d3b68b059b
2 changed files with 14 additions and 9 deletions

View File

@ -297,10 +297,9 @@ namespace cv { namespace gapi { namespace own {
*/
size_t total() const
{
return static_cast<std::size_t>
(dims.empty()
? (rows * cols)
: std::accumulate(dims.begin(), dims.end(), 1, std::multiplies<int>()));
return dims.empty()
? (static_cast<std::size_t>(rows) * cols)
: std::accumulate(dims.begin(), dims.end(), static_cast<std::size_t>(1), std::multiplies<size_t>());
}
/** @overload

View File

@ -14,6 +14,12 @@ namespace opencv_test
using Mat = cv::gapi::own::Mat;
using Dims = std::vector<int>;
namespace {
inline std::size_t multiply_dims(Dims const& dims){
return std::accumulate(dims.begin(), dims.end(), static_cast<size_t>(1), std::multiplies<std::size_t>());
}
}
TEST(OwnMat, DefaultConstruction)
{
Mat m;
@ -74,7 +80,7 @@ TEST(OwnMat, CreateOverload)
ASSERT_NE(m.data, nullptr);
ASSERT_EQ((cv::Size{m.cols, m.rows}), size);
ASSERT_EQ(m.total(), static_cast<size_t>(size.height*size.width));
ASSERT_EQ(m.total(), static_cast<size_t>(size.height) * size.width);
ASSERT_EQ(m.type(), CV_8UC1);
ASSERT_EQ(m.depth(), CV_8U);
ASSERT_EQ(m.channels(), 1);
@ -371,7 +377,7 @@ TEST(OwnMat, CopyNDtoRegular)
ASSERT_NE(nullptr , a.data);
ASSERT_EQ(sz , (cv::gapi::own::Size{a.cols, a.rows}));
ASSERT_EQ(static_cast<size_t>(sz.width*sz.height), a.total());
ASSERT_EQ(static_cast<size_t>(sz.width) * sz.height, a.total());
ASSERT_EQ(CV_8U , a.type());
ASSERT_EQ(CV_8U , a.depth());
ASSERT_EQ(1 , a.channels());
@ -387,7 +393,7 @@ TEST(OwnMat, CopyNDtoRegular)
ASSERT_NE(old_ptr , a.data);
ASSERT_NE(b.data , a.data);
ASSERT_EQ((cv::gapi::own::Size{0,0}), (cv::gapi::own::Size{a.cols, a.rows}));
ASSERT_EQ(static_cast<size_t>(dims[0]*dims[1]*dims[2]*dims[3]), a.total());
ASSERT_EQ(multiply_dims(dims), a.total());
ASSERT_EQ(CV_32F , a.type());
ASSERT_EQ(CV_32F , a.depth());
ASSERT_EQ(-1 , a.channels());
@ -408,7 +414,7 @@ TEST(OwnMat, CopyRegularToND)
ASSERT_NE(nullptr , a.data);
ASSERT_EQ((cv::gapi::own::Size{0,0}), (cv::gapi::own::Size{a.cols, a.rows}));
ASSERT_EQ(static_cast<size_t>(dims[0]*dims[1]*dims[2]*dims[3]), a.total());
ASSERT_EQ(multiply_dims(dims), a.total());
ASSERT_EQ(CV_32F , a.type());
ASSERT_EQ(CV_32F , a.depth());
ASSERT_EQ(-1 , a.channels());
@ -424,7 +430,7 @@ TEST(OwnMat, CopyRegularToND)
ASSERT_NE(old_ptr , a.data);
ASSERT_NE(b.data , a.data);
ASSERT_EQ(sz , (cv::gapi::own::Size{a.cols, a.rows}));
ASSERT_EQ(static_cast<size_t>(sz.width*sz.height), a.total());
ASSERT_EQ(static_cast<size_t>(sz.width) * sz.height, a.total());
ASSERT_EQ(CV_8U , a.type());
ASSERT_EQ(CV_8U , a.depth());
ASSERT_EQ(1 , a.channels());