@@ -28,7 +28,13 @@ using std::cout;
2828using std::cerr;
2929using std::endl;
3030
31- void testkdTreeBinning () {
31+ // Returns the number of detected failures (0 on success) so that the caller can
32+ // turn it into a non-zero process exit code: ROOT's Error() only prints, it does
33+ // not by itself make the test fail under ctest.
34+ int testkdTreeBinning ()
35+ {
36+
37+ int nfail = 0 ;
3238
3339 // -----------------------------------------------------------------------------------------------
3440 // C r e a t e r a n d o m s a m p l e
@@ -83,14 +89,22 @@ void testkdTreeBinning() {
8389 std::cout << " Bin with minimum density: " << ibinMin << " density = " << kdBins->GetBinDensity (ibinMin) << " content = " << kdBins->GetBinContent (ibinMin) << std::endl;
8490 std::cout << " Bin with maximum density: " << ibinMax << " density = " << kdBins->GetBinDensity (ibinMax) << " content = " << kdBins->GetBinContent (ibinMax) << std::endl;
8591
86- if (kdBins->GetBinContent (ibinMax) != DATASZ / NBINS )
92+ if (kdBins->GetBinContent (ibinMax) != DATASZ / NBINS ) {
8793 Error (" testkdTreeBinning" ," Wrong bin content" );
94+ ++nfail;
95+ }
8896
8997 // order bins by density
9098 kdBins->SortBinsByDensity (true );
9199
92- if (kdBins->GetBinMinDensity () != 0 ) Error (" testkdTreeBinning" ," Wrong minimum bin after sorting" );
93- if (kdBins->GetBinMaxDensity () != nbins-1 ) Error (" testkdTreeBinning" ," Wrong maximum bin after sorting" );
100+ if (kdBins->GetBinMinDensity () != 0 ) {
101+ Error (" testkdTreeBinning" , " Wrong minimum bin after sorting" );
102+ ++nfail;
103+ }
104+ if (kdBins->GetBinMaxDensity () != nbins - 1 ) {
105+ Error (" testkdTreeBinning" , " Wrong maximum bin after sorting" );
106+ ++nfail;
107+ }
94108
95109 if (showGraphics) {
96110 new TCanvas ();
@@ -104,7 +118,6 @@ void testkdTreeBinning() {
104118 double point[2 ] = {0 ,0 };
105119// double binCenter[2];
106120 gRandom ->SetSeed (0 );
107- bool ok = true ;
108121 for (int itimes = 0 ; itimes < ntimes; itimes++) {
109122
110123 // generate a random point in 2D
@@ -126,12 +139,12 @@ void testkdTreeBinning() {
126139 std::cout << " point y " << point[1 ] << " BIN CENTER is " << binCenter[1 ] << " min " << binMin[1 ] << " max " << binMax[1 ] << std::endl;
127140 }
128141
129- ok &= point[0 ] > binMin[0 ] && point[0 ] < binMax[0 ];
130- ok &= point[1 ] > binMin[1 ] && point[1 ] < binMax[1 ];
142+ bool ok = point[0 ] > binMin[0 ] && point[0 ] < binMax[0 ] && point[1 ] > binMin[1 ] && point[1 ] < binMax[1 ];
131143 if (!ok) {
132144 Error (" testkdTreeBinning::FindBin" ," Point is not in the right bin " );
133145 std::cout << " point x " << point[0 ] << " BIN CENTER is " << binCenter[0 ] << " min " << binMin[0 ] << " max " << binMax[0 ] << std::endl;
134146 std::cout << " point y " << point[1 ] << " BIN CENTER is " << binCenter[1 ] << " min " << binMin[1 ] << " max " << binMax[1 ] << std::endl;
147+ ++nfail;
135148 }
136149
137150 if (itimes < 2 && showGraphics ) {
@@ -143,15 +156,13 @@ void testkdTreeBinning() {
143156 }
144157
145158 delete [] binCenter;
146- }
147- else
159+ } else {
148160 Error (" testkdTreeBinning::FindBin" ," Bin %d is not existing " ,ibin);
149-
150-
161+ ++nfail;
162+ }
151163 }
152164
153- return ;
154-
165+ return nfail;
155166}
156167
157168int main (int argc, char **argv)
@@ -180,7 +191,7 @@ int main(int argc, char **argv)
180191 if ( showGraphics )
181192 theApp = new TApplication (" App" ,&argc,argv);
182193
183- testkdTreeBinning ();
194+ int nfail = testkdTreeBinning ();
184195
185196 if ( showGraphics )
186197 {
@@ -189,7 +200,6 @@ int main(int argc, char **argv)
189200 theApp = nullptr ;
190201 }
191202
192- return 0 ;
193-
203+ return nfail;
194204}
195205
0 commit comments