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 // Third party copyrights are property of their respective owners.
16 //
17 // Redistribution and use in source and binary forms, with or without modification,
18 // are permitted provided that the following conditions are met:
19 //
20 //   * Redistribution's of source code must retain the above copyright notice,
21 //     this list of conditions and the following disclaimer.
22 //
23 //   * Redistribution's in binary form must reproduce the above copyright notice,
24 //     this list of conditions and the following disclaimer in the documentation
25 //     and/or other materials provided with the distribution.
26 //
27 //   * The name of the copyright holders may not be used to endorse or promote products
28 //     derived from this software without specific prior written permission.
29 //
30 // This software is provided by the copyright holders and contributors "as is" and
31 // any express or implied warranties, including, but not limited to, the implied
32 // warranties of merchantability and fitness for a particular purpose are disclaimed.
33 // In no event shall the Intel Corporation or contributors be liable for any direct,
34 // indirect, incidental, special, exemplary, or consequential damages
35 // (including, but not limited to, procurement of substitute goods or services;
36 // loss of use, data, or profits; or business interruption) however caused
37 // and on any theory of liability, whether in contract, strict liability,
38 // or tort (including negligence or otherwise) arising in any way out of
39 // the use of this software, even if advised of the possibility of such damage.
40 //
41 //M*/
42 
43 #ifndef _ncvautotestlister_hpp_
44 #define _ncvautotestlister_hpp_
45 
46 #include <vector>
47 
48 #include "NCVTest.hpp"
49 #include "main_test_nvidia.h"
50 
51 class NCVAutoTestLister
52 {
53 public:
54 
NCVAutoTestLister(std::string testSuiteName_,OutputLevel outputLevel_=OutputLevelCompact,NcvBool bStopOnFirstFail_=false)55     NCVAutoTestLister(std::string testSuiteName_, OutputLevel outputLevel_ = OutputLevelCompact, NcvBool bStopOnFirstFail_=false)
56         :
57     testSuiteName(testSuiteName_),
58     outputLevel(outputLevel_),
59     bStopOnFirstFail(bStopOnFirstFail_)
60     {
61     }
62 
add(INCVTest * test)63     void add(INCVTest *test)
64     {
65         this->tests.push_back(test);
66     }
67 
invoke()68     bool invoke()
69     {
70         Ncv32u nPassed = 0;
71         Ncv32u nFailed = 0;
72         Ncv32u nFailedMem = 0;
73 
74         if (outputLevel == OutputLevelCompact)
75         {
76             printf("Test suite '%s' with %d tests\n",
77                 testSuiteName.c_str(),
78                 (int)(this->tests.size()));
79         }
80 
81         for (Ncv32u i=0; i<this->tests.size(); i++)
82         {
83             INCVTest &curTest = *tests[i];
84 
85             NCVTestReport curReport;
86             bool res = curTest.executeTest(curReport);
87 
88             if (outputLevel == OutputLevelFull)
89             {
90                 printf("Test %3i %16s; Consumed mem GPU = %8d, CPU = %8d; %s\n",
91                     i,
92                     curTest.getName().c_str(),
93                     curReport.statsNums["MemGPU"],
94                     curReport.statsNums["MemCPU"],
95                     curReport.statsText["rcode"].c_str());
96             }
97 
98             if (res)
99             {
100                 nPassed++;
101                 if (outputLevel == OutputLevelCompact)
102                 {
103                     printf(".");
104                 }
105             }
106             else
107             {
108                 if (!curReport.statsText["rcode"].compare("FAILED"))
109                 {
110                     nFailed++;
111                     if (outputLevel == OutputLevelCompact)
112                     {
113                         printf("x");
114                     }
115                     if (bStopOnFirstFail)
116                     {
117                         break;
118                     }
119                 }
120                 else
121                 {
122                     nFailedMem++;
123                     if (outputLevel == OutputLevelCompact)
124                     {
125                         printf("m");
126                     }
127                 }
128             }
129             fflush(stdout);
130         }
131         if (outputLevel == OutputLevelCompact)
132         {
133             printf("\n");
134         }
135 
136         if (outputLevel != OutputLevelNone)
137         {
138             printf("Test suite '%s' complete: %d total, %d passed, %d memory errors, %d failed\n\n",
139                 testSuiteName.c_str(),
140                 (int)(this->tests.size()),
141                 nPassed,
142                 nFailedMem,
143                 nFailed);
144         }
145 
146         bool passed = nFailed == 0 && nFailedMem == 0;
147         return passed;
148     }
149 
~NCVAutoTestLister()150     ~NCVAutoTestLister()
151     {
152         for (Ncv32u i=0; i<this->tests.size(); i++)
153         {
154             delete tests[i];
155         }
156     }
157 
158 private:
159 
160     std::string testSuiteName;
161     OutputLevel outputLevel;
162     NcvBool bStopOnFirstFail;
163     std::vector<INCVTest *> tests;
164 };
165 
166 #endif // _ncvautotestlister_hpp_
167