Path: blob/master/modules/gapi/test/gapi_desc_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"89#include "opencv2/gapi/cpu/gcpukernel.hpp"1011namespace opencv_test12{1314namespace15{16G_TYPED_KERNEL(KTest, <cv::GScalar(cv::GScalar)>, "org.opencv.test.scalar_kernel") {17static cv::GScalarDesc outMeta(cv::GScalarDesc in) { return in; }18};19GAPI_OCV_KERNEL(GOCVScalarTest, KTest)20{21static void run(const cv::Scalar &in, cv::Scalar &out) { out = in+cv::Scalar(1); }22};23}2425TEST(GAPI_MetaDesc, MatDesc)26{27cv::Mat m1(240, 320, CV_8U);28const auto desc1 = cv::descr_of(m1);29EXPECT_EQ(CV_8U, desc1.depth);30EXPECT_EQ(1, desc1.chan);31EXPECT_EQ(320, desc1.size.width);32EXPECT_EQ(240, desc1.size.height);3334cv::Mat m2(480, 640, CV_8UC3);35const auto desc2 = cv::descr_of(m2);36EXPECT_EQ(CV_8U, desc2.depth);37EXPECT_EQ(3, desc2.chan);38EXPECT_EQ(640, desc2.size.width);39EXPECT_EQ(480, desc2.size.height);40}4142TEST(GAPI_MetaDesc, Compare_Equal_MatDesc)43{44const auto desc1 = cv::GMatDesc{CV_8U, 1, {64, 64}};45const auto desc2 = cv::GMatDesc{CV_8U, 1, {64, 64}};4647EXPECT_TRUE(desc1 == desc2);48}4950TEST(GAPI_MetaDesc, Compare_Not_Equal_MatDesc)51{52const auto desc1 = cv::GMatDesc{CV_8U, 1, {64, 64}};53const auto desc2 = cv::GMatDesc{CV_32F, 1, {64, 64}};5455EXPECT_TRUE(desc1 != desc2);56}5758TEST(GAPI_MetaDesc, Compile_MatchMetaNumber_1)59{60cv::GMat in;61cv::GComputation cc(in, in+in);6263const auto desc1 = cv::GMatDesc{CV_8U,1,{64,64}};64const auto desc2 = cv::GMatDesc{CV_32F,1,{128,128}};6566EXPECT_NO_THROW(cc.compile(desc1));67EXPECT_NO_THROW(cc.compile(desc2));6869// FIXME: custom exception type?70// It is worth checking if compilation fails with different number71// of meta parameters72EXPECT_THROW(cc.compile(desc1, desc1), std::logic_error);73EXPECT_THROW(cc.compile(desc1, desc2, desc2), std::logic_error);74}7576TEST(GAPI_MetaDesc, Compile_MatchMetaNumber_2)77{78cv::GMat a, b;79cv::GComputation cc(cv::GIn(a, b), cv::GOut(a+b));8081const auto desc1 = cv::GMatDesc{CV_8U,1,{64,64}};82EXPECT_NO_THROW(cc.compile(desc1, desc1));8384const auto desc2 = cv::GMatDesc{CV_32F,1,{128,128}};85EXPECT_NO_THROW(cc.compile(desc2, desc2));8687// FIXME: custom exception type?88EXPECT_THROW(cc.compile(desc1), std::logic_error);89EXPECT_THROW(cc.compile(desc2), std::logic_error);90EXPECT_THROW(cc.compile(desc2, desc2, desc2), std::logic_error);91}9293TEST(GAPI_MetaDesc, Compile_MatchMetaType_Mat)94{95cv::GMat in;96cv::GComputation cc(in, in+in);9798EXPECT_NO_THROW(cc.compile(cv::GMatDesc{CV_8U,1,{64,64}}));99100// FIXME: custom exception type?101EXPECT_THROW(cc.compile(cv::empty_scalar_desc()), std::logic_error);102}103104TEST(GAPI_MetaDesc, Compile_MatchMetaType_Scalar)105{106cv::GScalar in;107cv::GComputation cc(cv::GIn(in), cv::GOut(KTest::on(in)));108109const auto desc1 = cv::descr_of(cv::Scalar(128));110const auto desc2 = cv::GMatDesc{CV_8U,1,{64,64}};111const auto pkg = cv::gapi::kernels<GOCVScalarTest>();112EXPECT_NO_THROW(cc.compile(desc1, cv::compile_args(pkg)));113114// FIXME: custom exception type?115EXPECT_THROW(cc.compile(desc2, cv::compile_args(pkg)), std::logic_error);116}117118TEST(GAPI_MetaDesc, Compile_MatchMetaType_Mixed)119{120cv::GMat a;121cv::GScalar v;122cv::GComputation cc(cv::GIn(a, v), cv::GOut(cv::gapi::addC(a, v)));123124const auto desc1 = cv::GMatDesc{CV_8U,1,{64,64}};125const auto desc2 = cv::descr_of(cv::Scalar(4));126127EXPECT_NO_THROW(cc.compile(desc1, desc2));128129// FIXME: custom exception type(s)?130EXPECT_THROW(cc.compile(desc1), std::logic_error);131EXPECT_THROW(cc.compile(desc2), std::logic_error);132EXPECT_THROW(cc.compile(desc2, desc1), std::logic_error);133EXPECT_THROW(cc.compile(desc1, desc1, desc1), std::logic_error);134EXPECT_THROW(cc.compile(desc1, desc2, desc1), std::logic_error);135}136137TEST(GAPI_MetaDesc, Typed_Compile_MatchMetaNumber_1)138{139cv::GComputationT<cv::GMat(cv::GMat)> cc([](cv::GMat in)140{141return in+in;142});143144const auto desc1 = cv::GMatDesc{CV_8U,1,{64,64}};145const auto desc2 = cv::GMatDesc{CV_32F,1,{128,128}};146147EXPECT_NO_THROW(cc.compile(desc1));148EXPECT_NO_THROW(cc.compile(desc2));149}150151TEST(GAPI_MetaDesc, Typed_Compile_MatchMetaNumber_2)152{153cv::GComputationT<cv::GMat(cv::GMat,cv::GMat)> cc([](cv::GMat a, cv::GMat b)154{155return a + b;156});157158const auto desc1 = cv::GMatDesc{CV_8U,1,{64,64}};159EXPECT_NO_THROW(cc.compile(desc1, desc1));160161const auto desc2 = cv::GMatDesc{CV_32F,1,{128,128}};162EXPECT_NO_THROW(cc.compile(desc2, desc2));163}164165TEST(GAPI_MetaDesc, Typed_Compile_MatchMetaType_Mat)166{167cv::GComputationT<cv::GMat(cv::GMat)> cc([](cv::GMat in)168{169return in+in;170});171172EXPECT_NO_THROW(cc.compile(cv::GMatDesc{CV_8U,1,{64,64}}));173}174175TEST(GAPI_MetaDesc, Typed_Compile_MatchMetaType_Scalar)176{177cv::GComputationT<cv::GScalar(cv::GScalar)> cc([](cv::GScalar in)178{179return KTest::on(in);180});181182const auto desc1 = cv::descr_of(cv::Scalar(128));183const auto pkg = cv::gapi::kernels<GOCVScalarTest>();184// EXPECT_NO_THROW(cc.compile(desc1, cv::compile_args(pkg)));185cc.compile(desc1, cv::compile_args(pkg));186}187188TEST(GAPI_MetaDesc, Typed_Compile_MatchMetaType_Mixed)189{190cv::GComputationT<cv::GMat(cv::GMat,cv::GScalar)> cc([](cv::GMat a, cv::GScalar v)191{192return cv::gapi::addC(a, v);193});194195const auto desc1 = cv::GMatDesc{CV_8U,1,{64,64}};196const auto desc2 = cv::descr_of(cv::Scalar(4));197198EXPECT_NO_THROW(cc.compile(desc1, desc2));199}200201} // namespace opencv_test202203204