Path: blob/master/modules/gapi/test/common/gapi_operators_tests.hpp
16339 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#ifndef OPENCV_GAPI_OPERATOR_TESTS_COMMON_HPP8#define OPENCV_GAPI_OPERATOR_TESTS_COMMON_HPP910#include "gapi_tests_common.hpp"1112namespace opencv_test13{1415struct g_api_ocv_pair_mat_scalar {16using g_api_function_t = std::function<cv::GMat(cv::GMat,cv::GScalar)>;17using ocv_function_t = std::function<void(cv::Mat const&, cv::Scalar, cv::Mat&)>;1819std::string name;20g_api_function_t g_api_function;21ocv_function_t ocv_function;222324g_api_ocv_pair_mat_scalar(std::string const& n, g_api_function_t const& g, ocv_function_t const& o)25: name(n), g_api_function(g), ocv_function(o) {}2627g_api_ocv_pair_mat_scalar() = default;2829friend std::ostream& operator<<(std::ostream& o, const g_api_ocv_pair_mat_scalar& p)30{31return o<<p.name;32}33};3435struct g_api_ocv_pair_mat_mat {36using g_api_function_t = std::function<cv::GMat(cv::GMat,cv::GMat)>;37using ocv_function_t = std::function<void(cv::Mat const&, cv::Mat const&, cv::Mat&)>;3839std::string name;40g_api_function_t g_api_function;41ocv_function_t ocv_function;424344g_api_ocv_pair_mat_mat(std::string const& n, g_api_function_t const& g, ocv_function_t const& o)45: name(n), g_api_function(g), ocv_function(o) {}4647g_api_ocv_pair_mat_mat() = default;4849friend std::ostream& operator<<(std::ostream& o, const g_api_ocv_pair_mat_mat& p)50{51return o<<p.name;52}53};5455////////////////////////////////////////////////////////////////////////////////56//57// FIXME: Please refactor this test to a template test (T,U) with enum (OP)58//59////////////////////////////////////////////////////////////////////////////////60namespace61{626364//declare test cases for matrix and scalar operators65g_api_ocv_pair_mat_scalar opPlus = {std::string{"operator+"},66[](cv::GMat in,cv::GScalar c){return in+c;},67[](const cv::Mat& in, cv::Scalar c, cv::Mat& out){cv::add(in, c, out);}};68g_api_ocv_pair_mat_scalar opPlusR = {std::string{"rev_operator+"},69[](cv::GMat in,cv::GScalar c){return c+in;},70[](const cv::Mat& in, cv::Scalar c, cv::Mat& out){cv::add(c, in, out);}};71g_api_ocv_pair_mat_scalar opMinus = {std::string{"operator-"},72[](cv::GMat in,cv::GScalar c){return in-c;},73[](const cv::Mat& in, cv::Scalar c, cv::Mat& out){cv::subtract(in, c, out);}};74g_api_ocv_pair_mat_scalar opMinusR = {std::string{"rev_operator-"},75[](cv::GMat in,cv::GScalar c){return c-in;},76[](const cv::Mat& in, cv::Scalar c, cv::Mat& out){cv::subtract(c, in, out);}};77g_api_ocv_pair_mat_scalar opMul = {std::string{"operator*"},78[](cv::GMat in,cv::GScalar c){return in*c;},79[](const cv::Mat& in, cv::Scalar c, cv::Mat& out){cv::multiply(in, c, out);}};80g_api_ocv_pair_mat_scalar opMulR = {std::string{"rev_operator*"},81[](cv::GMat in,cv::GScalar c){return c*in;},82[](const cv::Mat& in, cv::Scalar c, cv::Mat& out){cv::multiply(c, in, out);}};83g_api_ocv_pair_mat_scalar opDiv = {std::string{"operator/"},84[](cv::GMat in,cv::GScalar c){return in/c;},85[](const cv::Mat& in, cv::Scalar c, cv::Mat& out){cv::divide(in, c, out);}};86g_api_ocv_pair_mat_scalar opDivR = {std::string{"rev_operator/"},87[](cv::GMat in,cv::GScalar c){return c/in;},88[](const cv::Mat& in, cv::Scalar c, cv::Mat& out){cv::divide(c, in, out);}};8990g_api_ocv_pair_mat_scalar opGT = {std::string{"operator>"},91[](cv::GMat in,cv::GScalar c){return in>c;},92[](const cv::Mat& in, cv::Scalar c, cv::Mat& out){cv::compare(in, c, out,cv::CMP_GT);}};93g_api_ocv_pair_mat_scalar opLT = {std::string{"operator<"},94[](cv::GMat in,cv::GScalar c){return in<c;},95[](const cv::Mat& in, cv::Scalar c, cv::Mat& out){cv::compare(in, c, out,cv::CMP_LT);}};96g_api_ocv_pair_mat_scalar opGE = {std::string{"operator>="},97[](cv::GMat in,cv::GScalar c){return in>=c;},98[](const cv::Mat& in, cv::Scalar c, cv::Mat& out){cv::compare(in, c, out,cv::CMP_GE);}};99g_api_ocv_pair_mat_scalar opLE = {std::string{"operator<="},100[](cv::GMat in,cv::GScalar c){return in<=c;},101[](const cv::Mat& in, cv::Scalar c, cv::Mat& out){cv::compare(in, c, out,cv::CMP_LE);}};102g_api_ocv_pair_mat_scalar opEQ = {std::string{"operator=="},103[](cv::GMat in,cv::GScalar c){return in==c;},104[](const cv::Mat& in, cv::Scalar c, cv::Mat& out){cv::compare(in, c, out,cv::CMP_EQ);}};105g_api_ocv_pair_mat_scalar opNE = {std::string{"operator!="},106[](cv::GMat in,cv::GScalar c){return in!=c;},107[](const cv::Mat& in, cv::Scalar c, cv::Mat& out){cv::compare(in, c, out,cv::CMP_NE);}};108g_api_ocv_pair_mat_scalar opGTR = {std::string{"rev_operator>"},109[](cv::GMat in,cv::GScalar c){return c>in;},110[](const cv::Mat& in, cv::Scalar c, cv::Mat& out){cv::compare(c, in, out,cv::CMP_GT);}};111g_api_ocv_pair_mat_scalar opLTR = {std::string{"rev_operator<"},112[](cv::GMat in,cv::GScalar c){return c<in;},113[](const cv::Mat& in, cv::Scalar c, cv::Mat& out){cv::compare(c, in, out,cv::CMP_LT);}};114g_api_ocv_pair_mat_scalar opGER = {std::string{"rev_operator>="},115[](cv::GMat in,cv::GScalar c){return c>=in;},116[](const cv::Mat& in, cv::Scalar c, cv::Mat& out){cv::compare(c, in, out,cv::CMP_GE);}};117g_api_ocv_pair_mat_scalar opLER = {std::string{"rev_operator<="},118[](cv::GMat in,cv::GScalar c){return c<=in;},119[](const cv::Mat& in, cv::Scalar c, cv::Mat& out){cv::compare(c, in, out,cv::CMP_LE);}};120g_api_ocv_pair_mat_scalar opEQR = {std::string{"rev_operator=="},121[](cv::GMat in,cv::GScalar c){return c==in;},122[](const cv::Mat& in, cv::Scalar c, cv::Mat& out){cv::compare(c, in, out,cv::CMP_EQ);}};123g_api_ocv_pair_mat_scalar opNER = {std::string{"rev_operator!="},124[](cv::GMat in,cv::GScalar c){return c!=in;},125[](const cv::Mat& in, cv::Scalar c, cv::Mat& out){cv::compare(c, in, out,cv::CMP_NE);}};126127g_api_ocv_pair_mat_scalar opAND = {std::string{"operator&"},128[](cv::GMat in1,cv::GScalar in2){return in1&in2;},129[](const cv::Mat& in1, const cv::Scalar& in2, cv::Mat& out){cv::bitwise_and(in1, in2, out);}};130g_api_ocv_pair_mat_scalar opOR = {std::string{"operator|"},131[](cv::GMat in1,cv::GScalar in2){return in1|in2;},132[](const cv::Mat& in1, const cv::Scalar& in2, cv::Mat& out){cv::bitwise_or(in1, in2, out);}};133g_api_ocv_pair_mat_scalar opXOR = {std::string{"operator^"},134[](cv::GMat in1,cv::GScalar in2){return in1^in2;},135[](const cv::Mat& in1, const cv::Scalar& in2, cv::Mat& out){cv::bitwise_xor(in1, in2, out);}};136g_api_ocv_pair_mat_scalar opANDR = {std::string{"rev_operator&"},137[](cv::GMat in1,cv::GScalar in2){return in2&in1;},138[](const cv::Mat& in1, const cv::Scalar& in2, cv::Mat& out){cv::bitwise_and(in2, in1, out);}};139g_api_ocv_pair_mat_scalar opORR = {std::string{"rev_operator|"},140[](cv::GMat in1,cv::GScalar in2){return in2|in1;},141[](const cv::Mat& in1, const cv::Scalar& in2, cv::Mat& out){cv::bitwise_or(in2, in1, out);}};142g_api_ocv_pair_mat_scalar opXORR = {std::string{"rev_operator^"},143[](cv::GMat in1,cv::GScalar in2){return in2^in1;},144[](const cv::Mat& in1, const cv::Scalar& in2, cv::Mat& out){cv::bitwise_xor(in2, in1, out);}};145146// declare test cases for matrix and matrix operators147g_api_ocv_pair_mat_mat opPlusM = {std::string{"operator+"},148[](cv::GMat in1,cv::GMat in2){return in1+in2;},149[](const cv::Mat& in1, const cv::Mat& in2, cv::Mat& out){cv::add(in1, in2, out);}};150g_api_ocv_pair_mat_mat opMinusM = {std::string{"operator-"},151[](cv::GMat in,cv::GMat c){return in-c;},152[](const cv::Mat& in, const cv::Mat& c, cv::Mat& out){cv::subtract(in, c, out);}};153g_api_ocv_pair_mat_mat opDivM = {std::string{"operator/"},154[](cv::GMat in,cv::GMat c){return in/c;},155[](const cv::Mat& in, const cv::Mat& c, cv::Mat& out){cv::divide(in, c, out);}};156g_api_ocv_pair_mat_mat opGreater = {std::string{"operator>"},157[](cv::GMat in1,cv::GMat in2){return in1>in2;},158[](const cv::Mat& in1, const cv::Mat& in2, cv::Mat& out){cv::compare(in1, in2, out, cv::CMP_GT);}};159g_api_ocv_pair_mat_mat opGreaterEq = {std::string{"operator>="},160[](cv::GMat in1,cv::GMat in2){return in1>=in2;},161[](const cv::Mat& in1, const cv::Mat& in2, cv::Mat& out){cv::compare(in1, in2, out, cv::CMP_GE);}};162g_api_ocv_pair_mat_mat opLess = {std::string{"operator<"},163[](cv::GMat in1,cv::GMat in2){return in1<in2;},164[](const cv::Mat& in1, const cv::Mat& in2, cv::Mat& out){cv::compare(in1, in2, out, cv::CMP_LT);}};165g_api_ocv_pair_mat_mat opLessEq = {std::string{"operator<="},166[](cv::GMat in1,cv::GMat in2){return in1<=in2;},167[](const cv::Mat& in1, const cv::Mat& in2, cv::Mat& out){cv::compare(in1, in2, out, cv::CMP_LE);}};168g_api_ocv_pair_mat_mat opEq = {std::string{"operator=="},169[](cv::GMat in1,cv::GMat in2){return in1==in2;},170[](const cv::Mat& in1, const cv::Mat& in2, cv::Mat& out){cv::compare(in1, in2, out, cv::CMP_EQ);}};171g_api_ocv_pair_mat_mat opNotEq = {std::string{"operator!="},172[](cv::GMat in1,cv::GMat in2){return in1!=in2;},173[](const cv::Mat& in1, const cv::Mat& in2, cv::Mat& out){cv::compare(in1, in2, out, cv::CMP_NE);}};174175g_api_ocv_pair_mat_mat opAnd = {std::string{"operator&"},176[](cv::GMat in1,cv::GMat in2){return in1&in2;},177[](const cv::Mat& in1, const cv::Mat& in2, cv::Mat& out){cv::bitwise_and(in1, in2, out);}};178g_api_ocv_pair_mat_mat opOr = {std::string{"operator|"},179[](cv::GMat in1,cv::GMat in2){return in1|in2;},180[](const cv::Mat& in1, const cv::Mat& in2, cv::Mat& out){cv::bitwise_or(in1, in2, out);}};181g_api_ocv_pair_mat_mat opXor = {std::string{"operator^"},182[](cv::GMat in1,cv::GMat in2){return in1^in2;},183[](const cv::Mat& in1, const cv::Mat& in2, cv::Mat& out){cv::bitwise_xor(in1, in2, out);}};184185} // anonymous namespace186struct MathOperatorMatScalarTest : public TestParams<std::tuple<g_api_ocv_pair_mat_scalar,int,cv::Size,int,bool,cv::GCompileArgs>>{};187struct MathOperatorMatMatTest : public TestParams<std::tuple<g_api_ocv_pair_mat_mat,int,cv::Size,int,bool,cv::GCompileArgs>>{};188struct NotOperatorTest : public TestParams<std::tuple<int,cv::Size,bool,cv::GCompileArgs>> {};189} // opencv_test190191#endif // OPENCV_GAPI_OPERATOR_TESTS_COMMON_HPP192193194