int CV_MHIGlobalOrientTest::validate_test_results( int test_case_idx ) { double ref_angle = cvTsCalcGlobalOrientation( &test_mat[INPUT][2], &test_mat[INPUT][1], &test_mat[INPUT][0], timestamp, duration ); double err_level = get_success_error_level( test_case_idx, 0, 0 ); int code = CvTS::OK; int nz = cvCountNonZero( test_array[INPUT][1] ); if( nz > 32 && !(min_angle - err_level <= angle && max_angle + err_level >= angle) && !(min_angle - err_level <= angle+360 && max_angle + err_level >= angle+360) ) { ts->printf( CvTS::LOG, "The angle=%g is outside (%g,%g) range\n", angle, min_angle - err_level, max_angle + err_level ); code = CvTS::FAIL_BAD_ACCURACY; } else if( fabs(angle - ref_angle) > err_level && fabs(360 - fabs(angle - ref_angle)) > err_level ) { ts->printf( CvTS::LOG, "The angle=%g differs too much from reference value=%g\n", angle, ref_angle ); code = CvTS::FAIL_BAD_ACCURACY; } if( code < 0 ) ts->set_failed_test_info( code ); return code; }
int ArrayTest::validate_test_results( int test_case_idx ) { static const char* arr_names[] = { "input", "input/output", "output", "ref input/output", "ref output", "temporary", "mask" }; size_t i, j; prepare_to_validation( test_case_idx ); for( i = 0; i < 2; i++ ) { int i0 = i == 0 ? OUTPUT : INPUT_OUTPUT; int i1 = i == 0 ? REF_OUTPUT : REF_INPUT_OUTPUT; size_t sizei = test_array[i0].size(); assert( sizei == test_array[i1].size() ); for( j = 0; j < sizei; j++ ) { double err_level; int code; if( !test_array[i1][j] ) continue; err_level = get_success_error_level( test_case_idx, i0, (int)j ); code = cmpEps2(ts, test_mat[i0][j], test_mat[i1][j], err_level, element_wise_relative_error, arr_names[i0]); if (code == 0) continue; for( i0 = 0; i0 < (int)test_array.size(); i0++ ) { size_t sizei0 = test_array[i0].size(); if( i0 == REF_INPUT_OUTPUT || i0 == OUTPUT || i0 == TEMP ) continue; for( i1 = 0; i1 < (int)sizei0; i1++ ) { const Mat& arr = test_mat[i0][i1]; if( !arr.empty() ) { string sizestr = vec2str(", ", &arr.size[0], arr.dims); ts->printf( TS::LOG, "%s array %d type=%sC%d, size=(%s)\n", arr_names[i0], i1, getTypeName(arr.depth()), arr.channels(), sizestr.c_str() ); } } } ts->set_failed_test_info( code ); return code; } } return 0; }
int CvArrTest::validate_test_results( int test_case_idx ) { static const char* arr_names[] = { "input", "input/output", "output", "ref input/output", "ref output", "temporary", "mask" }; int i, j; prepare_to_validation( test_case_idx ); for( i = 0; i < 2; i++ ) { int i0 = i == 0 ? OUTPUT : INPUT_OUTPUT; int i1 = i == 0 ? REF_OUTPUT : REF_INPUT_OUTPUT; int count = test_array[i0].size(); assert( count == test_array[i1].size() ); for( j = 0; j < count; j++ ) { double err_level; CvPoint idx = {0,0}; double max_diff = 0; int code; char msg[100]; if( !test_array[i1][j] ) continue; err_level = get_success_error_level( test_case_idx, i0, j ); code = cvTsCmpEps( &test_mat[i0][j], &test_mat[i1][j], &max_diff, err_level, &idx, element_wise_relative_error ); switch( code ) { case -1: sprintf( msg, "Too big difference (=%g)", max_diff ); code = CvTS::FAIL_BAD_ACCURACY; break; case -2: strcpy( msg, "Invalid output" ); code = CvTS::FAIL_INVALID_OUTPUT; break; case -3: strcpy( msg, "Invalid output in the reference array" ); code = CvTS::FAIL_INVALID_OUTPUT; break; default: continue; } ts->printf( CvTS::LOG, "%s in %s array %d at (%d,%d)\n", msg, arr_names[i0], j, idx.x, idx.y ); for( i0 = 0; i0 < max_arr; i0++ ) { int count = test_array[i0].size(); if( i0 == REF_INPUT_OUTPUT || i0 == OUTPUT || i0 == TEMP ) continue; for( i1 = 0; i1 < count; i1++ ) { CvArr* arr = test_array[i0][i1]; if( arr ) { CvSize size = cvGetSize(arr); int type = cvGetElemType(arr); ts->printf( CvTS::LOG, "%s array %d type=%sC%d, size=(%d,%d)\n", arr_names[i0], i1, cvTsGetTypeName(type), CV_MAT_CN(type), size.width, size.height ); } } } ts->set_failed_test_info( code ); return code; } } return 0; }