MCPcopy Create free account
hub / github.com/avaxman/Directional / comparisons

Function comparisons

external/eigen/test/array_for_matrix.cpp:89–153  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

87}
88
89template<typename MatrixType> void comparisons(const MatrixType& m)
90{
91 using std::abs;
92 typedef typename MatrixType::Scalar Scalar;
93 typedef typename NumTraits<Scalar>::Real RealScalar;
94
95 Index rows = m.rows();
96 Index cols = m.cols();
97
98 Index r = internal::random<Index>(0, rows-1),
99 c = internal::random<Index>(0, cols-1);
100
101 MatrixType m1 = MatrixType::Random(rows, cols),
102 m2 = MatrixType::Random(rows, cols),
103 m3(rows, cols);
104
105 VERIFY(((m1.array() + Scalar(1)) > m1.array()).all());
106 VERIFY(((m1.array() - Scalar(1)) < m1.array()).all());
107 if (rows*cols>1)
108 {
109 m3 = m1;
110 m3(r,c) += 1;
111 VERIFY(! (m1.array() < m3.array()).all() );
112 VERIFY(! (m1.array() > m3.array()).all() );
113 }
114
115 // comparisons to scalar
116 VERIFY( (m1.array() != (m1(r,c)+1) ).any() );
117 VERIFY( (m1.array() > (m1(r,c)-1) ).any() );
118 VERIFY( (m1.array() < (m1(r,c)+1) ).any() );
119 VERIFY( (m1.array() == m1(r,c) ).any() );
120 VERIFY( m1.cwiseEqual(m1(r,c)).any() );
121
122 // test Select
123 VERIFY_IS_APPROX( (m1.array()<m2.array()).select(m1,m2), m1.cwiseMin(m2) );
124 VERIFY_IS_APPROX( (m1.array()>m2.array()).select(m1,m2), m1.cwiseMax(m2) );
125 Scalar mid = (m1.cwiseAbs().minCoeff() + m1.cwiseAbs().maxCoeff())/Scalar(2);
126 for (int j=0; j<cols; ++j)
127 for (int i=0; i<rows; ++i)
128 m3(i,j) = abs(m1(i,j))<mid ? 0 : m1(i,j);
129 VERIFY_IS_APPROX( (m1.array().abs()<MatrixType::Constant(rows,cols,mid).array())
130 .select(MatrixType::Zero(rows,cols),m1), m3);
131 // shorter versions:
132 VERIFY_IS_APPROX( (m1.array().abs()<MatrixType::Constant(rows,cols,mid).array())
133 .select(0,m1), m3);
134 VERIFY_IS_APPROX( (m1.array().abs()>=MatrixType::Constant(rows,cols,mid).array())
135 .select(m1,0), m3);
136 // even shorter version:
137 VERIFY_IS_APPROX( (m1.array().abs()<mid).select(0,m1), m3);
138
139 // count
140 VERIFY(((m1.array().abs()+1)>RealScalar(0.1)).count() == rows*cols);
141
142 // and/or
143 VERIFY( ((m1.array()<RealScalar(0)).matrix() && (m1.array()>RealScalar(0)).matrix()).count() == 0);
144 VERIFY( ((m1.array()<RealScalar(0)).matrix() || (m1.array()>=RealScalar(0)).matrix()).count() == rows*cols);
145 RealScalar a = m1.cwiseAbs().mean();
146 VERIFY( ((m1.array()<-a).matrix() || (m1.array()>a).matrix()).count() == (m1.cwiseAbs().array()>a).count());

Callers 1

EIGEN_DECLARE_TESTFunction · 0.70

Calls 15

selectMethod · 0.80
cwiseMinMethod · 0.80
cwiseMaxMethod · 0.80
colwiseMethod · 0.80
rowwiseMethod · 0.80
absFunction · 0.70
rowsMethod · 0.45
colsMethod · 0.45
allMethod · 0.45
arrayMethod · 0.45
anyMethod · 0.45
minCoeffMethod · 0.45

Tested by

no test coverage detected