var a,b,c,t:
TMtx;
d,e,f:
TVec;
begin
CreateIt(a,b,c,t);
CreateIt(d,e,f);
try
// Test non quadratic general matrix
a.SetIt(2,3,False,[4,3,3,
3,4,2]);
e.SetIt(false,[1,2]);
d.TensorProd(e,a);
f.SetIt(False,[10,11,7]);
if not f.Equal(d)
then raise Exception.Create('Not same');
// Test on triangular matrices, left
a.TriangleForm := tfUpper;
a.TriangleUnit := False;
a.SetIt(2,2,False,[4,3,
0,4]);
e.SetIt(false,[1,2]);
d.TensorProd(e,a,mtTriangle);
f.SetIt(False,[4,11]);
if not f.Equal(d)
then raise Exception.Create('Not same');
// Test on triangular matrices, right
a.TriangleForm := tfUpper;
// data to be referenced is in upper triangle
a.TriangleUnit := False;
// non unit diagonal
a.SetIt(2,2,False,[4,3,
0,4]);
e.SetIt(false,[1,2]);
d.TensorProd(a,e,mtTriangle);
f.SetIt(False,[10,8]);
if not f.Equal(d)
then raise Exception.Create('Not same');
// Test on symmetric matrices, right
a.TriangleForm := tfUpper;
a.SetIt(2,2,False,[4,3,
3,4]);
e.SetIt(false,[1,2]);
d.TensorProd(e,a,mtSymmetric);
f.SetIt(False,[10,11]);
if not f.Equal(d)
then raise Exception.Create('Not same');
// Test on symmetric matrices, Left
a.TriangleForm := tfUpper;
a.SetIt(2,2,False,[4,3,
3,4]);
e.SetIt(false,[1,2]);
d.TensorProd(a,e,mtSymmetric);
f.SetIt(False,[10,11]);
if not f.Equal(d)
then raise Exception.Create('Not same');
finally
FreeIt(a,b,c,t);
FreeIt(d,e,f);
end;
end;