mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-12-21 01:10:34 +01:00
213 lines
8.9 KiB
ObjectPascal
213 lines
8.9 KiB
ObjectPascal
unit utmathvectorbase;
|
|
|
|
{$mode objfpc}{$H+}
|
|
|
|
interface
|
|
|
|
uses
|
|
Classes, SysUtils, fpcunit, testutils, testregistry, Types, system.math.vectors;
|
|
|
|
const
|
|
c45 = Sqrt(2)/2; // cosine/sine 45°
|
|
c60 = Sqrt(3)/2; // cosine 60°
|
|
c30 = 1/2; // cosine 30°
|
|
|
|
s30 = C60; // sine 30°
|
|
s45 = c45; // sine 45°
|
|
s60 = c30; // sine 60°
|
|
|
|
|
|
|
|
type
|
|
{ TCMathVectorsBase }
|
|
|
|
TCMathVectorsBase = class(TTestCase)
|
|
protected
|
|
procedure SetUp; override;
|
|
procedure TearDown; override;
|
|
class Procedure AssertEquals(const Msg : String; aExpected,aActual : TVector); overload;
|
|
class Procedure AssertEquals(const Msg : String; aExpected,aActual : TPoint3D); overload;
|
|
class Procedure AssertEquals(const Msg : String; aExpected,aActual : TPointF); overload;
|
|
class Procedure AssertEquals(const Msg : String; aExpected,aActual : TVector3D); overload;
|
|
class Procedure AssertVector3D(const Msg : String; aExpectedX,aExpectedY,aExpectedZ,aExpectedW: Single; aActual : TVector3D);
|
|
class Procedure AssertVector(const Msg : String; aExpectedX,aExpectedY,aExpectedW: Single; aActual : TVector);
|
|
class Procedure AssertPoint3D(const Msg : String; aExpectedX,aExpectedY,aExpectedZ: Single; aActual : TPoint3D);
|
|
class procedure AssertMatrix(Const Msg : String; m11, m12, m13, m21, m22, m23, m31, m32, m33 : Single; aActual : TMatrix);
|
|
class procedure AssertMatrix(Const Msg : String; aExpected : Array of single; aActual : TMatrix);
|
|
class procedure AssertMatrix(Const Msg : String; aExpected, aActual : TMatrix);
|
|
class procedure AssertMatrix3D(Const Msg : String; m11, m12, m13, m14, m21, m22, m23, m24, m31, m32, m33, m34, m41, m42, m43, m44 : Single; aActual : TMatrix3D);
|
|
class procedure AssertMatrix3D(Const Msg : String; aExpected : Array of single; aActual : TMatrix3D);
|
|
class procedure AssertMatrix3D(Const Msg : String; aExpected, aActual : TMatrix3D);
|
|
class Procedure AssertPointF(const Msg : String; aExpectedX,aExpectedY: Single; aActual : TPointF);
|
|
class Procedure AssertQuaternion(const Msg : String; aExpectedReal,aExpectedImagX,aExpectedImagY,aExpectedImagZ: Single; aActual : TQuaternion3D);
|
|
class Procedure AssertQuaternion(const Msg : String; aExpectedReal: Single; aExpectedImag : TPoint3D; aActual : TQuaternion3D);
|
|
end;
|
|
|
|
|
|
|
|
implementation
|
|
|
|
procedure TCMathVectorsBase.SetUp;
|
|
begin
|
|
|
|
end;
|
|
|
|
procedure TCMathVectorsBase.TearDown;
|
|
begin
|
|
|
|
end;
|
|
|
|
class procedure TCMathVectorsBase.AssertEquals(const Msg: String; aExpected,
|
|
aActual: TVector);
|
|
begin
|
|
AssertEquals(Msg+' X',aExpected.X,aActual.X,TEpsilon.Vector);
|
|
AssertEquals(Msg+' Y',aExpected.Y,aActual.Y,TEpsilon.Vector);
|
|
AssertEquals(Msg+' W',aExpected.W,aActual.W,TEpsilon.Vector);
|
|
end;
|
|
|
|
class procedure TCMathVectorsBase.AssertEquals(const Msg: String; aExpected,
|
|
aActual: TPoint3D);
|
|
begin
|
|
AssertEquals(Msg+' X',aExpected.X,aActual.X,TEpsilon.Vector);
|
|
AssertEquals(Msg+' Y',aExpected.Y,aActual.Y,TEpsilon.Vector);
|
|
AssertEquals(Msg+' Z',aExpected.Z,aActual.Z,TEpsilon.Vector);
|
|
end;
|
|
|
|
class procedure TCMathVectorsBase.AssertEquals(const Msg: String; aExpected,
|
|
aActual: TPointF);
|
|
begin
|
|
AssertEquals(Msg+' X',aExpected.X,aActual.X,TEpsilon.Vector);
|
|
AssertEquals(Msg+' Y',aExpected.Y,aActual.Y,TEpsilon.Vector);
|
|
|
|
end;
|
|
|
|
class procedure TCMathVectorsBase.AssertEquals(const Msg: String; aExpected,
|
|
aActual: TVector3D);
|
|
begin
|
|
AssertEquals(Msg+' X',aExpected.X,aActual.X,TEpsilon.Vector);
|
|
AssertEquals(Msg+' Y',aExpected.Y,aActual.Y,TEpsilon.Vector);
|
|
AssertEquals(Msg+' Z',aExpected.Z,aActual.Z,TEpsilon.Vector);
|
|
AssertEquals(Msg+' W',aExpected.W,aActual.W,TEpsilon.Vector);
|
|
end;
|
|
|
|
class procedure TCMathVectorsBase.AssertVector3D(const Msg: String; aExpectedX,
|
|
aExpectedY, aExpectedZ, aExpectedW: Single; aActual: TVector3D);
|
|
begin
|
|
AssertEquals(Msg+' X',aExpectedX,aActual.X,TEpsilon.Vector);
|
|
AssertEquals(Msg+' Y',aExpectedY,aActual.Y,TEpsilon.Vector);
|
|
AssertEquals(Msg+' Z',aExpectedZ,aActual.Z,TEpsilon.Vector);
|
|
AssertEquals(Msg+' W',aExpectedW,aActual.W,TEpsilon.Vector);
|
|
end;
|
|
|
|
class procedure TCMathVectorsBase.AssertVector(const Msg: String; aExpectedX,
|
|
aExpectedY, aExpectedW: Single; aActual: TVector);
|
|
begin
|
|
AssertEquals(Msg+' X',aExpectedX,aActual.X,TEpsilon.Vector);
|
|
AssertEquals(Msg+' Y',aExpectedY,aActual.Y,TEpsilon.Vector);
|
|
AssertEquals(Msg+' W',aExpectedW,aActual.W,TEpsilon.Vector);
|
|
end;
|
|
|
|
class procedure TCMathVectorsBase.AssertPoint3D(const Msg: String; aExpectedX, aExpectedY, aExpectedZ: Single; aActual: TPoint3D);
|
|
begin
|
|
AssertEquals(Msg+' X',aExpectedX,aActual.X,TEpsilon.Vector);
|
|
AssertEquals(Msg+' Y',aExpectedY,aActual.Y,TEpsilon.Vector);
|
|
AssertEquals(Msg+' Z',aExpectedZ,aActual.Z,TEpsilon.Vector);
|
|
end;
|
|
|
|
class procedure TCMathVectorsBase.AssertMatrix(const Msg: String; m11, m12, m13, m21, m22, m23, m31, m32, m33: Single;
|
|
aActual: TMatrix);
|
|
begin
|
|
AssertEquals(Msg+' m11',m11,aActual.m11,TEpsilon.Vector);
|
|
AssertEquals(Msg+' m12',m12,aActual.m12,TEpsilon.Vector);
|
|
AssertEquals(Msg+' m13',m13,aActual.m13,TEpsilon.Vector);
|
|
|
|
AssertEquals(Msg+' m21',m21,aActual.m21,TEpsilon.Vector);
|
|
AssertEquals(Msg+' m22',m22,aActual.m22,TEpsilon.Vector);
|
|
AssertEquals(Msg+' m23',m23,aActual.m23,TEpsilon.Vector);
|
|
|
|
AssertEquals(Msg+' m31',m31,aActual.m31,TEpsilon.Vector);
|
|
AssertEquals(Msg+' m32',m32,aActual.m32,TEpsilon.Vector);
|
|
AssertEquals(Msg+' m33',m33,aActual.m33,TEpsilon.Vector);
|
|
end;
|
|
|
|
class procedure TCMathVectorsBase.AssertMatrix(const Msg: String; aExpected: array of single; aActual: TMatrix);
|
|
begin
|
|
AssertEquals(Msg+' number of elements',9,Length(aExpected));
|
|
AssertMatrix(Msg,aExpected[0],aExpected[1],aExpected[2],
|
|
aExpected[3],aExpected[4],aExpected[5],
|
|
aExpected[6],aExpected[7],aExpected[8],aActual);
|
|
end;
|
|
|
|
class procedure TCMathVectorsBase.AssertMatrix(const Msg: String; aExpected, aActual: TMatrix);
|
|
begin
|
|
With aExpected do
|
|
AssertMatrix(Msg,m11, m12, m13, m21, m22, m23, m31, m32, m33,aActual);
|
|
end;
|
|
|
|
class procedure TCMathVectorsBase.AssertMatrix3D(const Msg: String; m11, m12, m13, m14, m21, m22, m23, m24, m31, m32, m33,
|
|
m34, m41, m42, m43, m44 : Single; aActual: TMatrix3D);
|
|
begin
|
|
AssertEquals(Msg+' m11',m11,aActual.m11,TEpsilon.Vector);
|
|
AssertEquals(Msg+' m12',m12,aActual.m12,TEpsilon.Vector);
|
|
AssertEquals(Msg+' m13',m13,aActual.m13,TEpsilon.Vector);
|
|
AssertEquals(Msg+' m14',m14,aActual.m14,TEpsilon.Vector);
|
|
|
|
AssertEquals(Msg+' m21',m21,aActual.m21,TEpsilon.Vector);
|
|
AssertEquals(Msg+' m22',m22,aActual.m22,TEpsilon.Vector);
|
|
AssertEquals(Msg+' m23',m23,aActual.m23,TEpsilon.Vector);
|
|
AssertEquals(Msg+' m24',m24,aActual.m24,TEpsilon.Vector);
|
|
|
|
AssertEquals(Msg+' m31',m31,aActual.m31,TEpsilon.Vector);
|
|
AssertEquals(Msg+' m32',m32,aActual.m32,TEpsilon.Vector);
|
|
AssertEquals(Msg+' m33',m33,aActual.m33,TEpsilon.Vector);
|
|
AssertEquals(Msg+' m34',m34,aActual.m34,TEpsilon.Vector);
|
|
|
|
AssertEquals(Msg+' m41',m41,aActual.m41,TEpsilon.Vector);
|
|
AssertEquals(Msg+' m42',m42,aActual.m42,TEpsilon.Vector);
|
|
AssertEquals(Msg+' m43',m43,aActual.m43,TEpsilon.Vector);
|
|
AssertEquals(Msg+' m44',m44,aActual.m44,TEpsilon.Vector);
|
|
|
|
end;
|
|
|
|
class procedure TCMathVectorsBase.AssertMatrix3D(const Msg: String; aExpected: array of single; aActual: TMatrix3D);
|
|
begin
|
|
AssertEquals(Msg+' number of elements',16,Length(aExpected));
|
|
AssertMatrix3D(Msg,aExpected[0],aExpected[1],aExpected[2],aExpected[3],
|
|
aExpected[4],aExpected[5],aExpected[6],aExpected[7],
|
|
aExpected[8],aExpected[9], aExpected[10], aExpected[11],
|
|
aExpected[12], aExpected[13], aExpected[14], aExpected[15], aActual);
|
|
end;
|
|
|
|
class procedure TCMathVectorsBase.AssertMatrix3D(const Msg: String; aExpected, aActual: TMatrix3D);
|
|
begin
|
|
With aExpected do
|
|
AssertMatrix3D(Msg,m11, m12, m13, m14, m21, m22, m23, m24, m31, m32, m33, m34, m41, m42, m43, m44, aActual);
|
|
end;
|
|
|
|
class procedure TCMathVectorsBase.AssertPointF(const Msg: String; aExpectedX, aExpectedY: Single; aActual: TPointF);
|
|
begin
|
|
AssertEquals(Msg+' X',aExpectedX,aActual.X,TEpsilon.Vector);
|
|
AssertEquals(Msg+' Y',aExpectedY,aActual.Y,TEpsilon.Vector);
|
|
end;
|
|
|
|
class procedure TCMathVectorsBase.AssertQuaternion(const Msg: String; aExpectedReal, aExpectedImagX, aExpectedImagY,
|
|
aExpectedImagZ: Single; aActual: TQuaternion3D);
|
|
begin
|
|
AssertEquals(Msg+' RealPart',aExpectedReal,aActual.RealPart,TEpsilon.Vector);
|
|
AssertEquals(Msg+' ImagPart.X',aExpectedImagX,aActual.ImagPart.X,TEpsilon.Vector);
|
|
AssertEquals(Msg+' ImagPart.Y',aExpectedImagY,aActual.ImagPart.Y,TEpsilon.Vector);
|
|
AssertEquals(Msg+' ImagPart.Z',aExpectedImagZ,aActual.ImagPart.Z,TEpsilon.Vector);
|
|
end;
|
|
|
|
class procedure TCMathVectorsBase.AssertQuaternion(const Msg: String; aExpectedReal: Single; aExpectedImag: TPoint3D;
|
|
aActual: TQuaternion3D);
|
|
begin
|
|
AssertEquals(Msg+' RealPart',aExpectedReal,aActual.RealPart,TEpsilon.Vector);
|
|
AssertEquals(Msg+' ImagPart.X',aExpectedImag.X,aActual.ImagPart.X,TEpsilon.Vector);
|
|
AssertEquals(Msg+' ImagPart.Y',aExpectedImag.Y,aActual.ImagPart.Y,TEpsilon.Vector);
|
|
AssertEquals(Msg+' ImagPart.Z',aExpectedImag.Z,aActual.ImagPart.Z,TEpsilon.Vector);
|
|
end;
|
|
|
|
end.
|
|
|