Path: blob/master/modules/gapi/test/gapi_kernel_tests.cpp
16337 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"8#include "opencv2/gapi/cpu/gcpukernel.hpp"9#include "gapi_mock_kernels.hpp"1011namespace opencv_test12{1314namespace15{16G_TYPED_KERNEL(GClone, <GMat(GMat)>, "org.opencv.test.clone")17{18static GMatDesc outMeta(GMatDesc in) { return in; }1920};2122GAPI_OCV_KERNEL(GCloneImpl, GClone)23{24static void run(const cv::Mat& in, cv::Mat &out)25{26out = in.clone();27}28};29}3031TEST(KernelPackage, Create)32{33namespace J = Jupiter;34auto pkg = cv::gapi::kernels<J::Foo, J::Bar, J::Baz>();35EXPECT_EQ(3u, pkg.size());36}3738TEST(KernelPackage, Includes)39{40namespace J = Jupiter;41auto pkg = cv::gapi::kernels<J::Foo, J::Bar, J::Baz>();42EXPECT_TRUE (pkg.includes<J::Foo>());43EXPECT_TRUE (pkg.includes<J::Bar>());44EXPECT_TRUE (pkg.includes<J::Baz>());45EXPECT_FALSE(pkg.includes<J::Qux>());46}4748TEST(KernelPackage, Include)49{50namespace J = Jupiter;51auto pkg = cv::gapi::kernels<J::Foo, J::Bar, J::Baz>();52EXPECT_FALSE(pkg.includes<J::Qux>());5354pkg.include<J::Qux>();55EXPECT_TRUE(pkg.includes<J::Qux>());56}5758TEST(KernelPackage, CreateHetero)59{60namespace J = Jupiter;61namespace S = Saturn;62auto pkg = cv::gapi::kernels<J::Foo, J::Bar, J::Baz, S::Qux>();63EXPECT_EQ(4u, pkg.size());64}6566TEST(KernelPackage, IncludesHetero)67{68namespace J = Jupiter;69namespace S = Saturn;70auto pkg = cv::gapi::kernels<J::Foo, J::Bar, J::Baz, S::Qux>();71EXPECT_TRUE (pkg.includes<J::Foo>());72EXPECT_TRUE (pkg.includes<J::Bar>());73EXPECT_TRUE (pkg.includes<J::Baz>());74EXPECT_FALSE(pkg.includes<J::Qux>());75EXPECT_TRUE (pkg.includes<S::Qux>());76}7778TEST(KernelPackage, IncludeHetero)79{80namespace J = Jupiter;81namespace S = Saturn;82auto pkg = cv::gapi::kernels<J::Foo, J::Bar, J::Baz>();83EXPECT_FALSE(pkg.includes<J::Qux>());84EXPECT_FALSE(pkg.includes<S::Qux>());8586pkg.include<S::Qux>();87EXPECT_FALSE(pkg.includes<J::Qux>());88EXPECT_TRUE (pkg.includes<S::Qux>());89}9091TEST(KernelPackage, Unite_REPLACE_Full)92{93namespace J = Jupiter;94namespace S = Saturn;95auto j_pkg = cv::gapi::kernels<J::Foo, J::Bar, J::Baz>();96auto s_pkg = cv::gapi::kernels<S::Foo, S::Bar, S::Baz>();97auto u_pkg = cv::gapi::combine(j_pkg, s_pkg, cv::unite_policy::REPLACE);9899EXPECT_EQ(3u, u_pkg.size());100EXPECT_FALSE(u_pkg.includes<J::Foo>());101EXPECT_FALSE(u_pkg.includes<J::Bar>());102EXPECT_FALSE(u_pkg.includes<J::Baz>());103EXPECT_TRUE (u_pkg.includes<S::Foo>());104EXPECT_TRUE (u_pkg.includes<S::Bar>());105EXPECT_TRUE (u_pkg.includes<S::Baz>());106}107108TEST(KernelPackage, Unite_REPLACE_Partial)109{110namespace J = Jupiter;111namespace S = Saturn;112auto j_pkg = cv::gapi::kernels<J::Foo, J::Bar>();113auto s_pkg = cv::gapi::kernels<S::Bar>();114auto u_pkg = cv::gapi::combine(j_pkg, s_pkg, cv::unite_policy::REPLACE);115116EXPECT_EQ(2u, u_pkg.size());117EXPECT_TRUE (u_pkg.includes<J::Foo>());118EXPECT_FALSE(u_pkg.includes<J::Bar>());119EXPECT_TRUE (u_pkg.includes<S::Bar>());120}121122TEST(KernelPackage, Unite_REPLACE_Append)123{124namespace J = Jupiter;125namespace S = Saturn;126auto j_pkg = cv::gapi::kernels<J::Foo, J::Bar>();127auto s_pkg = cv::gapi::kernels<S::Qux>();128auto u_pkg = cv::gapi::combine(j_pkg, s_pkg, cv::unite_policy::REPLACE);129130EXPECT_EQ(3u, u_pkg.size());131EXPECT_TRUE(u_pkg.includes<J::Foo>());132EXPECT_TRUE(u_pkg.includes<J::Bar>());133EXPECT_TRUE(u_pkg.includes<S::Qux>());134}135136TEST(KernelPackage, Unite_KEEP_AllDups)137{138namespace J = Jupiter;139namespace S = Saturn;140auto j_pkg = cv::gapi::kernels<J::Foo, J::Bar, J::Baz>();141auto s_pkg = cv::gapi::kernels<S::Foo, S::Bar, S::Baz>();142auto u_pkg = cv::gapi::combine(j_pkg ,s_pkg, cv::unite_policy::KEEP);143144EXPECT_EQ(6u, u_pkg.size());145EXPECT_TRUE(u_pkg.includes<J::Foo>());146EXPECT_TRUE(u_pkg.includes<J::Bar>());147EXPECT_TRUE(u_pkg.includes<J::Baz>());148EXPECT_TRUE(u_pkg.includes<S::Foo>());149EXPECT_TRUE(u_pkg.includes<S::Bar>());150EXPECT_TRUE(u_pkg.includes<S::Baz>());151}152153TEST(KernelPackage, Unite_KEEP_Append_NoDups)154{155namespace J = Jupiter;156namespace S = Saturn;157auto j_pkg = cv::gapi::kernels<J::Foo, J::Bar>();158auto s_pkg = cv::gapi::kernels<S::Qux>();159auto u_pkg = cv::gapi::combine(j_pkg, s_pkg, cv::unite_policy::KEEP);160161EXPECT_EQ(3u, u_pkg.size());162EXPECT_TRUE(u_pkg.includes<J::Foo>());163EXPECT_TRUE(u_pkg.includes<J::Bar>());164EXPECT_TRUE(u_pkg.includes<S::Qux>());165}166167TEST(KernelPackage, TestWithEmptyLHS)168{169namespace J = Jupiter;170auto lhs = cv::gapi::kernels<>();171auto rhs = cv::gapi::kernels<J::Foo>();172auto pkg = cv::gapi::combine(lhs, rhs, cv::unite_policy::KEEP);173174EXPECT_EQ(1u, pkg.size());175EXPECT_TRUE(pkg.includes<J::Foo>());176}177178TEST(KernelPackage, TestWithEmptyRHS)179{180namespace J = Jupiter;181auto lhs = cv::gapi::kernels<J::Foo>();182auto rhs = cv::gapi::kernels<>();183auto pkg = cv::gapi::combine(lhs, rhs, cv::unite_policy::KEEP);184185EXPECT_EQ(1u, pkg.size());186EXPECT_TRUE(pkg.includes<J::Foo>());187}188189TEST(KernelPackage, Can_Use_Custom_Kernel)190{191cv::GMat in[2];192auto out = GClone::on(cv::gapi::add(in[0], in[1]));193const auto in_meta = cv::GMetaArg(cv::GMatDesc{CV_8U,1,cv::Size(32,32)});194195auto pkg = cv::gapi::kernels<GCloneImpl>();196197EXPECT_NO_THROW(cv::GComputation(cv::GIn(in[0], in[1]), cv::GOut(out)).198compile({in_meta, in_meta}, cv::compile_args(pkg)));199}200201} // namespace opencv_test202203204