fpc/tests/webtbs/tw0938.pp
Jonas Maebe acaae2bf3c * fixed test so it does not use uninitialised floating point values (that
could trigger exceptions)

git-svn-id: trunk@34947 -
2016-11-21 07:39:17 +00:00

78 lines
1.4 KiB
ObjectPascal

Program test_operator;
{$mode fpc}
type
Vector = record
X,Y,Z : extended;
end;
Matrix = array [1..4,1..4] of extended;
Const
IDENTITYMATRIX : Matrix =
( (1,0,0,0),
(0,1,0,0),
(0,0,1,0),
(0,0,0,1));
{...}
function NewVector (ax,ay,az : extended) : Vector;
begin
NewVector.X:=ax;
NewVector.Y:=ay;
NewVector.Z:=az;
end;
operator * (V : Vector;Value : extended) Result : Vector;
begin
Result.X:=V.X*Value;
Result.Y:=V.Y*Value;
Result.Z:=V.Z*Value;
end;
{...}
operator * (Value : extended;V : Vector) Result : Vector;
begin
Result.X:=V.X*Value;
Result.Y:=V.Y*Value;
Result.Z:=V.Z*Value;
end;
{...}
operator * (M : Matrix;Value : extended) Result : Matrix;
var i,j : longint;
begin
for i:=1 to 4 do
for j:=1 to 4 do
Result[i,j]:=M[i,j]*Value;
end;
{...}
operator * (Value : extended;M : Matrix) Result : Matrix;
var i,j : longint;
begin
for i:=1 to 4 do
for j:=1 to 4 do
Result[i,j]:=M[i,j]*Value;
end;
{...}
var
V1, V2 : Vector;
M1, M2 : Matrix;
begin
V1 := NewVector (1,1,1);
V2 := V1 * 2;
{ Everything ok }
M2 := IDENTITYMATRIX;
M1 := M2 * 2;
M1 := IDENTITYMATRIX * 2;
M2 := IDENTITYMATRIX * 4;
{ Error: Incompatible types: got "E3MATRIX" expected "LONGINT" in both rows. This doesn't happen if I use 2.0 and 4.0 values. }
{...}
end.