Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Tetragramm
GitHub Repository: Tetragramm/opencv
Path: blob/master/modules/gapi/test/internal/gapi_int_resolve_kernel_test.cpp
16345 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
10
#include "gapi_mock_kernels.hpp"
11
12
namespace opencv_test
13
{
14
15
TEST(Lookup, CreateOrder)
16
{
17
const auto order = cv::gapi::lookup_order({Jupiter::backend(),
18
Saturn::backend()});
19
EXPECT_EQ(2u, order.size());
20
EXPECT_EQ(Jupiter::backend(), order[0]);
21
EXPECT_EQ(Saturn ::backend(), order[1]);
22
}
23
24
TEST(Lookup, NoOrder)
25
{
26
namespace J = Jupiter;
27
namespace S = Saturn;
28
const auto pkg = cv::gapi::kernels<J::Foo, J::Bar, J::Baz,
29
S::Foo, S::Bar, S::Baz>();
30
31
EXPECT_NO_THROW (pkg.lookup<I::Foo>());
32
EXPECT_NO_THROW (pkg.lookup<I::Bar>());
33
EXPECT_NO_THROW (pkg.lookup<I::Baz>());
34
EXPECT_ANY_THROW(pkg.lookup<I::Qux>());
35
}
36
37
TEST(Lookup, Only_Jupiter)
38
{
39
namespace J = Jupiter;
40
namespace S = Saturn;
41
const auto pkg = cv::gapi::kernels<J::Foo, J::Bar, J::Baz,
42
S::Foo, S::Bar, S::Baz>();
43
44
auto order = cv::gapi::lookup_order({J::backend()});
45
46
EXPECT_EQ(J::backend(), pkg.lookup<I::Foo>(order));
47
EXPECT_EQ(J::backend(), pkg.lookup<I::Bar>(order));
48
EXPECT_EQ(J::backend(), pkg.lookup<I::Baz>(order));
49
EXPECT_ANY_THROW(pkg.lookup<I::Qux>(order));
50
}
51
52
TEST(Lookup, Only_Saturn)
53
{
54
namespace J = Jupiter;
55
namespace S = Saturn;
56
const auto pkg = cv::gapi::kernels<J::Foo, J::Bar, J::Baz,
57
S::Foo, S::Bar, S::Baz>();
58
59
auto order = cv::gapi::lookup_order({S::backend()});
60
61
EXPECT_EQ(S::backend(), pkg.lookup<I::Foo>(order));
62
EXPECT_EQ(S::backend(), pkg.lookup<I::Bar>(order));
63
EXPECT_EQ(S::backend(), pkg.lookup<I::Baz>(order));
64
EXPECT_ANY_THROW(pkg.lookup<I::Qux>(order));
65
}
66
67
TEST(Lookup, With_Order)
68
{
69
namespace J = Jupiter;
70
namespace S = Saturn;
71
const auto pkg = cv::gapi::kernels<J::Foo, J::Bar, J::Baz,
72
S::Foo, S::Bar, S::Baz>();
73
74
auto prefer_j = cv::gapi::lookup_order({J::backend(), S::backend()});
75
EXPECT_EQ(J::backend(), pkg.lookup<I::Foo>(prefer_j));
76
EXPECT_EQ(J::backend(), pkg.lookup<I::Bar>(prefer_j));
77
EXPECT_EQ(J::backend(), pkg.lookup<I::Baz>(prefer_j));
78
EXPECT_ANY_THROW(pkg.lookup<I::Qux>(prefer_j));
79
80
auto prefer_s = cv::gapi::lookup_order({S::backend(), J::backend()});
81
EXPECT_EQ(S::backend(), pkg.lookup<I::Foo>(prefer_s));
82
EXPECT_EQ(S::backend(), pkg.lookup<I::Bar>(prefer_s));
83
EXPECT_EQ(S::backend(), pkg.lookup<I::Baz>(prefer_s));
84
EXPECT_ANY_THROW(pkg.lookup<I::Qux>(prefer_s));
85
}
86
87
TEST(Lookup, NoOverlap)
88
{
89
namespace J = Jupiter;
90
namespace S = Saturn;
91
const auto pkg = cv::gapi::kernels<J::Foo, J::Bar, S::Baz, S::Qux>();
92
EXPECT_EQ(J::backend(), pkg.lookup<I::Foo>());
93
EXPECT_EQ(J::backend(), pkg.lookup<I::Bar>());
94
EXPECT_EQ(S::backend(), pkg.lookup<I::Baz>());
95
EXPECT_EQ(S::backend(), pkg.lookup<I::Qux>());
96
}
97
98
TEST(Lookup, ExtraBackend)
99
{
100
namespace J = Jupiter;
101
namespace S = Saturn;
102
const auto pkg = cv::gapi::kernels<J::Foo, J::Bar, J::Baz>();
103
104
// Even if pkg doesn't contain S kernels while S is preferable,
105
// it should work.
106
const auto prefer_sj = cv::gapi::lookup_order({S::backend(), J::backend()});
107
EXPECT_EQ(J::backend(), pkg.lookup<I::Foo>(prefer_sj));
108
EXPECT_EQ(J::backend(), pkg.lookup<I::Bar>(prefer_sj));
109
EXPECT_EQ(J::backend(), pkg.lookup<I::Baz>(prefer_sj));
110
111
// If search scope is limited to S only, neither J nor S kernels
112
// shouldn't be found
113
const auto only_s = cv::gapi::lookup_order({S::backend()});
114
EXPECT_ANY_THROW(pkg.lookup<I::Foo>(only_s));
115
EXPECT_ANY_THROW(pkg.lookup<I::Bar>(only_s));
116
EXPECT_ANY_THROW(pkg.lookup<I::Baz>(only_s));
117
}
118
119
} // namespace opencv_test
120
121