void get_timing_test_array_types_and_sizes( int /*test_case_idx*/,
CvSize** sizes, int** types, CvSize** whole_sizes, bool *are_images );
void generate_scalars( int depth );
+ void finalize_scalar( CvScalar& s );
CvScalar alpha, beta, gamma;
int gen_scalars;
bool calc_abs;
}
}
+void CxCore_ArithmTestImpl::finalize_scalar( CvScalar& s )
+{
+ int depth = CV_MAT_DEPTH(test_mat[INPUT][0].type);
+ if( depth < CV_32F )
+ s = cvScalar(cvRound(s.val[0]), cvRound(s.val[1]), cvRound(s.val[2]), cvRound(s.val[3]));
+}
+
void CxCore_ArithmTestImpl::get_test_array_types_and_sizes( int test_case_idx,
CvSize** sizes, int** types )
{
void CxCore_AddSTest::run_func()
{
+ finalize_scalar(gamma);
if(!test_nd)
{
if( test_mat[INPUT][0].cols % 2 == 0 )
void CxCore_SubRSTest::run_func()
{
+ finalize_scalar(gamma);
if(!test_nd)
{
cvSubRS( test_array[INPUT][0], gamma,
void CxCore_AbsDiffSTest::run_func()
{
+ finalize_scalar(gamma);
if(!test_nd)
{
cvAbsDiffS( test_array[INPUT][0], test_array[OUTPUT][0], gamma );
#endif
+
+// reads 16-digit hexadecimal number (i.e. 64-bit integer)
+static int64 read_seed( const char* str )
+{
+ int64 val = 0;
+ if( str && strlen(str) == 16 )
+ {
+ for( int i = 0; str[i]; i++ )
+ {
+ int c = tolower(str[i]);
+ if( !isxdigit(c) )
+ return 0;
+ val = val * 16 +
+ (str[i] < 'a' ? str[i] - '0' : str[i] - 'a' + 10);
+ }
+ }
+ return val;
+}
+
+
/***************************** memory manager *****************************/
typedef struct CvTestAllocBlock
free( ostrm_base_name );
ostrm_base_name = 0;
}
- params.rng_seed = (uint64)-1;
+ params.rng_seed = 0;
params.debug_mode = -1;
params.print_only_failed = 0;
params.skip_header = 0;
params.test_filter_pattern = argv[++i];
params.test_filter_mode = CHOOSE_TESTS;
}
+ else if( strcmp( argv[i], "-seed" ) == 0 )
+ {
+ params.rng_seed = read_seed(argv[++i]);
+ if( params.rng_seed == 0 )
+ fprintf(stderr, "Invalid or zero RNG seed. Will use the seed from the config file or default one\n");
+ }
}
#if 0
if( params.test_case_count_scale <= 0 )
params.test_case_count_scale = 1.;
str = cvReadStringByName( fs, node, "seed", 0 );
- params.rng_seed = 0;
- if( str && strlen(str) == 16 )
- {
- params.rng_seed = 0;
- for( int i = 0; i < 16; i++ )
- {
- int c = tolower(str[i]);
- if( !isxdigit(c) )
- {
- params.rng_seed = 0;
- break;
- }
- params.rng_seed = params.rng_seed * 16 +
- (str[i] < 'a' ? str[i] - '0' : str[i] - 'a' + 10);
- }
- }
+ if( str && params.rng_seed == 0 )
+ params.rng_seed = read_seed(str);
if( params.rng_seed == 0 )
params.rng_seed = cvGetTickCount();