template<typename VectorType> void vectorVisitor(const VectorType& w) { typedef typename VectorType::Scalar Scalar; typedef typename VectorType::Index Index; Index size = w.size(); // construct a random vector where all coefficients are different VectorType v; v = VectorType::Random(size); for(Index i = 0; i < size; i++) for(Index i2 = 0; i2 < i; i2++) while(v(i) == v(i2)) // yes, == v(i) = internal::random<Scalar>(); Scalar minc = v(0), maxc = v(0); Index minidx=0, maxidx=0; for(Index i = 0; i < size; i++) { if(v(i) < minc) { minc = v(i); minidx = i; } if(v(i) > maxc) { maxc = v(i); maxidx = i; } } Index eigen_minidx, eigen_maxidx; Scalar eigen_minc, eigen_maxc; eigen_minc = v.minCoeff(&eigen_minidx); eigen_maxc = v.maxCoeff(&eigen_maxidx); VERIFY(minidx == eigen_minidx); VERIFY(maxidx == eigen_maxidx); VERIFY_IS_APPROX(minc, eigen_minc); VERIFY_IS_APPROX(maxc, eigen_maxc); VERIFY_IS_APPROX(minc, v.minCoeff()); VERIFY_IS_APPROX(maxc, v.maxCoeff()); Index idx0 = internal::random<Index>(0,size-1); Index idx1 = eigen_minidx; Index idx2 = eigen_maxidx; VectorType v1(v), v2(v); v1(idx0) = v1(idx1); v2(idx0) = v2(idx2); v1.minCoeff(&eigen_minidx); v2.maxCoeff(&eigen_maxidx); VERIFY(eigen_minidx == (std::min)(idx0,idx1)); VERIFY(eigen_maxidx == (std::min)(idx0,idx2)); }
template<typename VectorType> void vectorVisitor(const VectorType& w) { typedef typename VectorType::Scalar Scalar; typedef typename VectorType::Index Index; Index size = w.size(); // construct a random vector where all coefficients are different VectorType v; v = VectorType::Random(size); for(Index i = 0; i < size; i++) for(Index i2 = 0; i2 < i; i2++) while(v(i) == v(i2)) // yes, == v(i) = ei_random<Scalar>(); Scalar minc = Scalar(1000), maxc = Scalar(-1000); Index minidx=0,maxidx=0; for(Index i = 0; i < size; i++) { if(v(i) < minc) { minc = v(i); minidx = i; } if(v(i) > maxc) { maxc = v(i); maxidx = i; } } Index eigen_minidx, eigen_maxidx; Scalar eigen_minc, eigen_maxc; eigen_minc = v.minCoeff(&eigen_minidx); eigen_maxc = v.maxCoeff(&eigen_maxidx); VERIFY(minidx == eigen_minidx); VERIFY(maxidx == eigen_maxidx); VERIFY_IS_APPROX(minc, eigen_minc); VERIFY_IS_APPROX(maxc, eigen_maxc); VERIFY_IS_APPROX(minc, v.minCoeff()); VERIFY_IS_APPROX(maxc, v.maxCoeff()); }