fix Core_MulSpectrum test on 64bit ARM + release mode
authorTomoaki Teshima <tomoaki.teshima@gmail.com>
Fri, 20 May 2016 09:17:22 +0000 (18:17 +0900)
committerAlexander Alekhin <alexander.alekhin@intel.com>
Mon, 21 Nov 2016 11:52:29 +0000 (14:52 +0300)
  * fix issue 6536
  * increase threshold in particular tests due to the difference of fmsub and fsub

modules/core/test/test_dxt.cpp

index 33ddb02..2aaabbf 100644 (file)
@@ -778,6 +778,9 @@ public:
 protected:
     void run_func();
     void prepare_to_validation( int test_case_idx );
+#if defined(__aarch64__) && defined(NDEBUG)
+    double get_success_error_level( int test_case_idx, int i, int j );
+#endif
 };
 
 
@@ -785,6 +788,31 @@ CxCore_MulSpectrumsTest::CxCore_MulSpectrumsTest() : CxCore_DXTBaseTest( true, t
 {
 }
 
+#if defined(__aarch64__) && defined(NDEBUG)
+double CxCore_MulSpectrumsTest::get_success_error_level( int test_case_idx, int i, int j )
+{
+    int elem_depth = CV_MAT_DEPTH(cvGetElemType(test_array[i][j]));
+    if( elem_depth <= CV_32F )
+    {
+        return ArrayTest::get_success_error_level( test_case_idx, i, j );
+    }
+    switch( test_case_idx )
+    {
+        //  Usual threshold is too strict for these test cases due to the difference of fmsub and fsub
+        case 399:
+        case 420:
+            return DBL_EPSILON * 20000;
+        case 65:
+        case 161:
+        case 287:
+        case 351:
+        case 458:
+            return DBL_EPSILON * 10000;
+        default:
+            return ArrayTest::get_success_error_level( test_case_idx, i, j );
+    }
+}
+#endif
 
 void CxCore_MulSpectrumsTest::run_func()
 {