mirror of
https://gitlab.com/libeigen/eigen.git
synced 2025-04-20 08:39:37 +08:00
Add unit tests for bug #981: valid and invalid usage of ternary operator
This commit is contained in:
parent
84e0c27b61
commit
680d318352
@ -41,6 +41,9 @@ ei_add_failtest("ref_5")
|
|||||||
ei_add_failtest("swap_1")
|
ei_add_failtest("swap_1")
|
||||||
ei_add_failtest("swap_2")
|
ei_add_failtest("swap_2")
|
||||||
|
|
||||||
|
ei_add_failtest("ternary_1")
|
||||||
|
ei_add_failtest("ternary_2")
|
||||||
|
|
||||||
ei_add_failtest("sparse_ref_1")
|
ei_add_failtest("sparse_ref_1")
|
||||||
ei_add_failtest("sparse_ref_2")
|
ei_add_failtest("sparse_ref_2")
|
||||||
ei_add_failtest("sparse_ref_3")
|
ei_add_failtest("sparse_ref_3")
|
||||||
|
13
failtest/ternary_1.cpp
Normal file
13
failtest/ternary_1.cpp
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
#include "../Eigen/Core"
|
||||||
|
|
||||||
|
using namespace Eigen;
|
||||||
|
|
||||||
|
int main(int argc,char **)
|
||||||
|
{
|
||||||
|
VectorXf a(10), b(10);
|
||||||
|
#ifdef EIGEN_SHOULD_FAIL_TO_BUILD
|
||||||
|
b = argc>1 ? 2*a : -a;
|
||||||
|
#else
|
||||||
|
b = argc>1 ? 2*a : VectorXf(-a);
|
||||||
|
#endif
|
||||||
|
}
|
13
failtest/ternary_2.cpp
Normal file
13
failtest/ternary_2.cpp
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
#include "../Eigen/Core"
|
||||||
|
|
||||||
|
using namespace Eigen;
|
||||||
|
|
||||||
|
int main(int argc,char **)
|
||||||
|
{
|
||||||
|
VectorXf a(10), b(10);
|
||||||
|
#ifdef EIGEN_SHOULD_FAIL_TO_BUILD
|
||||||
|
b = argc>1 ? 2*a : a+a;
|
||||||
|
#else
|
||||||
|
b = argc>1 ? VectorXf(2*a) : VectorXf(a+a);
|
||||||
|
#endif
|
||||||
|
}
|
@ -126,6 +126,20 @@ template<typename MatrixType> void basicStuff(const MatrixType& m)
|
|||||||
for(typename MatrixType::Index i=0;i<rows;++i)
|
for(typename MatrixType::Index i=0;i<rows;++i)
|
||||||
sm2.col(i).noalias() -= sm1.row(i);
|
sm2.col(i).noalias() -= sm1.row(i);
|
||||||
VERIFY_IS_APPROX(sm2,-sm1.transpose());
|
VERIFY_IS_APPROX(sm2,-sm1.transpose());
|
||||||
|
|
||||||
|
// check ternary usage
|
||||||
|
{
|
||||||
|
bool b = internal::random<int>(0,10)>5;
|
||||||
|
m3 = b ? m1 : m2;
|
||||||
|
if(b) VERIFY_IS_APPROX(m3,m1);
|
||||||
|
else VERIFY_IS_APPROX(m3,m2);
|
||||||
|
m3 = b ? -m1 : m2;
|
||||||
|
if(b) VERIFY_IS_APPROX(m3,-m1);
|
||||||
|
else VERIFY_IS_APPROX(m3,m2);
|
||||||
|
m3 = b ? m1 : -m2;
|
||||||
|
if(b) VERIFY_IS_APPROX(m3,m1);
|
||||||
|
else VERIFY_IS_APPROX(m3,-m2);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename MatrixType> void basicStuffComplex(const MatrixType& m)
|
template<typename MatrixType> void basicStuffComplex(const MatrixType& m)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user