Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Tetragramm
GitHub Repository: Tetragramm/opencv
Path: blob/master/modules/gapi/test/gapi_kernel_tests.cpp
16337 views
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 Intel Corporation
6
7
8
#include "test_precomp.hpp"
9
#include "opencv2/gapi/cpu/gcpukernel.hpp"
10
#include "gapi_mock_kernels.hpp"
11
12
namespace opencv_test
13
{
14
15
namespace
16
{
17
G_TYPED_KERNEL(GClone, <GMat(GMat)>, "org.opencv.test.clone")
18
{
19
static GMatDesc outMeta(GMatDesc in) { return in; }
20
21
};
22
23
GAPI_OCV_KERNEL(GCloneImpl, GClone)
24
{
25
static void run(const cv::Mat& in, cv::Mat &out)
26
{
27
out = in.clone();
28
}
29
};
30
}
31
32
TEST(KernelPackage, Create)
33
{
34
namespace J = Jupiter;
35
auto pkg = cv::gapi::kernels<J::Foo, J::Bar, J::Baz>();
36
EXPECT_EQ(3u, pkg.size());
37
}
38
39
TEST(KernelPackage, Includes)
40
{
41
namespace J = Jupiter;
42
auto pkg = cv::gapi::kernels<J::Foo, J::Bar, J::Baz>();
43
EXPECT_TRUE (pkg.includes<J::Foo>());
44
EXPECT_TRUE (pkg.includes<J::Bar>());
45
EXPECT_TRUE (pkg.includes<J::Baz>());
46
EXPECT_FALSE(pkg.includes<J::Qux>());
47
}
48
49
TEST(KernelPackage, Include)
50
{
51
namespace J = Jupiter;
52
auto pkg = cv::gapi::kernels<J::Foo, J::Bar, J::Baz>();
53
EXPECT_FALSE(pkg.includes<J::Qux>());
54
55
pkg.include<J::Qux>();
56
EXPECT_TRUE(pkg.includes<J::Qux>());
57
}
58
59
TEST(KernelPackage, CreateHetero)
60
{
61
namespace J = Jupiter;
62
namespace S = Saturn;
63
auto pkg = cv::gapi::kernels<J::Foo, J::Bar, J::Baz, S::Qux>();
64
EXPECT_EQ(4u, pkg.size());
65
}
66
67
TEST(KernelPackage, IncludesHetero)
68
{
69
namespace J = Jupiter;
70
namespace S = Saturn;
71
auto pkg = cv::gapi::kernels<J::Foo, J::Bar, J::Baz, S::Qux>();
72
EXPECT_TRUE (pkg.includes<J::Foo>());
73
EXPECT_TRUE (pkg.includes<J::Bar>());
74
EXPECT_TRUE (pkg.includes<J::Baz>());
75
EXPECT_FALSE(pkg.includes<J::Qux>());
76
EXPECT_TRUE (pkg.includes<S::Qux>());
77
}
78
79
TEST(KernelPackage, IncludeHetero)
80
{
81
namespace J = Jupiter;
82
namespace S = Saturn;
83
auto pkg = cv::gapi::kernels<J::Foo, J::Bar, J::Baz>();
84
EXPECT_FALSE(pkg.includes<J::Qux>());
85
EXPECT_FALSE(pkg.includes<S::Qux>());
86
87
pkg.include<S::Qux>();
88
EXPECT_FALSE(pkg.includes<J::Qux>());
89
EXPECT_TRUE (pkg.includes<S::Qux>());
90
}
91
92
TEST(KernelPackage, Unite_REPLACE_Full)
93
{
94
namespace J = Jupiter;
95
namespace S = Saturn;
96
auto j_pkg = cv::gapi::kernels<J::Foo, J::Bar, J::Baz>();
97
auto s_pkg = cv::gapi::kernels<S::Foo, S::Bar, S::Baz>();
98
auto u_pkg = cv::gapi::combine(j_pkg, s_pkg, cv::unite_policy::REPLACE);
99
100
EXPECT_EQ(3u, u_pkg.size());
101
EXPECT_FALSE(u_pkg.includes<J::Foo>());
102
EXPECT_FALSE(u_pkg.includes<J::Bar>());
103
EXPECT_FALSE(u_pkg.includes<J::Baz>());
104
EXPECT_TRUE (u_pkg.includes<S::Foo>());
105
EXPECT_TRUE (u_pkg.includes<S::Bar>());
106
EXPECT_TRUE (u_pkg.includes<S::Baz>());
107
}
108
109
TEST(KernelPackage, Unite_REPLACE_Partial)
110
{
111
namespace J = Jupiter;
112
namespace S = Saturn;
113
auto j_pkg = cv::gapi::kernels<J::Foo, J::Bar>();
114
auto s_pkg = cv::gapi::kernels<S::Bar>();
115
auto u_pkg = cv::gapi::combine(j_pkg, s_pkg, cv::unite_policy::REPLACE);
116
117
EXPECT_EQ(2u, u_pkg.size());
118
EXPECT_TRUE (u_pkg.includes<J::Foo>());
119
EXPECT_FALSE(u_pkg.includes<J::Bar>());
120
EXPECT_TRUE (u_pkg.includes<S::Bar>());
121
}
122
123
TEST(KernelPackage, Unite_REPLACE_Append)
124
{
125
namespace J = Jupiter;
126
namespace S = Saturn;
127
auto j_pkg = cv::gapi::kernels<J::Foo, J::Bar>();
128
auto s_pkg = cv::gapi::kernels<S::Qux>();
129
auto u_pkg = cv::gapi::combine(j_pkg, s_pkg, cv::unite_policy::REPLACE);
130
131
EXPECT_EQ(3u, u_pkg.size());
132
EXPECT_TRUE(u_pkg.includes<J::Foo>());
133
EXPECT_TRUE(u_pkg.includes<J::Bar>());
134
EXPECT_TRUE(u_pkg.includes<S::Qux>());
135
}
136
137
TEST(KernelPackage, Unite_KEEP_AllDups)
138
{
139
namespace J = Jupiter;
140
namespace S = Saturn;
141
auto j_pkg = cv::gapi::kernels<J::Foo, J::Bar, J::Baz>();
142
auto s_pkg = cv::gapi::kernels<S::Foo, S::Bar, S::Baz>();
143
auto u_pkg = cv::gapi::combine(j_pkg ,s_pkg, cv::unite_policy::KEEP);
144
145
EXPECT_EQ(6u, u_pkg.size());
146
EXPECT_TRUE(u_pkg.includes<J::Foo>());
147
EXPECT_TRUE(u_pkg.includes<J::Bar>());
148
EXPECT_TRUE(u_pkg.includes<J::Baz>());
149
EXPECT_TRUE(u_pkg.includes<S::Foo>());
150
EXPECT_TRUE(u_pkg.includes<S::Bar>());
151
EXPECT_TRUE(u_pkg.includes<S::Baz>());
152
}
153
154
TEST(KernelPackage, Unite_KEEP_Append_NoDups)
155
{
156
namespace J = Jupiter;
157
namespace S = Saturn;
158
auto j_pkg = cv::gapi::kernels<J::Foo, J::Bar>();
159
auto s_pkg = cv::gapi::kernels<S::Qux>();
160
auto u_pkg = cv::gapi::combine(j_pkg, s_pkg, cv::unite_policy::KEEP);
161
162
EXPECT_EQ(3u, u_pkg.size());
163
EXPECT_TRUE(u_pkg.includes<J::Foo>());
164
EXPECT_TRUE(u_pkg.includes<J::Bar>());
165
EXPECT_TRUE(u_pkg.includes<S::Qux>());
166
}
167
168
TEST(KernelPackage, TestWithEmptyLHS)
169
{
170
namespace J = Jupiter;
171
auto lhs = cv::gapi::kernels<>();
172
auto rhs = cv::gapi::kernels<J::Foo>();
173
auto pkg = cv::gapi::combine(lhs, rhs, cv::unite_policy::KEEP);
174
175
EXPECT_EQ(1u, pkg.size());
176
EXPECT_TRUE(pkg.includes<J::Foo>());
177
}
178
179
TEST(KernelPackage, TestWithEmptyRHS)
180
{
181
namespace J = Jupiter;
182
auto lhs = cv::gapi::kernels<J::Foo>();
183
auto rhs = cv::gapi::kernels<>();
184
auto pkg = cv::gapi::combine(lhs, rhs, cv::unite_policy::KEEP);
185
186
EXPECT_EQ(1u, pkg.size());
187
EXPECT_TRUE(pkg.includes<J::Foo>());
188
}
189
190
TEST(KernelPackage, Can_Use_Custom_Kernel)
191
{
192
cv::GMat in[2];
193
auto out = GClone::on(cv::gapi::add(in[0], in[1]));
194
const auto in_meta = cv::GMetaArg(cv::GMatDesc{CV_8U,1,cv::Size(32,32)});
195
196
auto pkg = cv::gapi::kernels<GCloneImpl>();
197
198
EXPECT_NO_THROW(cv::GComputation(cv::GIn(in[0], in[1]), cv::GOut(out)).
199
compile({in_meta, in_meta}, cv::compile_args(pkg)));
200
}
201
202
} // namespace opencv_test
203
204