You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
146 lines
4.2 KiB
146 lines
4.2 KiB
// This file is part of OpenCV project. |
|
// It is subject to the license terms in the LICENSE file found in the top-level directory |
|
// of this distribution and at http://opencv.org/license.html. |
|
|
|
#include "test_precomp.hpp" |
|
|
|
namespace opencv_test |
|
{ |
|
namespace |
|
{ |
|
|
|
class DummyAllocator : public AscendMat::Allocator |
|
{ |
|
public: |
|
std::shared_ptr<uchar> allocate(size_t size) CV_OVERRIDE |
|
{ |
|
CV_UNUSED(size); |
|
return std::shared_ptr<uchar>(); |
|
} |
|
bool allocate(cv::cann::AscendMat* mat, int rows, int cols, size_t elemSize) CV_OVERRIDE |
|
{ |
|
CV_UNUSED(rows); |
|
CV_UNUSED(cols); |
|
CV_UNUSED(elemSize); |
|
mat->data = std::shared_ptr<uchar>((uchar*)0x12345, [](void* ptr) { CV_UNUSED(ptr); }); |
|
return true; |
|
} |
|
}; |
|
|
|
TEST(AscendMat, Construct) |
|
{ |
|
cv::cann::setDevice(0); |
|
// 1 Default constructor. |
|
AscendMat defaultAscendMat; |
|
AscendMat::Allocator* defaultAllocator = AscendMat::defaultAllocator(); |
|
ASSERT_EQ(defaultAscendMat.allocator, defaultAllocator); |
|
|
|
// 2 get & set allocator. |
|
DummyAllocator dummyAllocator; |
|
AscendMat::setDefaultAllocator(&dummyAllocator); |
|
ASSERT_EQ(defaultAscendMat.defaultAllocator(), &dummyAllocator); |
|
AscendMat::setDefaultAllocator(defaultAllocator); |
|
|
|
// 3 constructs AscendMat of the specified size and type |
|
AscendMat specifiedSizeAscendMat1(5, 6, CV_8UC3); |
|
AscendMat specifiedSizeAscendMat2(Size(300, 200), CV_64F); |
|
|
|
ASSERT_EQ(specifiedSizeAscendMat1.rows, 5); |
|
ASSERT_EQ(specifiedSizeAscendMat1.cols, 6); |
|
ASSERT_EQ(specifiedSizeAscendMat1.depth(), CV_8U); |
|
ASSERT_EQ(specifiedSizeAscendMat1.channels(), 3); |
|
|
|
ASSERT_EQ(specifiedSizeAscendMat2.cols, 300); |
|
ASSERT_EQ(specifiedSizeAscendMat2.rows, 200); |
|
ASSERT_EQ(specifiedSizeAscendMat2.depth(), CV_64F); |
|
ASSERT_EQ(specifiedSizeAscendMat2.channels(), 1); |
|
|
|
// 4 constructs AscendMat and fills it with the specified value s |
|
srand((unsigned int)(time(NULL))); |
|
Scalar sc(rand() % 256, rand() % 256, rand() % 256, rand() % 256); |
|
|
|
Mat scalarToMat(7, 8, CV_8UC3, sc); |
|
AscendMat scalarToAscendMat1(7, 8, CV_8UC3, sc); |
|
Mat scalarToMatChecker; |
|
scalarToAscendMat1.download(scalarToMatChecker); |
|
|
|
EXPECT_MAT_NEAR(scalarToMat, scalarToMatChecker, 0.0); |
|
|
|
AscendMat scalarToAscendMat2(Size(123, 345), CV_32S); |
|
|
|
ASSERT_EQ(scalarToAscendMat1.rows, 7); |
|
ASSERT_EQ(scalarToAscendMat1.cols, 8); |
|
ASSERT_EQ(scalarToAscendMat1.depth(), CV_8U); |
|
ASSERT_EQ(scalarToAscendMat1.channels(), 3); |
|
|
|
ASSERT_EQ(scalarToAscendMat2.cols, 123); |
|
ASSERT_EQ(scalarToAscendMat2.rows, 345); |
|
ASSERT_EQ(scalarToAscendMat2.depth(), CV_32S); |
|
ASSERT_EQ(scalarToAscendMat2.channels(), 1); |
|
|
|
// 6 builds AscendMat from host memory |
|
Scalar sc2(rand() % 256, rand() % 256, rand() % 256, rand() % 256); |
|
Mat randomMat(7, 8, CV_8UC3, sc2); |
|
InputArray arr = randomMat; |
|
|
|
AscendMat fromInputArray(arr, AscendStream::Null()); |
|
Mat randomMatChecker; |
|
fromInputArray.download(randomMatChecker); |
|
EXPECT_MAT_NEAR(randomMat, randomMatChecker, 0.0); |
|
|
|
cv::cann::resetDevice(); |
|
} |
|
|
|
TEST(AscendMat, Assignment) |
|
{ |
|
DummyAllocator dummyAllocator; |
|
AscendMat mat1; |
|
AscendMat mat2(3, 4, CV_8SC1, &dummyAllocator); |
|
mat1 = mat2; |
|
|
|
ASSERT_EQ(mat1.rows, 3); |
|
ASSERT_EQ(mat1.cols, 4); |
|
ASSERT_EQ(mat1.depth(), CV_8S); |
|
ASSERT_EQ(mat1.channels(), 1); |
|
ASSERT_EQ(mat1.data.get(), (uchar*)0x12345); |
|
} |
|
|
|
TEST(AscendMat, SetTo) |
|
{ |
|
cv::cann::setDevice(0); |
|
|
|
srand((unsigned int)(time(NULL))); |
|
Scalar sc(rand() % 256, rand() % 256, rand() % 256, rand() % 256); |
|
|
|
AscendMat ascendMat(2, 2, CV_8UC4); |
|
ascendMat.setTo(sc); |
|
Mat mat(2, 2, CV_8UC4, sc); |
|
Mat checker; |
|
ascendMat.download(checker); |
|
|
|
EXPECT_MAT_NEAR(mat, checker, 0.0); |
|
|
|
cv::cann::resetDevice(); |
|
} |
|
|
|
TEST(AscendMat, ConvertTo) |
|
{ |
|
cv::cann::setDevice(0); |
|
|
|
srand((unsigned int)(time(NULL))); |
|
Scalar sc(rand() % 256, rand() % 256, rand() % 256, rand() % 256); |
|
|
|
AscendMat ascendMat(2, 2, CV_8UC4, sc); |
|
AscendMat convertedAscendMat; |
|
ascendMat.convertTo(convertedAscendMat, CV_16S); |
|
Mat mat(2, 2, CV_16SC4, sc); |
|
Mat checker; |
|
convertedAscendMat.download(checker); |
|
|
|
EXPECT_MAT_NEAR(mat, checker, 0.0); |
|
|
|
cv::cann::resetDevice(); |
|
} |
|
|
|
} // namespace |
|
} // namespace opencv_test
|
|
|