1793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/*M///////////////////////////////////////////////////////////////////////////////////////
2793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler//
3793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
4793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler//
5793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler//  By downloading, copying, installing or using the software you agree to this license.
6793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler//  If you do not agree to this license, do not download, install,
7793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler//  copy or use the software.
8793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler//
9793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler//
10793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler//                           License Agreement
11793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler//                For Open Source Computer Vision Library
12793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler//
13793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler// Copyright (C) 2010-2012, Institute Of Software Chinese Academy Of Science, all rights reserved.
14793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler// Copyright (C) 2010-2012, Advanced Micro Devices, Inc., all rights reserved.
15793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler// Copyright (C) 2010-2012, Multicoreware, Inc., all rights reserved.
16793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler// Third party copyrights are property of their respective owners.
17793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler//
18793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler// @Authors
19793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler//    Jia Haipeng, jiahaipeng95@gmail.com
20793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler//
21793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler// Redistribution and use in source and binary forms, with or without modification,
22793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler// are permitted provided that the following conditions are met:
23793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler//
24793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler//   * Redistribution's of source code must retain the above copyright notice,
25793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler//     this list of conditions and the following disclaimer.
26793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler//
27793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler//   * Redistribution's in binary form must reproduce the above copyright notice,
28793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler//     this list of conditions and the following disclaimer in the documentation
29793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler//     and/or other materials provided with the distribution.
30793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler//
31793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler//   * The name of the copyright holders may not be used to endorse or promote products
32793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler//     derived from this software without specific prior written permission.
33793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler//
34793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler// This software is provided by the copyright holders and contributors "as is" and
35793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler// any express or implied warranties, including, but not limited to, the implied
36793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler// warranties of merchantability and fitness for a particular purpose are disclaimed.
37793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler// In no event shall the Intel Corporation or contributors be liable for any direct,
38793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler// indirect, incidental, special, exemplary, or consequential damages
39793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler// (including, but not limited to, procurement of substitute goods or services;
40793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler// loss of use, data, or profits; or business interruption) however caused
41793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler// and on any theory of liability, whether in contract, strict liability,
42793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler// or tort (including negligence or otherwise) arising in any way out of
43793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler// the use of this software, even if advised of the possibility of such damage.
44793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler//
45793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler//M*/
46793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
47793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#include "../test_precomp.hpp"
48793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#include "opencv2/ts/ocl_test.hpp"
49793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
50793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#ifdef HAVE_OPENCL
51793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
52793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslernamespace cvtest {
53793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslernamespace ocl {
54793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
55793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler//////////////////////////////////////// Merge ///////////////////////////////////////////////
56793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
57793ee12c6df9cad3806238d32528c49a3ff9331dNoah PreslerPARAM_TEST_CASE(Merge, MatDepth, int, bool)
58793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler{
59793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    int depth, nsrc;
60793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    bool use_roi;
61793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
62793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    TEST_DECLARE_INPUT_PARAMETER(src1);
63793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    TEST_DECLARE_INPUT_PARAMETER(src2);
64793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    TEST_DECLARE_INPUT_PARAMETER(src3);
65793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    TEST_DECLARE_INPUT_PARAMETER(src4);
66793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    TEST_DECLARE_OUTPUT_PARAMETER(dst);
67793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
68793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    std::vector<Mat> src_roi;
69793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    std::vector<UMat> usrc_roi;
70793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
71793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    virtual void SetUp()
72793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    {
73793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        depth = GET_PARAM(0);
74793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        nsrc = GET_PARAM(1);
75793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        use_roi = GET_PARAM(2);
76793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
77793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        CV_Assert(nsrc >= 1 && nsrc <= 4);
78793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
79793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
80793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    int type()
81793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    {
82793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        return CV_MAKE_TYPE(depth, randomInt(1, 3));
83793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
84793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
85793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    void generateTestData()
86793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    {
87793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Size roiSize = randomSize(1, MAX_VALUE);
88793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
89793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        {
90793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            Border src1Border = randomBorder(0, use_roi ? MAX_VALUE : 0);
91793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            randomSubMat(src1, src1_roi, roiSize, src1Border, type(), 2, 11);
92793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
93793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            Border src2Border = randomBorder(0, use_roi ? MAX_VALUE : 0);
94793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            randomSubMat(src2, src2_roi, roiSize, src2Border, type(), -1540, 1740);
95793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
96793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            Border src3Border = randomBorder(0, use_roi ? MAX_VALUE : 0);
97793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            randomSubMat(src3, src3_roi, roiSize, src3Border, type(), -1540, 1740);
98793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
99793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            Border src4Border = randomBorder(0, use_roi ? MAX_VALUE : 0);
100793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            randomSubMat(src4, src4_roi, roiSize, src4Border, type(), -1540, 1740);
101793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        }
102793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
103793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        UMAT_UPLOAD_INPUT_PARAMETER(src1);
104793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        UMAT_UPLOAD_INPUT_PARAMETER(src2);
105793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        UMAT_UPLOAD_INPUT_PARAMETER(src3);
106793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        UMAT_UPLOAD_INPUT_PARAMETER(src4);
107793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
108793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        src_roi.clear(); usrc_roi.clear(); // for test_loop_times > 1
109793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        src_roi.push_back(src1_roi), usrc_roi.push_back(usrc1_roi);
110793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        if (nsrc >= 2)
111793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            src_roi.push_back(src2_roi), usrc_roi.push_back(usrc2_roi);
112793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        if (nsrc >= 3)
113793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            src_roi.push_back(src3_roi), usrc_roi.push_back(usrc3_roi);
114793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        if (nsrc >= 4)
115793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            src_roi.push_back(src4_roi), usrc_roi.push_back(usrc4_roi);
116793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
117793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        int dcn = 0;
118793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        for (int i = 0; i < nsrc; ++i)
119793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            dcn += src_roi[i].channels();
120793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
121793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Border dstBorder = randomBorder(0, use_roi ? MAX_VALUE : 0);
122793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        randomSubMat(dst, dst_roi, roiSize, dstBorder, CV_MAKE_TYPE(depth, dcn), 5, 16);
123793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
124793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        UMAT_UPLOAD_OUTPUT_PARAMETER(dst);
125793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
126793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
127793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    void Near(double threshold = 0.)
128793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    {
129793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        OCL_EXPECT_MATS_NEAR(dst, threshold);
130793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
131793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler};
132793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
133793ee12c6df9cad3806238d32528c49a3ff9331dNoah PreslerOCL_TEST_P(Merge, Accuracy)
134793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler{
135793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    for(int j = 0; j < test_loop_times; j++)
136793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    {
137793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        generateTestData();
138793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
139793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        OCL_OFF(cv::merge(src_roi, dst_roi));
140793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        OCL_ON(cv::merge(usrc_roi, udst_roi));
141793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
142793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Near();
143793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
144793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler}
145793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
146793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler//////////////////////////////////////// Split ///////////////////////////////////////////////
147793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
148793ee12c6df9cad3806238d32528c49a3ff9331dNoah PreslerPARAM_TEST_CASE(Split, MatType, Channels, bool)
149793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler{
150793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    int depth, cn;
151793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    bool use_roi;
152793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
153793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    TEST_DECLARE_INPUT_PARAMETER(src);
154793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    TEST_DECLARE_OUTPUT_PARAMETER(dst1);
155793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    TEST_DECLARE_OUTPUT_PARAMETER(dst2);
156793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    TEST_DECLARE_OUTPUT_PARAMETER(dst3);
157793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    TEST_DECLARE_OUTPUT_PARAMETER(dst4);
158793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
159793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    std::vector<Mat> dst_roi, dst;
160793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    std::vector<UMat> udst_roi, udst;
161793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
162793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    virtual void SetUp()
163793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    {
164793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        depth = GET_PARAM(0);
165793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        cn = GET_PARAM(1);
166793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        use_roi = GET_PARAM(2);
167793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
168793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        CV_Assert(cn >= 1 && cn <= 4);
169793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
170793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
171793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    void generateTestData()
172793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    {
173793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Size roiSize = randomSize(1, MAX_VALUE);
174793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Border srcBorder = randomBorder(0, use_roi ? MAX_VALUE : 0);
175793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        randomSubMat(src, src_roi, roiSize, srcBorder, CV_MAKE_TYPE(depth, cn), 5, 16);
176793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
177793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        {
178793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            Border dst1Border = randomBorder(0, use_roi ? MAX_VALUE : 0);
179793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            randomSubMat(dst1, dst1_roi, roiSize, dst1Border, depth, 2, 11);
180793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
181793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            Border dst2Border = randomBorder(0, use_roi ? MAX_VALUE : 0);
182793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            randomSubMat(dst2, dst2_roi, roiSize, dst2Border, depth, -1540, 1740);
183793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
184793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            Border dst3Border = randomBorder(0, use_roi ? MAX_VALUE : 0);
185793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            randomSubMat(dst3, dst3_roi, roiSize, dst3Border, depth, -1540, 1740);
186793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
187793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            Border dst4Border = randomBorder(0, use_roi ? MAX_VALUE : 0);
188793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            randomSubMat(dst4, dst4_roi, roiSize, dst4Border, depth, -1540, 1740);
189793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        }
190793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
191793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        UMAT_UPLOAD_INPUT_PARAMETER(src);
192793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        UMAT_UPLOAD_OUTPUT_PARAMETER(dst1);
193793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        UMAT_UPLOAD_OUTPUT_PARAMETER(dst2);
194793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        UMAT_UPLOAD_OUTPUT_PARAMETER(dst3);
195793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        UMAT_UPLOAD_OUTPUT_PARAMETER(dst4);
196793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
197793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        dst_roi.push_back(dst1_roi), udst_roi.push_back(udst1_roi),
198793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                dst.push_back(dst1), udst.push_back(udst1);
199793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        if (cn >= 2)
200793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            dst_roi.push_back(dst2_roi), udst_roi.push_back(udst2_roi),
201793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                    dst.push_back(dst2), udst.push_back(udst2);
202793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        if (cn >= 3)
203793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            dst_roi.push_back(dst3_roi), udst_roi.push_back(udst3_roi),
204793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                    dst.push_back(dst3), udst.push_back(udst3);
205793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        if (cn >= 4)
206793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            dst_roi.push_back(dst4_roi), udst_roi.push_back(udst4_roi),
207793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                    dst.push_back(dst4), udst.push_back(udst4);
208793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
209793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler};
210793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
211793ee12c6df9cad3806238d32528c49a3ff9331dNoah PreslerOCL_TEST_P(Split, Accuracy)
212793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler{
213793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    for (int j = 0; j < test_loop_times; j++)
214793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    {
215793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        generateTestData();
216793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
217793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        OCL_OFF(cv::split(src_roi, dst_roi));
218793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        OCL_ON(cv::split(usrc_roi, udst_roi));
219793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
220793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        for (int i = 0; i < cn; ++i)
221793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        {
222793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            EXPECT_MAT_NEAR(dst[i], udst[i], 0.0);
223793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            EXPECT_MAT_NEAR(dst_roi[i], udst_roi[i], 0.0);
224793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        }
225793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
226793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler}
227793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
228793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler//////////////////////////////////////// MixChannels ///////////////////////////////////////////////
229793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
230793ee12c6df9cad3806238d32528c49a3ff9331dNoah PreslerPARAM_TEST_CASE(MixChannels, MatType, bool)
231793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler{
232793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    int depth;
233793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    bool use_roi;
234793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
235793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    TEST_DECLARE_INPUT_PARAMETER(src1);
236793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    TEST_DECLARE_INPUT_PARAMETER(src2);
237793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    TEST_DECLARE_INPUT_PARAMETER(src3);
238793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    TEST_DECLARE_INPUT_PARAMETER(src4);
239793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    TEST_DECLARE_OUTPUT_PARAMETER(dst1);
240793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    TEST_DECLARE_OUTPUT_PARAMETER(dst2);
241793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    TEST_DECLARE_OUTPUT_PARAMETER(dst3);
242793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    TEST_DECLARE_OUTPUT_PARAMETER(dst4);
243793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
244793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    std::vector<Mat> src_roi, dst_roi, dst;
245793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    std::vector<UMat> usrc_roi, udst_roi, udst;
246793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    std::vector<int> fromTo;
247793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
248793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    virtual void SetUp()
249793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    {
250793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        depth = GET_PARAM(0);
251793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        use_roi = GET_PARAM(1);
252793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
253793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
254793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    // generate number of channels and create type
255793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    int type()
256793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    {
257793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        int cn = randomInt(1, 5);
258793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        return CV_MAKE_TYPE(depth, cn);
259793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
260793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
261793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    void generateTestData()
262793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    {
263793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        src_roi.clear();
264793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        dst_roi.clear();
265793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        dst.clear();
266793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        usrc_roi.clear();
267793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        udst_roi.clear();
268793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        udst.clear();
269793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        fromTo.clear();
270793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
271793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Size roiSize = randomSize(1, MAX_VALUE);
272793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
273793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        {
274793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            Border src1Border = randomBorder(0, use_roi ? MAX_VALUE : 0);
275793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            randomSubMat(src1, src1_roi, roiSize, src1Border, type(), 2, 11);
276793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
277793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            Border src2Border = randomBorder(0, use_roi ? MAX_VALUE : 0);
278793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            randomSubMat(src2, src2_roi, roiSize, src2Border, type(), -1540, 1740);
279793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
280793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            Border src3Border = randomBorder(0, use_roi ? MAX_VALUE : 0);
281793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            randomSubMat(src3, src3_roi, roiSize, src3Border, type(), -1540, 1740);
282793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
283793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            Border src4Border = randomBorder(0, use_roi ? MAX_VALUE : 0);
284793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            randomSubMat(src4, src4_roi, roiSize, src4Border, type(), -1540, 1740);
285793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        }
286793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
287793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        {
288793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            Border dst1Border = randomBorder(0, use_roi ? MAX_VALUE : 0);
289793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            randomSubMat(dst1, dst1_roi, roiSize, dst1Border, type(), 2, 11);
290793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
291793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            Border dst2Border = randomBorder(0, use_roi ? MAX_VALUE : 0);
292793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            randomSubMat(dst2, dst2_roi, roiSize, dst2Border, type(), -1540, 1740);
293793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
294793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            Border dst3Border = randomBorder(0, use_roi ? MAX_VALUE : 0);
295793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            randomSubMat(dst3, dst3_roi, roiSize, dst3Border, type(), -1540, 1740);
296793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
297793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            Border dst4Border = randomBorder(0, use_roi ? MAX_VALUE : 0);
298793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            randomSubMat(dst4, dst4_roi, roiSize, dst4Border, type(), -1540, 1740);
299793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        }
300793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
301793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        UMAT_UPLOAD_INPUT_PARAMETER(src1);
302793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        UMAT_UPLOAD_INPUT_PARAMETER(src2);
303793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        UMAT_UPLOAD_INPUT_PARAMETER(src3);
304793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        UMAT_UPLOAD_INPUT_PARAMETER(src4);
305793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
306793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        UMAT_UPLOAD_OUTPUT_PARAMETER(dst1);
307793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        UMAT_UPLOAD_OUTPUT_PARAMETER(dst2);
308793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        UMAT_UPLOAD_OUTPUT_PARAMETER(dst3);
309793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        UMAT_UPLOAD_OUTPUT_PARAMETER(dst4);
310793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
311793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        int nsrc = randomInt(1, 5), ndst = randomInt(1, 5);
312793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
313793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        src_roi.push_back(src1_roi), usrc_roi.push_back(usrc1_roi);
314793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        if (nsrc >= 2)
315793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            src_roi.push_back(src2_roi), usrc_roi.push_back(usrc2_roi);
316793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        if (nsrc >= 3)
317793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            src_roi.push_back(src3_roi), usrc_roi.push_back(usrc3_roi);
318793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        if (nsrc >= 4)
319793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            src_roi.push_back(src4_roi), usrc_roi.push_back(usrc4_roi);
320793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
321793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        dst_roi.push_back(dst1_roi), udst_roi.push_back(udst1_roi),
322793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                dst.push_back(dst1), udst.push_back(udst1);
323793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        if (ndst >= 2)
324793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            dst_roi.push_back(dst2_roi), udst_roi.push_back(udst2_roi),
325793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                    dst.push_back(dst2), udst.push_back(udst2);
326793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        if (ndst >= 3)
327793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            dst_roi.push_back(dst3_roi), udst_roi.push_back(udst3_roi),
328793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                    dst.push_back(dst3), udst.push_back(udst3);
329793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        if (ndst >= 4)
330793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            dst_roi.push_back(dst4_roi), udst_roi.push_back(udst4_roi),
331793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                    dst.push_back(dst4), udst.push_back(udst4);
332793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
333793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        int scntotal = 0, dcntotal = 0;
334793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        for (int i = 0; i < nsrc; ++i)
335793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            scntotal += src_roi[i].channels();
336793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        for (int i = 0; i < ndst; ++i)
337793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            dcntotal += dst_roi[i].channels();
338793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
339793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        int npairs = randomInt(1, std::min(scntotal, dcntotal) + 1);
340793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        fromTo.resize(npairs << 1);
341793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
342793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        for (int i = 0; i < npairs; ++i)
343793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        {
344793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            fromTo[i<<1] = randomInt(0, scntotal);
345793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            fromTo[(i<<1)+1] = randomInt(0, dcntotal);
346793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        }
347793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
348793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler};
349793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
350793ee12c6df9cad3806238d32528c49a3ff9331dNoah PreslerOCL_TEST_P(MixChannels, Accuracy)
351793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler{
352793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    for (int j = 0; j < test_loop_times + 10; j++)
353793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    {
354793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        generateTestData();
355793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
356793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        OCL_OFF(cv::mixChannels(src_roi, dst_roi, fromTo));
357793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        OCL_ON(cv::mixChannels(usrc_roi, udst_roi, fromTo));
358793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
359793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        for (size_t i = 0, size = dst_roi.size(); i < size; ++i)
360793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        {
361793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            EXPECT_MAT_NEAR(dst[i], udst[i], 0.0);
362793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            EXPECT_MAT_NEAR(dst_roi[i], udst_roi[i], 0.0);
363793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        }
364793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
365793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler}
366793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
367793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler//////////////////////////////////////// InsertChannel ///////////////////////////////////////////////
368793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
369793ee12c6df9cad3806238d32528c49a3ff9331dNoah PreslerPARAM_TEST_CASE(InsertChannel, MatDepth, Channels, bool)
370793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler{
371793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    int depth, cn, coi;
372793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    bool use_roi;
373793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
374793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    TEST_DECLARE_INPUT_PARAMETER(src);
375793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    TEST_DECLARE_OUTPUT_PARAMETER(dst);
376793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
377793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    virtual void SetUp()
378793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    {
379793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        depth = GET_PARAM(0);
380793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        cn = GET_PARAM(1);
381793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        use_roi = GET_PARAM(2);
382793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
383793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
384793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    void generateTestData()
385793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    {
386793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Size roiSize = randomSize(1, MAX_VALUE);
387793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        coi = randomInt(0, cn);
388793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
389793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Border srcBorder = randomBorder(0, use_roi ? MAX_VALUE : 0);
390793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        randomSubMat(src, src_roi, roiSize, srcBorder, depth, 2, 11);
391793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
392793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Border dstBorder = randomBorder(0, use_roi ? MAX_VALUE : 0);
393793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        randomSubMat(dst, dst_roi, roiSize, dstBorder, CV_MAKE_TYPE(depth, cn), 5, 16);
394793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
395793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        UMAT_UPLOAD_INPUT_PARAMETER(src);
396793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        UMAT_UPLOAD_OUTPUT_PARAMETER(dst);
397793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
398793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler};
399793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
400793ee12c6df9cad3806238d32528c49a3ff9331dNoah PreslerOCL_TEST_P(InsertChannel, Accuracy)
401793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler{
402793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    for(int j = 0; j < test_loop_times; j++)
403793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    {
404793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        generateTestData();
405793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
406793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        OCL_OFF(cv::insertChannel(src_roi, dst_roi, coi));
407793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        OCL_ON(cv::insertChannel(usrc_roi, udst_roi, coi));
408793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
409793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        OCL_EXPECT_MATS_NEAR(dst, 0);
410793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
411793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler}
412793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
413793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler//////////////////////////////////////// ExtractChannel ///////////////////////////////////////////////
414793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
415793ee12c6df9cad3806238d32528c49a3ff9331dNoah PreslerPARAM_TEST_CASE(ExtractChannel, MatDepth, Channels, bool)
416793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler{
417793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    int depth, cn, coi;
418793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    bool use_roi;
419793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
420793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    TEST_DECLARE_INPUT_PARAMETER(src);
421793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    TEST_DECLARE_OUTPUT_PARAMETER(dst);
422793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
423793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    virtual void SetUp()
424793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    {
425793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        depth = GET_PARAM(0);
426793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        cn = GET_PARAM(1);
427793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        use_roi = GET_PARAM(2);
428793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
429793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
430793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    void generateTestData()
431793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    {
432793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Size roiSize = randomSize(1, MAX_VALUE);
433793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        coi = randomInt(0, cn);
434793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
435793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Border srcBorder = randomBorder(0, use_roi ? MAX_VALUE : 0);
436793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        randomSubMat(src, src_roi, roiSize, srcBorder, CV_MAKE_TYPE(depth, cn), 2, 11);
437793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
438793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Border dstBorder = randomBorder(0, use_roi ? MAX_VALUE : 0);
439793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        randomSubMat(dst, dst_roi, roiSize, dstBorder, depth, 5, 16);
440793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
441793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        UMAT_UPLOAD_INPUT_PARAMETER(src);
442793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        UMAT_UPLOAD_OUTPUT_PARAMETER(dst);
443793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
444793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler};
445793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
446793ee12c6df9cad3806238d32528c49a3ff9331dNoah PreslerOCL_TEST_P(ExtractChannel, Accuracy)
447793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler{
448793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    for(int j = 0; j < test_loop_times; j++)
449793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    {
450793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        generateTestData();
451793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
452793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        OCL_OFF(cv::extractChannel(src_roi, dst_roi, coi));
453793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        OCL_ON(cv::extractChannel(usrc_roi, udst_roi, coi));
454793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
455793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        OCL_EXPECT_MATS_NEAR(dst, 0);
456793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
457793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler}
458793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
459793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler//////////////////////////////////////// Instantiation ///////////////////////////////////////////////
460793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
461793ee12c6df9cad3806238d32528c49a3ff9331dNoah PreslerOCL_INSTANTIATE_TEST_CASE_P(Channels, Merge, Combine(OCL_ALL_DEPTHS, Values(1, 2, 3, 4), Bool()));
462793ee12c6df9cad3806238d32528c49a3ff9331dNoah PreslerOCL_INSTANTIATE_TEST_CASE_P(Channels, Split, Combine(OCL_ALL_DEPTHS, OCL_ALL_CHANNELS, Bool()));
463793ee12c6df9cad3806238d32528c49a3ff9331dNoah PreslerOCL_INSTANTIATE_TEST_CASE_P(Channels, MixChannels, Combine(OCL_ALL_DEPTHS, Bool()));
464793ee12c6df9cad3806238d32528c49a3ff9331dNoah PreslerOCL_INSTANTIATE_TEST_CASE_P(Channels, InsertChannel, Combine(OCL_ALL_DEPTHS, OCL_ALL_CHANNELS, Bool()));
465793ee12c6df9cad3806238d32528c49a3ff9331dNoah PreslerOCL_INSTANTIATE_TEST_CASE_P(Channels, ExtractChannel, Combine(OCL_ALL_DEPTHS, OCL_ALL_CHANNELS, Bool()));
466793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
467793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler} } // namespace cvtest::ocl
468793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
469793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#endif // HAVE_OPENCL
470