| 176 | |
| 177 | |
| 178 | template<typename MatrixType> void triangular_rect(const MatrixType& m) |
| 179 | { |
| 180 | typedef typename MatrixType::Scalar Scalar; |
| 181 | typedef typename NumTraits<Scalar>::Real RealScalar; |
| 182 | enum { Rows = MatrixType::RowsAtCompileTime, Cols = MatrixType::ColsAtCompileTime }; |
| 183 | |
| 184 | Index rows = m.rows(); |
| 185 | Index cols = m.cols(); |
| 186 | |
| 187 | MatrixType m1 = MatrixType::Random(rows, cols), |
| 188 | m2 = MatrixType::Random(rows, cols), |
| 189 | m3(rows, cols), |
| 190 | m4(rows, cols), |
| 191 | r1(rows, cols), |
| 192 | r2(rows, cols); |
| 193 | |
| 194 | MatrixType m1up = m1.template triangularView<Upper>(); |
| 195 | MatrixType m2up = m2.template triangularView<Upper>(); |
| 196 | |
| 197 | if (rows>1 && cols>1) |
| 198 | { |
| 199 | VERIFY(m1up.isUpperTriangular()); |
| 200 | VERIFY(m2up.transpose().isLowerTriangular()); |
| 201 | VERIFY(!m2.isLowerTriangular()); |
| 202 | } |
| 203 | |
| 204 | // test overloaded operator+= |
| 205 | r1.setZero(); |
| 206 | r2.setZero(); |
| 207 | r1.template triangularView<Upper>() += m1; |
| 208 | r2 += m1up; |
| 209 | VERIFY_IS_APPROX(r1,r2); |
| 210 | |
| 211 | // test overloaded operator= |
| 212 | m1.setZero(); |
| 213 | m1.template triangularView<Upper>() = 3 * m2; |
| 214 | m3 = 3 * m2; |
| 215 | VERIFY_IS_APPROX(m3.template triangularView<Upper>().toDenseMatrix(), m1); |
| 216 | |
| 217 | |
| 218 | m1.setZero(); |
| 219 | m1.template triangularView<Lower>() = 3 * m2; |
| 220 | VERIFY_IS_APPROX(m3.template triangularView<Lower>().toDenseMatrix(), m1); |
| 221 | |
| 222 | m1.setZero(); |
| 223 | m1.template triangularView<StrictlyUpper>() = 3 * m2; |
| 224 | VERIFY_IS_APPROX(m3.template triangularView<StrictlyUpper>().toDenseMatrix(), m1); |
| 225 | |
| 226 | |
| 227 | m1.setZero(); |
| 228 | m1.template triangularView<StrictlyLower>() = 3 * m2; |
| 229 | VERIFY_IS_APPROX(m3.template triangularView<StrictlyLower>().toDenseMatrix(), m1); |
| 230 | m1.setRandom(); |
| 231 | m2 = m1.template triangularView<Upper>(); |
| 232 | VERIFY(m2.isUpperTriangular()); |
| 233 | VERIFY(!m2.isLowerTriangular()); |
| 234 | m2 = m1.template triangularView<StrictlyUpper>(); |
| 235 | VERIFY(m2.isUpperTriangular()); |
no test coverage detected