@@ -29,7 +29,7 @@ void trmm(int rows=get_random_size<Scalar>(),
2929 typedef Matrix<Scalar,Dynamic,OtherCols,OtherCols==1 ?ColMajor:ResOrder> ResXS;
3030 typedef Matrix<Scalar,OtherCols,Dynamic,OtherCols==1 ?RowMajor:ResOrder> ResSX;
3131
32- TriMatrix mat (rows,cols), tri (rows,cols), triTr (cols,rows);
32+ TriMatrix mat (rows,cols), tri (rows,cols), triTr (cols,rows), s1tri (rows,cols), s1triTr (cols,rows) ;
3333
3434 OnTheRight ge_right (cols,otherCols);
3535 OnTheLeft ge_left (otherCols,rows);
@@ -42,6 +42,8 @@ void trmm(int rows=get_random_size<Scalar>(),
4242 mat.setRandom ();
4343 tri = mat.template triangularView <Mode>();
4444 triTr = mat.transpose ().template triangularView <Mode>();
45+ s1tri = (s1*mat).template triangularView <Mode>();
46+ s1triTr = (s1*mat).transpose ().template triangularView <Mode>();
4547 ge_right.setRandom ();
4648 ge_left.setRandom ();
4749
@@ -51,19 +53,29 @@ void trmm(int rows=get_random_size<Scalar>(),
5153 VERIFY_IS_APPROX ( ge_xs.noalias () = mat.template triangularView <Mode>() * ge_right, tri * ge_right);
5254 VERIFY_IS_APPROX ( ge_sx.noalias () = ge_left * mat.template triangularView <Mode>(), ge_left * tri);
5355
54- VERIFY_IS_APPROX ( ge_xs. noalias () = (s1*mat. adjoint ()). template triangularView <Mode>() * (s2*ge_left. transpose ()), s1*triTr. conjugate () * (s2*ge_left. transpose ()));
55- VERIFY_IS_APPROX ( ge_sx .noalias () = ge_right. transpose () * mat.adjoint ().template triangularView <Mode>(), ge_right .transpose () * triTr.conjugate ());
56+ if ((Mode&UnitDiag)== 0 )
57+ VERIFY_IS_APPROX ( ge_xs .noalias () = (s1* mat.adjoint ()) .template triangularView <Mode>() * (s2*ge_left .transpose ()), s1* triTr.conjugate () * (s2*ge_left. transpose () ));
5658
57- VERIFY_IS_APPROX ( ge_xs.noalias () = (s1*mat.adjoint ()).template triangularView <Mode>() * (s2*ge_left.adjoint ()), s1*triTr. conjugate () * (s2*ge_left.adjoint ()));
58- VERIFY_IS_APPROX ( ge_sx.noalias () = ge_right. adjoint ( ) * mat. adjoint ( ).template triangularView <Mode>(), ge_right. adjoint () * triTr. conjugate () );
59+ VERIFY_IS_APPROX ( ge_xs.noalias () = (s1*mat.transpose ()).template triangularView <Mode>() * (s2*ge_left.transpose ()), s1triTr * (s2*ge_left.transpose ()));
60+ VERIFY_IS_APPROX ( ge_sx.noalias () = (s2*ge_left ) * (s1*mat ).template triangularView <Mode>(), (s2*ge_left)*s1tri );
5961
62+ VERIFY_IS_APPROX ( ge_sx.noalias () = ge_right.transpose () * mat.adjoint ().template triangularView <Mode>(), ge_right.transpose () * triTr.conjugate ());
63+ VERIFY_IS_APPROX ( ge_sx.noalias () = ge_right.adjoint () * mat.adjoint ().template triangularView <Mode>(), ge_right.adjoint () * triTr.conjugate ());
64+
65+ ge_xs_save = ge_xs;
66+ if ((Mode&UnitDiag)==0 )
67+ VERIFY_IS_APPROX ( (ge_xs_save + s1*triTr.conjugate () * (s2*ge_left.adjoint ())).eval (), ge_xs.noalias () += (s1*mat.adjoint ()).template triangularView <Mode>() * (s2*ge_left.adjoint ()) );
6068 ge_xs_save = ge_xs;
61- VERIFY_IS_APPROX ( (ge_xs_save + s1*triTr. conjugate () * (s2*ge_left.adjoint ())).eval (), ge_xs.noalias () += (s1*mat.adjoint ()).template triangularView <Mode>() * (s2*ge_left.adjoint ()) );
69+ VERIFY_IS_APPROX ( (ge_xs_save + s1triTr * (s2*ge_left.adjoint ())).eval (), ge_xs.noalias () += (s1*mat.transpose ()).template triangularView <Mode>() * (s2*ge_left.adjoint ()) );
6270 ge_sx.setRandom ();
6371 ge_sx_save = ge_sx;
64- VERIFY_IS_APPROX ( ge_sx_save - (ge_right.adjoint () * (-s1 * triTr).conjugate ()).eval (), ge_sx.noalias () -= (ge_right.adjoint () * (-s1 * mat).adjoint ().template triangularView <Mode>()).eval ());
72+ if ((Mode&UnitDiag)==0 )
73+ VERIFY_IS_APPROX ( ge_sx_save - (ge_right.adjoint () * (-s1 * triTr).conjugate ()).eval (), ge_sx.noalias () -= (ge_right.adjoint () * (-s1 * mat).adjoint ().template triangularView <Mode>()).eval ());
6574
66- VERIFY_IS_APPROX ( ge_xs = (s1*mat).adjoint ().template triangularView <Mode>() * ge_left.adjoint (), numext::conj (s1) * triTr.conjugate () * ge_left.adjoint ());
75+ if ((Mode&UnitDiag)==0 )
76+ VERIFY_IS_APPROX ( ge_xs = (s1*mat).adjoint ().template triangularView <Mode>() * ge_left.adjoint (), numext::conj (s1) * triTr.conjugate () * ge_left.adjoint ());
77+ VERIFY_IS_APPROX ( ge_xs = (s1*mat).transpose ().template triangularView <Mode>() * ge_left.adjoint (), s1triTr * ge_left.adjoint ());
78+
6779
6880 // TODO check with sub-matrix expressions ?
6981}
0 commit comments