Commit a1230ad0 authored by Alexander Alekhin's avatar Alexander Alekhin

Merge pull request #16796 from anton-potapov:kw_fixes_own_mat_total_overflow

parents 448a5452 d3b68b05
...@@ -297,10 +297,9 @@ namespace cv { namespace gapi { namespace own { ...@@ -297,10 +297,9 @@ namespace cv { namespace gapi { namespace own {
*/ */
size_t total() const size_t total() const
{ {
return static_cast<std::size_t> return dims.empty()
(dims.empty() ? (static_cast<std::size_t>(rows) * cols)
? (rows * cols) : std::accumulate(dims.begin(), dims.end(), static_cast<std::size_t>(1), std::multiplies<size_t>());
: std::accumulate(dims.begin(), dims.end(), 1, std::multiplies<int>()));
} }
/** @overload /** @overload
......
...@@ -14,6 +14,12 @@ namespace opencv_test ...@@ -14,6 +14,12 @@ namespace opencv_test
using Mat = cv::gapi::own::Mat; using Mat = cv::gapi::own::Mat;
using Dims = std::vector<int>; 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) TEST(OwnMat, DefaultConstruction)
{ {
Mat m; Mat m;
...@@ -74,7 +80,7 @@ TEST(OwnMat, CreateOverload) ...@@ -74,7 +80,7 @@ TEST(OwnMat, CreateOverload)
ASSERT_NE(m.data, nullptr); ASSERT_NE(m.data, nullptr);
ASSERT_EQ((cv::Size{m.cols, m.rows}), size); 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.type(), CV_8UC1);
ASSERT_EQ(m.depth(), CV_8U); ASSERT_EQ(m.depth(), CV_8U);
ASSERT_EQ(m.channels(), 1); ASSERT_EQ(m.channels(), 1);
...@@ -371,7 +377,7 @@ TEST(OwnMat, CopyNDtoRegular) ...@@ -371,7 +377,7 @@ TEST(OwnMat, CopyNDtoRegular)
ASSERT_NE(nullptr , a.data); ASSERT_NE(nullptr , a.data);
ASSERT_EQ(sz , (cv::gapi::own::Size{a.cols, a.rows})); 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.type());
ASSERT_EQ(CV_8U , a.depth()); ASSERT_EQ(CV_8U , a.depth());
ASSERT_EQ(1 , a.channels()); ASSERT_EQ(1 , a.channels());
...@@ -387,7 +393,7 @@ TEST(OwnMat, CopyNDtoRegular) ...@@ -387,7 +393,7 @@ TEST(OwnMat, CopyNDtoRegular)
ASSERT_NE(old_ptr , a.data); ASSERT_NE(old_ptr , a.data);
ASSERT_NE(b.data , 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((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.type());
ASSERT_EQ(CV_32F , a.depth()); ASSERT_EQ(CV_32F , a.depth());
ASSERT_EQ(-1 , a.channels()); ASSERT_EQ(-1 , a.channels());
...@@ -408,7 +414,7 @@ TEST(OwnMat, CopyRegularToND) ...@@ -408,7 +414,7 @@ TEST(OwnMat, CopyRegularToND)
ASSERT_NE(nullptr , a.data); ASSERT_NE(nullptr , a.data);
ASSERT_EQ((cv::gapi::own::Size{0,0}), (cv::gapi::own::Size{a.cols, a.rows})); 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.type());
ASSERT_EQ(CV_32F , a.depth()); ASSERT_EQ(CV_32F , a.depth());
ASSERT_EQ(-1 , a.channels()); ASSERT_EQ(-1 , a.channels());
...@@ -424,7 +430,7 @@ TEST(OwnMat, CopyRegularToND) ...@@ -424,7 +430,7 @@ TEST(OwnMat, CopyRegularToND)
ASSERT_NE(old_ptr , a.data); ASSERT_NE(old_ptr , a.data);
ASSERT_NE(b.data , a.data); ASSERT_NE(b.data , a.data);
ASSERT_EQ(sz , (cv::gapi::own::Size{a.cols, a.rows})); 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.type());
ASSERT_EQ(CV_8U , a.depth()); ASSERT_EQ(CV_8U , a.depth());
ASSERT_EQ(1 , a.channels()); ASSERT_EQ(1 , a.channels());
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment