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 //                        Intel License Agreement
     11 //                For Open Source Computer Vision Library
     12 //
     13 // Copyright (C) 2000, Intel Corporation, all rights reserved.
     14 // Third party copyrights are property of their respective owners.
     15 //
     16 // Redistribution and use in source and binary forms, with or without modification,
     17 // are permitted provided that the following conditions are met:
     18 //
     19 //   * Redistribution's of source code must retain the above copyright notice,
     20 //     this list of conditions and the following disclaimer.
     21 //
     22 //   * Redistribution's in binary form must reproduce the above copyright notice,
     23 //     this list of conditions and the following disclaimer in the documentation
     24 //     and/or other materials provided with the distribution.
     25 //
     26 //   * The name of Intel Corporation may not be used to endorse or promote products
     27 //     derived from this software without specific prior written permission.
     28 //
     29 // This software is provided by the copyright holders and contributors "as is" and
     30 // any express or implied warranties, including, but not limited to, the implied
     31 // warranties of merchantability and fitness for a particular purpose are disclaimed.
     32 // In no event shall the Intel Corporation or contributors be liable for any direct,
     33 // indirect, incidental, special, exemplary, or consequential damages
     34 // (including, but not limited to, procurement of substitute goods or services;
     35 // loss of use, data, or profits; or business interruption) however caused
     36 // and on any theory of liability, whether in contract, strict liability,
     37 // or tort (including negligence or otherwise) arising in any way out of
     38 // the use of this software, even if advised of the possibility of such damage.
     39 //
     40 //M*/
     41 
     42 #include "test_precomp.hpp"
     43 
     44 using namespace cv;
     45 using namespace std;
     46 
     47 class Core_ConcatenationTest : public cvtest::BaseTest
     48 {
     49 public:
     50     Core_ConcatenationTest(bool horizontal, bool firstEmpty, bool secondEmpty);
     51 protected:
     52     int prepare_test_case( int );
     53     void run_func();
     54     int validate_test_results( int );
     55 
     56     Mat mat0x5;
     57     Mat mat10x5;
     58     Mat mat20x5;
     59 
     60     Mat mat5x0;
     61     Mat mat5x10;
     62     Mat mat5x20;
     63 
     64     Mat result;
     65 
     66     bool horizontal;
     67     bool firstEmpty;
     68     bool secondEmpty;
     69 
     70 private:
     71     static bool areEqual(const Mat& m1, const Mat& m2);
     72 
     73 };
     74 
     75 Core_ConcatenationTest::Core_ConcatenationTest(bool horizontal_, bool firstEmpty_, bool secondEmpty_)
     76     : horizontal(horizontal_)
     77     , firstEmpty(firstEmpty_)
     78     , secondEmpty(secondEmpty_)
     79 {
     80     test_case_count = 1;
     81 
     82     mat0x5 = Mat::ones(0,5, CV_8U);
     83     mat10x5 = Mat::ones(10,5, CV_8U);
     84     mat20x5 = Mat::ones(20,5, CV_8U);
     85 
     86     mat5x0 = Mat::ones(5,0, CV_8U);
     87     mat5x10 = Mat::ones(5,10, CV_8U);
     88     mat5x20 = Mat::ones(5,20, CV_8U);
     89 }
     90 
     91 int Core_ConcatenationTest::prepare_test_case( int test_case_idx )
     92 {
     93     cvtest::BaseTest::prepare_test_case( test_case_idx );
     94     return 1;
     95 }
     96 
     97 void Core_ConcatenationTest::run_func()
     98 {
     99     if (horizontal)
    100     {
    101         cv::hconcat((firstEmpty ? mat5x0 : mat5x10),
    102                     (secondEmpty ? mat5x0 : mat5x10),
    103                     result);
    104     } else {
    105         cv::vconcat((firstEmpty ? mat0x5 : mat10x5),
    106                     (secondEmpty ? mat0x5 : mat10x5),
    107                     result);
    108     }
    109 }
    110 
    111 int Core_ConcatenationTest::validate_test_results( int )
    112 {
    113     Mat expected;
    114 
    115     if (firstEmpty && secondEmpty)
    116         expected = (horizontal ? mat5x0 : mat0x5);
    117     else if ((firstEmpty && !secondEmpty) || (!firstEmpty && secondEmpty))
    118         expected = (horizontal ? mat5x10 : mat10x5);
    119     else
    120         expected = (horizontal ? mat5x20 : mat20x5);
    121 
    122     if (areEqual(expected, result))
    123     {
    124         return cvtest::TS::OK;
    125     } else
    126     {
    127         ts->printf( cvtest::TS::LOG, "Concatenation failed");
    128         ts->set_failed_test_info( cvtest::TS::FAIL_MISMATCH );
    129     }
    130 
    131     return cvtest::TS::OK;
    132 }
    133 
    134 bool Core_ConcatenationTest::areEqual(const Mat &m1, const Mat &m2)
    135 {
    136     return m1.size() == m2.size()
    137             && m1.type() == m2.type()
    138             && countNonZero(m1 != m2) == 0;
    139 }
    140 
    141 TEST(Core_Concatenation, hconcat_empty_nonempty) { Core_ConcatenationTest test(true, true, false); test.safe_run(); }
    142 TEST(Core_Concatenation, hconcat_nonempty_empty) { Core_ConcatenationTest test(true, false, true); test.safe_run(); }
    143 TEST(Core_Concatenation, hconcat_empty_empty) { Core_ConcatenationTest test(true, true, true); test.safe_run(); }
    144 
    145 TEST(Core_Concatenation, vconcat_empty_nonempty) { Core_ConcatenationTest test(false, true, false); test.safe_run(); }
    146 TEST(Core_Concatenation, vconcat_nonempty_empty) { Core_ConcatenationTest test(false, false, true); test.safe_run(); }
    147 TEST(Core_Concatenation, vconcat_empty_empty) { Core_ConcatenationTest test(false, true, true); test.safe_run(); }
    148