mirror of
https://gitlab.com/libeigen/eigen.git
synced 2025-04-22 09:39:34 +08:00
More debug info and use lazyProd instead of operator* to query the right flags
This commit is contained in:
parent
f74ed34539
commit
a395024d44
@ -27,19 +27,43 @@ std::string demangle_unrolling(int t)
|
|||||||
if(t==CompleteUnrolling) return "CompleteUnrolling";
|
if(t==CompleteUnrolling) return "CompleteUnrolling";
|
||||||
return "?";
|
return "?";
|
||||||
}
|
}
|
||||||
|
std::string demangle_flags(int f)
|
||||||
|
{
|
||||||
|
std::string res;
|
||||||
|
if(f&RowMajorBit) res += " | RowMajor";
|
||||||
|
if(f&PacketAccessBit) res += " | Packet";
|
||||||
|
if(f&LinearAccessBit) res += " | Linear";
|
||||||
|
if(f&LvalueBit) res += " | Lvalue";
|
||||||
|
if(f&DirectAccessBit) res += " | Direct";
|
||||||
|
if(f&AlignedBit) res += " | Aligned";
|
||||||
|
if(f&NestByRefBit) res += " | NestByRef";
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
template<typename Dst, typename Src>
|
template<typename Dst, typename Src>
|
||||||
bool test_assign(const Dst&, const Src&, int traversal, int unrolling)
|
bool test_assign(const Dst&, const Src&, int traversal, int unrolling)
|
||||||
{
|
{
|
||||||
internal::assign_traits<Dst,Src>::debug();
|
#ifdef EIGEN_TEST_EVALUATORS
|
||||||
bool res = internal::assign_traits<Dst,Src>::Traversal==traversal
|
typedef internal::copy_using_evaluator_traits<internal::evaluator<Dst>,internal::evaluator<Src>, internal::assign_op<typename Dst::Scalar> > traits;
|
||||||
&& internal::assign_traits<Dst,Src>::Unrolling==unrolling;
|
#else
|
||||||
|
typedef internal::assign_traits<Dst,Src> traits;
|
||||||
|
#endif
|
||||||
|
bool res = traits::Traversal==traversal && traits::Unrolling==unrolling;
|
||||||
if(!res)
|
if(!res)
|
||||||
{
|
{
|
||||||
|
std::cerr << "Src: " << demangle_flags(Src::Flags) << std::endl;
|
||||||
|
#ifdef EIGEN_TEST_EVALUATORS
|
||||||
|
std::cerr << " " << demangle_flags(internal::evaluator<Src>::Flags) << std::endl;
|
||||||
|
#endif
|
||||||
|
std::cerr << "Dst: " << demangle_flags(Dst::Flags) << std::endl;
|
||||||
|
#ifdef EIGEN_TEST_EVALUATORS
|
||||||
|
std::cerr << " " << demangle_flags(internal::evaluator<Dst>::Flags) << std::endl;
|
||||||
|
#endif
|
||||||
|
traits::debug();
|
||||||
std::cerr << " Expected Traversal == " << demangle_traversal(traversal)
|
std::cerr << " Expected Traversal == " << demangle_traversal(traversal)
|
||||||
<< " got " << demangle_traversal(internal::assign_traits<Dst,Src>::Traversal) << "\n";
|
<< " got " << demangle_traversal(traits::Traversal) << "\n";
|
||||||
std::cerr << " Expected Unrolling == " << demangle_unrolling(unrolling)
|
std::cerr << " Expected Unrolling == " << demangle_unrolling(unrolling)
|
||||||
<< " got " << demangle_unrolling(internal::assign_traits<Dst,Src>::Unrolling) << "\n";
|
<< " got " << demangle_unrolling(traits::Unrolling) << "\n";
|
||||||
}
|
}
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
@ -47,15 +71,27 @@ bool test_assign(const Dst&, const Src&, int traversal, int unrolling)
|
|||||||
template<typename Dst, typename Src>
|
template<typename Dst, typename Src>
|
||||||
bool test_assign(int traversal, int unrolling)
|
bool test_assign(int traversal, int unrolling)
|
||||||
{
|
{
|
||||||
internal::assign_traits<Dst,Src>::debug();
|
#ifdef EIGEN_TEST_EVALUATORS
|
||||||
bool res = internal::assign_traits<Dst,Src>::Traversal==traversal
|
typedef internal::copy_using_evaluator_traits<internal::evaluator<Dst>,internal::evaluator<Src>, internal::assign_op<typename Dst::Scalar> > traits;
|
||||||
&& internal::assign_traits<Dst,Src>::Unrolling==unrolling;
|
#else
|
||||||
|
typedef internal::assign_traits<Dst,Src> traits;
|
||||||
|
#endif
|
||||||
|
bool res = traits::Traversal==traversal && traits::Unrolling==unrolling;
|
||||||
if(!res)
|
if(!res)
|
||||||
{
|
{
|
||||||
|
std::cerr << "Src: " << demangle_flags(Src::Flags) << std::endl;
|
||||||
|
#ifdef EIGEN_TEST_EVALUATORS
|
||||||
|
std::cerr << " " << demangle_flags(internal::evaluator<Src>::Flags) << std::endl;
|
||||||
|
#endif
|
||||||
|
std::cerr << "Dst: " << demangle_flags(Dst::Flags) << std::endl;
|
||||||
|
#ifdef EIGEN_TEST_EVALUATORS
|
||||||
|
std::cerr << " " << demangle_flags(internal::evaluator<Dst>::Flags) << std::endl;
|
||||||
|
#endif
|
||||||
|
traits::debug();
|
||||||
std::cerr << " Expected Traversal == " << demangle_traversal(traversal)
|
std::cerr << " Expected Traversal == " << demangle_traversal(traversal)
|
||||||
<< " got " << demangle_traversal(internal::assign_traits<Dst,Src>::Traversal) << "\n";
|
<< " got " << demangle_traversal(traits::Traversal) << "\n";
|
||||||
std::cerr << " Expected Unrolling == " << demangle_unrolling(unrolling)
|
std::cerr << " Expected Unrolling == " << demangle_unrolling(unrolling)
|
||||||
<< " got " << demangle_unrolling(internal::assign_traits<Dst,Src>::Unrolling) << "\n";
|
<< " got " << demangle_unrolling(traits::Unrolling) << "\n";
|
||||||
}
|
}
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
@ -63,10 +99,21 @@ bool test_assign(int traversal, int unrolling)
|
|||||||
template<typename Xpr>
|
template<typename Xpr>
|
||||||
bool test_redux(const Xpr&, int traversal, int unrolling)
|
bool test_redux(const Xpr&, int traversal, int unrolling)
|
||||||
{
|
{
|
||||||
|
#ifdef EIGEN_TEST_EVALUATORS
|
||||||
|
typedef internal::redux_traits<internal::scalar_sum_op<typename Xpr::Scalar>,internal::redux_evaluator<Xpr> > traits;
|
||||||
|
#else
|
||||||
typedef internal::redux_traits<internal::scalar_sum_op<typename Xpr::Scalar>,Xpr> traits;
|
typedef internal::redux_traits<internal::scalar_sum_op<typename Xpr::Scalar>,Xpr> traits;
|
||||||
|
#endif
|
||||||
|
|
||||||
bool res = traits::Traversal==traversal && traits::Unrolling==unrolling;
|
bool res = traits::Traversal==traversal && traits::Unrolling==unrolling;
|
||||||
if(!res)
|
if(!res)
|
||||||
{
|
{
|
||||||
|
std::cerr << demangle_flags(Xpr::Flags) << std::endl;
|
||||||
|
#ifdef EIGEN_TEST_EVALUATORS
|
||||||
|
std::cerr << demangle_flags(internal::evaluator<Xpr>::Flags) << std::endl;
|
||||||
|
#endif
|
||||||
|
traits::debug();
|
||||||
|
|
||||||
std::cerr << " Expected Traversal == " << demangle_traversal(traversal)
|
std::cerr << " Expected Traversal == " << demangle_traversal(traversal)
|
||||||
<< " got " << demangle_traversal(traits::Traversal) << "\n";
|
<< " got " << demangle_traversal(traits::Traversal) << "\n";
|
||||||
std::cerr << " Expected Unrolling == " << demangle_unrolling(unrolling)
|
std::cerr << " Expected Unrolling == " << demangle_unrolling(unrolling)
|
||||||
@ -185,7 +232,7 @@ template<typename Scalar, bool Enable = internal::packet_traits<Scalar>::Vectori
|
|||||||
Matrix22
|
Matrix22
|
||||||
>(DefaultTraversal,CompleteUnrolling)));
|
>(DefaultTraversal,CompleteUnrolling)));
|
||||||
|
|
||||||
VERIFY((test_assign(Matrix11(), Matrix11()*Matrix11(), InnerVectorizedTraversal, CompleteUnrolling)));
|
VERIFY((test_assign(Matrix11(), Matrix11().lazyProduct(Matrix11()), InnerVectorizedTraversal, CompleteUnrolling)));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
VERIFY(test_assign(MatrixXX(10,10),MatrixXX(20,20).block(10,10,2,3),
|
VERIFY(test_assign(MatrixXX(10,10),MatrixXX(20,20).block(10,10,2,3),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user