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