fixed a bug which caused incorrect work of function eigen()

pull/13383/head
Alexander Reshetnikov 13 years ago
parent 3c645ae20c
commit 951a3d6c7a
  1. 2
      modules/core/src/lapack.cpp
  2. 32
      modules/core/test/test_eigen.cpp

@ -278,7 +278,7 @@ JacobiImpl_( _Tp* A, size_t astep, _Tp* W, _Tp* V, size_t vstep, int n, uchar* b
} }
} }
for( iters = 0; iters < maxIters; iters++ ) if( n > 1 ) for( iters = 0; iters < maxIters; iters++ )
{ {
// find index (k,l) of pivot p // find index (k,l) of pivot p
for( k = 0, mv = maxSR[0], i = 1; i < n-1; i++ ) for( k = 0, mv = maxSR[0], i = 1; i < n-1; i++ )

@ -98,18 +98,26 @@ Core_EigenTest_Scalar_64::~Core_EigenTest_Scalar_64() {}
void Core_EigenTest_Scalar_32::run(int) void Core_EigenTest_Scalar_32::run(int)
{ {
float value = cv::randu<float>(); const size_t MATRIX_COUNT = 500;
cv::Mat src(1, 1, CV_32FC1, Scalar::all((float)value)); for (size_t i = 0; i < MATRIX_COUNT; ++i)
test_values(src); {
src.~Mat(); float value = cv::randu<float>();
cv::Mat src(1, 1, CV_32FC1, Scalar::all((float)value));
test_values(src);
src.~Mat();
}
} }
void Core_EigenTest_Scalar_64::run(int) void Core_EigenTest_Scalar_64::run(int)
{ {
float value = cv::randu<float>(); const size_t MATRIX_COUNT = 500;
cv::Mat src(1, 1, CV_64FC1, Scalar::all((double)value)); for (size_t i = 0; i < MATRIX_COUNT; ++i)
test_values(src); {
src.~Mat(); float value = cv::randu<float>();
cv::Mat src(1, 1, CV_64FC1, Scalar::all((double)value));
test_values(src);
src.~Mat();
}
} }
void Core_EigenTest_32::run(int) { check_full(CV_32FC1); } void Core_EigenTest_32::run(int) { check_full(CV_32FC1); }
@ -358,7 +366,7 @@ bool Core_EigenTest::check_full(int type)
return true; return true;
} }
// TEST(Core_Eigen_Scalar_32, accuracy) {Core_EigenTest_Scalar_32 test; test.safe_run(); } TEST(Core_Eigen, scalar_32) {Core_EigenTest_Scalar_32 test; test.safe_run(); }
// TEST(Core_Eigen_Scalar_64, accuracy) {Core_EigenTest_Scalar_64 test; test.safe_run(); } TEST(Core_Eigen, scalar_64) {Core_EigenTest_Scalar_64 test; test.safe_run(); }
TEST(Core_Eigen_32, accuracy) { Core_EigenTest_32 test; test.safe_run(); } TEST(Core_Eigen, vector_32) { Core_EigenTest_32 test; test.safe_run(); }
TEST(Core_Eigen_64, accuracy) { Core_EigenTest_64 test; test.safe_run(); } TEST(Core_Eigen, vector_64) { Core_EigenTest_64 test; test.safe_run(); }

Loading…
Cancel
Save