Path: blob/master/modules/gapi/test/internal/gapi_int_resolve_kernel_test.cpp
16345 views
// This file is part of OpenCV project.1// It is subject to the license terms in the LICENSE file found in the top-level directory2// of this distribution and at http://opencv.org/license.html.3//4// Copyright (C) 2018 Intel Corporation567#include "test_precomp.hpp"89#include "gapi_mock_kernels.hpp"1011namespace opencv_test12{1314TEST(Lookup, CreateOrder)15{16const auto order = cv::gapi::lookup_order({Jupiter::backend(),17Saturn::backend()});18EXPECT_EQ(2u, order.size());19EXPECT_EQ(Jupiter::backend(), order[0]);20EXPECT_EQ(Saturn ::backend(), order[1]);21}2223TEST(Lookup, NoOrder)24{25namespace J = Jupiter;26namespace S = Saturn;27const auto pkg = cv::gapi::kernels<J::Foo, J::Bar, J::Baz,28S::Foo, S::Bar, S::Baz>();2930EXPECT_NO_THROW (pkg.lookup<I::Foo>());31EXPECT_NO_THROW (pkg.lookup<I::Bar>());32EXPECT_NO_THROW (pkg.lookup<I::Baz>());33EXPECT_ANY_THROW(pkg.lookup<I::Qux>());34}3536TEST(Lookup, Only_Jupiter)37{38namespace J = Jupiter;39namespace S = Saturn;40const auto pkg = cv::gapi::kernels<J::Foo, J::Bar, J::Baz,41S::Foo, S::Bar, S::Baz>();4243auto order = cv::gapi::lookup_order({J::backend()});4445EXPECT_EQ(J::backend(), pkg.lookup<I::Foo>(order));46EXPECT_EQ(J::backend(), pkg.lookup<I::Bar>(order));47EXPECT_EQ(J::backend(), pkg.lookup<I::Baz>(order));48EXPECT_ANY_THROW(pkg.lookup<I::Qux>(order));49}5051TEST(Lookup, Only_Saturn)52{53namespace J = Jupiter;54namespace S = Saturn;55const auto pkg = cv::gapi::kernels<J::Foo, J::Bar, J::Baz,56S::Foo, S::Bar, S::Baz>();5758auto order = cv::gapi::lookup_order({S::backend()});5960EXPECT_EQ(S::backend(), pkg.lookup<I::Foo>(order));61EXPECT_EQ(S::backend(), pkg.lookup<I::Bar>(order));62EXPECT_EQ(S::backend(), pkg.lookup<I::Baz>(order));63EXPECT_ANY_THROW(pkg.lookup<I::Qux>(order));64}6566TEST(Lookup, With_Order)67{68namespace J = Jupiter;69namespace S = Saturn;70const auto pkg = cv::gapi::kernels<J::Foo, J::Bar, J::Baz,71S::Foo, S::Bar, S::Baz>();7273auto prefer_j = cv::gapi::lookup_order({J::backend(), S::backend()});74EXPECT_EQ(J::backend(), pkg.lookup<I::Foo>(prefer_j));75EXPECT_EQ(J::backend(), pkg.lookup<I::Bar>(prefer_j));76EXPECT_EQ(J::backend(), pkg.lookup<I::Baz>(prefer_j));77EXPECT_ANY_THROW(pkg.lookup<I::Qux>(prefer_j));7879auto prefer_s = cv::gapi::lookup_order({S::backend(), J::backend()});80EXPECT_EQ(S::backend(), pkg.lookup<I::Foo>(prefer_s));81EXPECT_EQ(S::backend(), pkg.lookup<I::Bar>(prefer_s));82EXPECT_EQ(S::backend(), pkg.lookup<I::Baz>(prefer_s));83EXPECT_ANY_THROW(pkg.lookup<I::Qux>(prefer_s));84}8586TEST(Lookup, NoOverlap)87{88namespace J = Jupiter;89namespace S = Saturn;90const auto pkg = cv::gapi::kernels<J::Foo, J::Bar, S::Baz, S::Qux>();91EXPECT_EQ(J::backend(), pkg.lookup<I::Foo>());92EXPECT_EQ(J::backend(), pkg.lookup<I::Bar>());93EXPECT_EQ(S::backend(), pkg.lookup<I::Baz>());94EXPECT_EQ(S::backend(), pkg.lookup<I::Qux>());95}9697TEST(Lookup, ExtraBackend)98{99namespace J = Jupiter;100namespace S = Saturn;101const auto pkg = cv::gapi::kernels<J::Foo, J::Bar, J::Baz>();102103// Even if pkg doesn't contain S kernels while S is preferable,104// it should work.105const auto prefer_sj = cv::gapi::lookup_order({S::backend(), J::backend()});106EXPECT_EQ(J::backend(), pkg.lookup<I::Foo>(prefer_sj));107EXPECT_EQ(J::backend(), pkg.lookup<I::Bar>(prefer_sj));108EXPECT_EQ(J::backend(), pkg.lookup<I::Baz>(prefer_sj));109110// If search scope is limited to S only, neither J nor S kernels111// shouldn't be found112const auto only_s = cv::gapi::lookup_order({S::backend()});113EXPECT_ANY_THROW(pkg.lookup<I::Foo>(only_s));114EXPECT_ANY_THROW(pkg.lookup<I::Bar>(only_s));115EXPECT_ANY_THROW(pkg.lookup<I::Baz>(only_s));116}117118} // namespace opencv_test119120121