Files
TeslaRel410/CODE/RP/MUNGA/VECTOR3D.TCP
T
CydandClaude Fable 5 fdd9ac9d97 Initial import: Tesla Release 4.10 (Tesla:BattleTech & Tesla:Red Planet)
Archival snapshot of the Virtual World Entertainment Tesla cockpit
software, 1994-1996: MUNGA engine and L4 pod layer source (Borland
C++ 5.0), BT/RP game code, and game content (models, audio, maps,
gauges, Division renderer data). Includes third-party libraries:
Division dVS/DPL graphics, HMI SOS audio, WATTCP networking.

Files are preserved byte-for-byte (.gitattributes disables all
line-ending conversion). README.md documents the layout, target
hardware, and toolchain.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 13:21:58 -05:00

186 lines
4.6 KiB
Plaintext

//===========================================================================//
// File: vector.tst //
// Project: MUNGA Brick: Math Library //
// Contents: Test code for vector classes //
//---------------------------------------------------------------------------//
// Date Who Modification //
// -------- --- ---------------------------------------------------------- //
// 11/19/94 JMA Initial coding. //
//---------------------------------------------------------------------------//
// Copyright (C) 1994-1995, Virtual World Entertainment, Inc. //
// All Rights reserved worldwide //
// This unpublished sourcecode is PROPRIETARY and CONFIDENTIAL //
//===========================================================================//
//
//###########################################################################
//###########################################################################
//
Logical
Vector3D::TestClass()
{
DEBUG_STREAM << "Starting Vector3D test...\n";
const Vector3D
a(Identity);
Vector3D
b;
const Vector3D
c(1.0f,2.0f,3.0f);
Vector3D
d(2.0f,3.0f,1.0f);
Test(!a.x && !a.y && !a.z);
Test(c.x == 1.0f && c.y == 2.0f && c.z == 3.0f);
Test(c[2] == c.z);
Test(a[1] == a.y);
Test(Small_Enough(a));
Test(!a);
b = c;
Test(b.x == c.x && b.y == c.y && b.z == c.z);
Test(Close_Enough(b,c));
Test(b == c);
Test(a != b);
b.Negate(c);
Test(b == Vector3D(-c.x,-c.y,-c.z));
b.Add(c,d);
Test(b == Vector3D(c.x+d.x,c.y+d.y,c.z+d.z));
b = c;
b += d;
Test(b == Vector3D(c.x+d.x,c.y+d.y,c.z+d.z));
b.Subtract(d,c);
Test(b == Vector3D(d.x-c.x,d.y-c.y,d.z-c.z));
b = d;
b -= c;
Test(b == Vector3D(d.x-c.x,d.y-c.y,d.z-c.z));
Scalar f = c*d;
Test(f == c.x*d.x + c.y*d.y + c.z*d.z);
b.Cross(c,d);
Test(b == Vector3D(c.y*d.z-c.z*d.y,c.z*d.x-c.x*d.z,c.x*d.y-c.y*d.x));
f = 2.0f;
b.Multiply(c,f);
Test(b == Vector3D(f*c.x,f*c.y,f*c.z));
b = c;
b *= f;
Test(b == Vector3D(f*c.x,f*c.y,f*c.z));
b.Multiply(c,d);
Test(b == Vector3D(c.x*d.x,c.y*d.y,c.z*d.z));
b = c;
b *= d;
Test(b == Vector3D(c.x*d.x,c.y*d.y,c.z*d.z));
b.Divide(c,f);
Test(b == Vector3D(c.x/f,c.y/f,c.z/f));
b = c;
b /= f;
Test(b == Vector3D(c.x/f,c.y/f,c.z/f));
b.Divide(c,d);
Test(b == Vector3D(c.x/d.x,c.y/d.y,c.z/d.z));
b = c;
b /= d;
Test(b == Vector3D(c.x/d.x,c.y/d.y,c.z/d.z));
AffineMatrix
m(True);
EulerAngles
r(PI_OVER_4,0.0f,0.0f);
m = r;
b.Multiply(c,m);
Test(b == Vector3D(c.x,c.y*m(1,1)+c.z*m(2,1),c.y*m(1,2)+c.z*m(2,2)));
b = c;
b *= m;
Test(b == Vector3D(c.x,c.y*m(1,1)+c.z*m(2,1),c.y*m(1,2)+c.z*m(2,2)));
Test(!a.LengthSquared());
f = c.LengthSquared();
Test(f == c.x*c.x + c.y*c.y + c.z*c.z);
f = c.Length();
Test(Close_Enough(f,Sqrt(c.x*c.x + c.y*c.y + c.z*c.z)));
b.Normalize(c);
Test(b == Vector3D(c.x/f, c.y/f, c.z/f));
b.Combine(c,2.0f,d,2.0f);
Test(b == Vector3D(2.0f*(c.x+d.x),2.0f*(c.y+d.y),2.0f*(c.z+d.z)));
b.Lerp(c,d,0.5f);
Test(b == Vector3D(0.5f*(c.x+d.x),0.5f*(c.y+d.y),0.5f*(c.z+d.z)));
LBE3Vector3D lbe3(1.0f,2.0f,3.0f);
TIVector3D ti(1.0f,2.0f,3.0f);
b = lbe3;
Test(b == Vector3D(lbe3.x,lbe3.z,lbe3.y));
b = ti;
Test(b == Vector3D(ti.x,ti.y,-ti.z));
return True;
}
//
//###########################################################################
//###########################################################################
//
Logical
LBE3Vector3D::TestClass()
{
DEBUG_STREAM << "Starting LBE3Vector3D test...\n";
const LBE3Vector3D
a(1.0f,2.0f,3.0f);
LBE3Vector3D
b;
b = a;
Test(b == a);
Vector3D v(1.0f,2.0f,3.0f);
b = v;
Test(b == LBE3Vector3D(v.x,v.z,v.y));
TIVector3D ti(1.0f,2.0f,3.0f);
b = ti;
Test(b == LBE3Vector3D(ti.x, -ti.z, ti.y));
return True;
}
//
//###########################################################################
//###########################################################################
//
Logical
TIVector3D::TestClass()
{
DEBUG_STREAM << "Starting TIVector3D test...\n";
const TIVector3D
a(1.0f,2.0f,3.0f);
TIVector3D
b;
b = a;
Test(b == a);
Vector3D v(1.0f,2.0f,3.0f);
b = v;
Test(b == TIVector3D(v.x,v.y,-v.z));
LBE3Vector3D lbe3(1.0f,2.0f,3.0f);
b = lbe3;
Test(b == TIVector3D(lbe3.x, lbe3.z, -lbe3.y));
return True;
}