| 118 | |
| 119 | |
| 120 | template<typename MatrixType> void triangular_rect(const MatrixType& m) |
| 121 | { |
| 122 | typedef const typename MatrixType::Index Index; |
| 123 | typedef typename MatrixType::Scalar Scalar; |
| 124 | typedef typename NumTraits<Scalar>::Real RealScalar; |
| 125 | enum { Rows = MatrixType::RowsAtCompileTime, Cols = MatrixType::ColsAtCompileTime }; |
| 126 | |
| 127 | Index rows = m.rows(); |
| 128 | Index cols = m.cols(); |
| 129 | |
| 130 | MatrixType m1 = MatrixType::Random(rows, cols), |
| 131 | m2 = MatrixType::Random(rows, cols), |
| 132 | m3(rows, cols), |
| 133 | m4(rows, cols), |
| 134 | r1(rows, cols), |
| 135 | r2(rows, cols); |
| 136 | |
| 137 | MatrixType m1up = m1.template triangularView<Upper>(); |
| 138 | MatrixType m2up = m2.template triangularView<Upper>(); |
| 139 | |
| 140 | if (rows>1 && cols>1) |
| 141 | { |
| 142 | VERIFY(m1up.isUpperTriangular()); |
| 143 | VERIFY(m2up.transpose().isLowerTriangular()); |
| 144 | VERIFY(!m2.isLowerTriangular()); |
| 145 | } |
| 146 | |
| 147 | // test overloaded operator+= |
| 148 | r1.setZero(); |
| 149 | r2.setZero(); |
| 150 | r1.template triangularView<Upper>() += m1; |
| 151 | r2 += m1up; |
| 152 | VERIFY_IS_APPROX(r1,r2); |
| 153 | |
| 154 | // test overloaded operator= |
| 155 | m1.setZero(); |
| 156 | m1.template triangularView<Upper>() = 3 * m2; |
| 157 | m3 = 3 * m2; |
| 158 | VERIFY_IS_APPROX(m3.template triangularView<Upper>().toDenseMatrix(), m1); |
| 159 | |
| 160 | |
| 161 | m1.setZero(); |
| 162 | m1.template triangularView<Lower>() = 3 * m2; |
| 163 | VERIFY_IS_APPROX(m3.template triangularView<Lower>().toDenseMatrix(), m1); |
| 164 | |
| 165 | m1.setZero(); |
| 166 | m1.template triangularView<StrictlyUpper>() = 3 * m2; |
| 167 | VERIFY_IS_APPROX(m3.template triangularView<StrictlyUpper>().toDenseMatrix(), m1); |
| 168 | |
| 169 | |
| 170 | m1.setZero(); |
| 171 | m1.template triangularView<StrictlyLower>() = 3 * m2; |
| 172 | VERIFY_IS_APPROX(m3.template triangularView<StrictlyLower>().toDenseMatrix(), m1); |
| 173 | m1.setRandom(); |
| 174 | m2 = m1.template triangularView<Upper>(); |
| 175 | VERIFY(m2.isUpperTriangular()); |
| 176 | VERIFY(!m2.isLowerTriangular()); |
| 177 | m2 = m1.template triangularView<StrictlyUpper>(); |
no test coverage detected