//===========================================================================// // File: unitvec.tst // // Contents: Implementation details for unit vector class // //---------------------------------------------------------------------------// // Copyright (C) Microsoft Corporation. All rights reserved. // //===========================================================================// #include "StuffHeaders.hpp" // //########################################################################### //########################################################################### // bool UnitVector3D::TestClass() { SPEW((GROUP_STUFF_TEST, "Starting UnitVector3D test...")); UnitVector3D b; const UnitVector3D c(0.6f,0.0f,0.8f); UnitVector3D d(0.8f,-0.6f,0.0f); #if 0 Test_Assumption(c.x == 0.6f && c.y == 0.0f && c.z == 0.8f); Test_Assumption(c[2] == c.z); #endif b = c; #if 0 Test_Assumption(b.x == c.x && b.y == c.y && b.z == c.z); #endif Test_Assumption(Close_Enough(b,c)); Test_Assumption(b == c); b.Negate(c); Test_Assumption(b == UnitVector3D(-c.x,-c.y,-c.z)); Scalar f = c*d; Test_Assumption(Close_Enough(f,c.x*d.x + c.y*d.y + c.z*d.z)); LinearMatrix4D m; EulerAngles r(Pi_Over_4,0.0f,0.0f); m.BuildRotation(r); b.Multiply(c,m); Test_Assumption(b == UnitVector3D(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_Assumption(b == UnitVector3D(c.x,c.y*m(1,1)+c.z*m(2,1),c.y*m(1,2)+c.z*m(2,2))); f = c.GetLengthSquared(); Test_Assumption(Close_Enough(f, 1.0f)); f = c.GetLength(); Test_Assumption(Close_Enough(f, 1.0f)); Vector3D v(0.0f,1.2f,1.6f); f = v.GetLength(); b = v; Test_Assumption(b == UnitVector3D(v.x/f, v.y/f, v.z/f)); return true; }