Home | History | Annotate | Download | only in test
      1 /*M///////////////////////////////////////////////////////////////////////////////////////
      2 //
      3 //  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
      4 //
      5 //  By downloading, copying, installing or using the software you agree to this license.
      6 //  If you do not agree to this license, do not download, install,
      7 //  copy or use the software.
      8 //
      9 //
     10 //                          License Agreement
     11 //                For Open Source Computer Vision Library
     12 //
     13 // Copyright (C) 2000-2008, Intel Corporation, all rights reserved.
     14 // Copyright (C) 2009, Willow Garage Inc., all rights reserved.
     15 // Copyright (C) 2013, OpenCV Foundation, all rights reserved.
     16 // Third party copyrights are property of their respective owners.
     17 //
     18 // Redistribution and use in source and binary forms, with or without modification,
     19 // are permitted provided that the following conditions are met:
     20 //
     21 //   * Redistribution's of source code must retain the above copyright notice,
     22 //     this list of conditions and the following disclaimer.
     23 //
     24 //   * Redistribution's in binary form must reproduce the above copyright notice,
     25 //     this list of conditions and the following disclaimer in the documentation
     26 //     and/or other materials provided with the distribution.
     27 //
     28 //   * The name of the copyright holders may not be used to endorse or promote products
     29 //     derived from this software without specific prior written permission.
     30 //
     31 // This software is provided by the copyright holders and contributors "as is" and
     32 // any express or implied warranties, including, but not limited to, the implied
     33 // warranties of merchantability and fitness for a particular purpose are disclaimed.
     34 // In no event shall the Intel Corporation or contributors be liable for any direct,
     35 // indirect, incidental, special, exemplary, or consequential damages
     36 // (including, but not limited to, procurement of substitute goods or services;
     37 // loss of use, data, or profits; or business interruption) however caused
     38 // and on any theory of liability, whether in contract, strict liability,
     39 // or tort (including negligence or otherwise) arising in any way out of
     40 // the use of this software, even if advised of the possibility of such damage.
     41 //
     42 //M*/
     43 
     44 #include "test_precomp.hpp"
     45 
     46 using namespace cv;
     47 using namespace cv::cuda;
     48 using namespace cv::cudev;
     49 using namespace cvtest;
     50 
     51 typedef ::testing::Types<uchar, ushort, short, int, float> AllTypes;
     52 
     53 ////////////////////////////////////////////////////////////////////////////////
     54 // LessTest
     55 
     56 template <typename T>
     57 class LessTest : public ::testing::Test
     58 {
     59 public:
     60     void test_gpumat_gpumat()
     61     {
     62         const Size size = randomSize(100, 400);
     63         const int type = DataType<T>::type;
     64 
     65         Mat src1 = randomMat(size, type);
     66         Mat src2 = randomMat(size, type);
     67 
     68         GpuMat_<T> d_src1(src1), d_src2(src2);
     69 
     70         GpuMat_<uchar> dst = (d_src1 < d_src2) * 255;
     71 
     72         Mat dst_gold;
     73         cv::compare(src1, src2, dst_gold, CMP_LT);
     74 
     75         EXPECT_MAT_NEAR(dst_gold, dst, 0.0);
     76     }
     77 };
     78 
     79 TYPED_TEST_CASE(LessTest, AllTypes);
     80 
     81 TYPED_TEST(LessTest, GpuMat_GpuMat)
     82 {
     83     LessTest<TypeParam>::test_gpumat_gpumat();
     84 }
     85 
     86 ////////////////////////////////////////////////////////////////////////////////
     87 // MinTest
     88 
     89 template <typename T>
     90 class MinTest : public ::testing::Test
     91 {
     92 public:
     93     void test_gpumat_gpumat()
     94     {
     95         const Size size = randomSize(100, 400);
     96         const int type = DataType<T>::type;
     97 
     98         Mat src1 = randomMat(size, type);
     99         Mat src2 = randomMat(size, type);
    100 
    101         GpuMat_<T> d_src1(src1), d_src2(src2);
    102 
    103         GpuMat_<T> dst = min_(d_src1, d_src2);
    104 
    105         Mat dst_gold;
    106         cv::min(src1, src2, dst_gold);
    107 
    108         EXPECT_MAT_NEAR(dst_gold, dst, 0.0);
    109     }
    110 };
    111 
    112 TYPED_TEST_CASE(MinTest, AllTypes);
    113 
    114 TYPED_TEST(MinTest, GpuMat_GpuMat)
    115 {
    116     MinTest<TypeParam>::test_gpumat_gpumat();
    117 }
    118 
    119 ////////////////////////////////////////////////////////////////////////////////
    120 // ThreshBinaryTest
    121 
    122 typedef ::testing::Types<uchar, short, float> ThreshTypes;
    123 
    124 template <typename T>
    125 class ThreshBinaryTest : public ::testing::Test
    126 {
    127 public:
    128     void test_gpumat()
    129     {
    130         const Size size = randomSize(100, 400);
    131         const int type = DataType<T>::type;
    132 
    133         Mat src = randomMat(size, type);
    134 
    135         GpuMat_<T> d_src(src);
    136 
    137         GpuMat_<T> dst = threshBinary_(d_src, 128, 0);
    138 
    139         Mat dst_gold;
    140         cv::threshold(src, dst_gold, 128, 0, THRESH_BINARY);
    141 
    142         EXPECT_MAT_NEAR(dst_gold, dst, 0.0);
    143     }
    144 };
    145 
    146 TYPED_TEST_CASE(ThreshBinaryTest, ThreshTypes);
    147 
    148 TYPED_TEST(ThreshBinaryTest, GpuMat)
    149 {
    150     ThreshBinaryTest<TypeParam>::test_gpumat();
    151 }
    152