Publishing 2019 R1 content
[platform/upstream/dldt.git] / inference-engine / thirdparty / fluid / modules / gapi / test / gapi_smoke_test.cpp
1 // This file is part of OpenCV project.
2 // It is subject to the license terms in the LICENSE file found in the top-level directory
3 // of this distribution and at http://opencv.org/license.html.
4 //
5 // Copyright (C) 2018-2019 Intel Corporation
6
7
8 #include "test_precomp.hpp"
9
10 namespace opencv_test
11 {
12
13 TEST(GAPI, Mat_Create_NoLink)
14 {
15     cv::Mat m1;
16     cv::Mat m2 = m1;
17     m2.create(32, 32, CV_8U);
18
19     EXPECT_NE(m1.rows, m2.rows);
20     EXPECT_NE(m1.cols, m2.cols);
21     EXPECT_NE(m1.data, m2.data);
22 }
23
24 TEST(GAPI, Mat_Recreate)
25 {
26     cv::Mat m1 = cv::Mat::zeros(480, 640, CV_8U);
27     m1.at<uchar>(0, 0) = 128;
28     cv::Mat m2 = m1;
29
30     EXPECT_EQ(m1.rows, m2.rows);
31     EXPECT_EQ(m1.cols, m2.cols);
32     EXPECT_EQ(m1.data, m2.data);
33     EXPECT_EQ(m1.at<uchar>(0, 0), m2.at<uchar>(0, 0));
34
35     // Calling "create" with the same meta is NOOP - both m1 and m2 are the same
36     m1.create(480, 640, CV_8U);
37     EXPECT_EQ(m1.rows, m2.rows);
38     EXPECT_EQ(m1.cols, m2.cols);
39     EXPECT_EQ(m1.data, m2.data);
40     EXPECT_EQ(m1.at<uchar>(0, 0), m2.at<uchar>(0, 0));
41
42     // Calling "create" on m2 with different meta doesn't update original m1
43     // Now m1 and m2 are distinct
44     m2.create(720, 1280, CV_8U);
45     m2.at<uchar>(0, 0) = 64; // Initialize 0,0 element since m2 is a new buffer
46     EXPECT_NE(m1.rows, m2.rows);
47     EXPECT_NE(m1.cols, m2.cols);
48     EXPECT_NE(m1.data, m2.data);
49     EXPECT_NE(m1.at<uchar>(0, 0), m2.at<uchar>(0, 0));
50
51     // What if a Mat is created from handle?
52     uchar data[] = {
53         32, 0, 0,
54          0, 0, 0,
55          0, 0, 0
56     };
57     cv::Mat m3(3, 3, CV_8U, data);
58     cv::Mat m4 = m3;
59     EXPECT_EQ(m3.rows, m4.rows);
60     EXPECT_EQ(m3.cols, m4.cols);
61     EXPECT_EQ(m3.data, m4.data);
62     EXPECT_EQ(data, m3.data);
63     EXPECT_EQ(data, m4.data);
64     EXPECT_EQ(m3.at<uchar>(0, 0), m4.at<uchar>(0, 0));
65
66     // cv::Mat::create must be NOOP if we don't change the meta,
67     // even if the origianl mat is created from handle.
68     m4.create(3, 3, CV_8U);
69     EXPECT_EQ(m3.rows, m4.rows);
70     EXPECT_EQ(m3.cols, m4.cols);
71     EXPECT_EQ(m3.data, m4.data);
72     EXPECT_EQ(data, m3.data);
73     EXPECT_EQ(data, m4.data);
74     EXPECT_EQ(m3.at<uchar>(0, 0), m4.at<uchar>(0, 0));
75 }
76
77 TEST(GAPI, EmptyOutMat)
78 {
79     cv::Mat in_mat = cv::Mat(480, 640, CV_8U, cv::Scalar(64));
80
81     cv::GComputation cc([]()
82     {
83         cv::GMat in;
84         cv::GMat out = in + in;
85         return cv::GComputation(in, out);
86     });
87
88     cv::Mat out;
89     cc.apply(in_mat, out);
90
91     EXPECT_EQ(640, out.cols);
92     EXPECT_EQ(480, out.rows);
93     EXPECT_EQ(CV_8U, out.type());
94     EXPECT_EQ(0, cv::countNonZero(out - (in_mat+in_mat)));
95 }
96
97 }