#include "test_precomp.hpp" using namespace cv; using namespace std; TEST(Core_OutputArrayCreate, _1997) { struct local { static void create(OutputArray arr, Size submatSize, int type) { int sizes[] = {submatSize.width, submatSize.height}; arr.create(sizeof(sizes)/sizeof(sizes[0]), sizes, type); } }; Mat mat(Size(512, 512), CV_8U); Size submatSize = Size(256, 256); ASSERT_NO_THROW(local::create( mat(Rect(Point(), submatSize)), submatSize, mat.type() )); } TEST(Core_SaturateCast, NegativeNotClipped) { double d = -1.0; unsigned int val = cv::saturate_cast(d); ASSERT_EQ(0xffffffff, val); } template static double maxAbsDiff(const T &t, const U &u) { Mat_ d; absdiff(t, u, d); double ret; minMaxLoc(d, NULL, &ret); return ret; } TEST(Core_OutputArrayAssign, _Matxd_Matd) { Mat expected = (Mat_(2,3) << 1, 2, 3, .1, .2, .3); Matx23d actualx; { OutputArray oa(actualx); oa.assign(expected); } Mat actual = (Mat) actualx; EXPECT_LE(maxAbsDiff(expected, actual), 0.0); } TEST(Core_OutputArrayAssign, _Matxd_Matf) { Mat expected = (Mat_(2,3) << 1, 2, 3, .1, .2, .3); Matx23d actualx; { OutputArray oa(actualx); oa.assign(expected); } Mat actual = (Mat) actualx; EXPECT_LE(maxAbsDiff(expected, actual), FLT_EPSILON); } TEST(Core_OutputArrayAssign, _Matxf_Matd) { Mat expected = (Mat_(2,3) << 1, 2, 3, .1, .2, .3); Matx23f actualx; { OutputArray oa(actualx); oa.assign(expected); } Mat actual = (Mat) actualx; EXPECT_LE(maxAbsDiff(expected, actual), FLT_EPSILON); } TEST(Core_OutputArrayAssign, _Matxd_UMatd) { Mat expected = (Mat_(2,3) << 1, 2, 3, .1, .2, .3); UMat uexpected = expected.getUMat(ACCESS_READ); Matx23d actualx; { OutputArray oa(actualx); oa.assign(uexpected); } Mat actual = (Mat) actualx; EXPECT_LE(maxAbsDiff(expected, actual), 0.0); } TEST(Core_OutputArrayAssign, _Matxd_UMatf) { Mat expected = (Mat_(2,3) << 1, 2, 3, .1, .2, .3); UMat uexpected = expected.getUMat(ACCESS_READ); Matx23d actualx; { OutputArray oa(actualx); oa.assign(uexpected); } Mat actual = (Mat) actualx; EXPECT_LE(maxAbsDiff(expected, actual), FLT_EPSILON); } TEST(Core_OutputArrayAssign, _Matxf_UMatd) { Mat expected = (Mat_(2,3) << 1, 2, 3, .1, .2, .3); UMat uexpected = expected.getUMat(ACCESS_READ); Matx23f actualx; { OutputArray oa(actualx); oa.assign(uexpected); } Mat actual = (Mat) actualx; EXPECT_LE(maxAbsDiff(expected, actual), FLT_EPSILON); }