test: fix RNG problem in accuracy tests
authorAlexander Alekhin <alexander.alekhin@intel.com>
Mon, 12 Dec 2016 11:22:52 +0000 (14:22 +0300)
committerAlexander Alekhin <alexander.alekhin@intel.com>
Mon, 12 Dec 2016 11:40:52 +0000 (14:40 +0300)
modules/ts/include/opencv2/ts.hpp
modules/ts/include/opencv2/ts/ts_ext.hpp
modules/ts/src/ts.cpp
modules/ts/src/ts_perf.cpp

index 28a071a..c573905 100644 (file)
@@ -539,11 +539,13 @@ protected:
     }
 };
 
+extern uint64 param_seed;
+
 struct CV_EXPORTS DefaultRngAuto
 {
     const uint64 old_state;
 
-    DefaultRngAuto() : old_state(cv::theRNG().state) { cv::theRNG().state = (uint64)-1; }
+    DefaultRngAuto() : old_state(cv::theRNG().state) { cv::theRNG().state = cvtest::param_seed; }
     ~DefaultRngAuto() { cv::theRNG().state = old_state; }
 
     DefaultRngAuto& operator=(const DefaultRngAuto&);
index 781b61e..05ccc63 100644 (file)
@@ -12,7 +12,9 @@ namespace cvtest {
 void checkIppStatus();
 }
 
-#define CV_TEST_INIT cv::ipp::setIppStatus(0);
+#define CV_TEST_INIT \
+    cv::ipp::setIppStatus(0); \
+    cv::theRNG().state = cvtest::param_seed;
 #define CV_TEST_CLEANUP ::cvtest::checkIppStatus();
 #define CV_TEST_BODY_IMPL \
     { \
index c60e5d6..b2763d4 100644 (file)
@@ -80,6 +80,8 @@
 namespace cvtest
 {
 
+uint64 param_seed = 0x12345678; // real value is passed via parseCustomOptions function
+
 static std::string path_join(const std::string& prefix, const std::string& subpath)
 {
     CV_Assert(subpath.empty() || subpath[0] != '/');
@@ -695,6 +697,7 @@ void parseCustomOptions(int argc, char **argv)
 {
     const char * const command_line_keys =
         "{ ipp test_ipp_check |false    |check whether IPP works without failures }"
+        "{ test_seed          |809564   |seed for random numbers generator }"
         "{ h   help           |false    |print help info                          }";
 
     cv::CommandLineParser parser(argc, argv, command_line_keys);
@@ -711,6 +714,8 @@ void parseCustomOptions(int argc, char **argv)
 #else
         test_ipp_check = false;
 #endif
+
+    param_seed = parser.get<unsigned int>("test_seed");
 }
 
 
index f496774..84ce5d6 100644 (file)
@@ -38,7 +38,6 @@ static double       param_max_outliers;
 static double       param_max_deviation;
 static unsigned int param_min_samples;
 static unsigned int param_force_samples;
-static uint64       param_seed;
 static double       param_time_limit;
 static int          param_threads;
 static bool         param_write_sanity;