mirror of
https://github.com/Facepunch/sbox-public.git
synced 2026-01-11 15:58:40 -05:00
This commit imports the C# engine code and game files, excluding C++ source code. [Source-Commit: ceb3d758046e50faa6258bc3b658a30c97743268]
124 lines
4.9 KiB
C#
124 lines
4.9 KiB
C#
namespace TestSystem.Math;
|
|
|
|
[TestClass]
|
|
public partial class BBoxTest
|
|
{
|
|
[TestMethod]
|
|
public void ContainsPoint()
|
|
{
|
|
var bbox = new BBox( new Vector3( -10, -10, -10 ), new Vector3( 10, 10, 10 ) );
|
|
|
|
// Test points inside
|
|
Assert.IsTrue( bbox.Contains( new Vector3( 0, 0, 0 ) ), "Center point should be inside" );
|
|
Assert.IsTrue( bbox.Contains( new Vector3( 9.9f, 9.9f, 9.9f ) ), "Point near max corner should be inside" );
|
|
Assert.IsTrue( bbox.Contains( new Vector3( -9.9f, -9.9f, -9.9f ) ), "Point near min corner should be inside" );
|
|
|
|
// Test points outside
|
|
Assert.IsFalse( bbox.Contains( new Vector3( 11, 0, 0 ) ), "Point outside x max should not be inside" );
|
|
Assert.IsFalse( bbox.Contains( new Vector3( -11, 0, 0 ) ), "Point outside x min should not be inside" );
|
|
Assert.IsFalse( bbox.Contains( new Vector3( 10.1f, 10.1f, 10.1f ) ), "Point just beyond max corner should not be inside" );
|
|
}
|
|
|
|
[TestMethod]
|
|
public void ContainsBBox()
|
|
{
|
|
var outerBox = new BBox( new Vector3( -10, -10, -10 ), new Vector3( 10, 10, 10 ) );
|
|
var innerBox = new BBox( new Vector3( -5, -5, -5 ), new Vector3( 5, 5, 5 ) );
|
|
var overlappingBox = new BBox( new Vector3( -15, -15, -15 ), new Vector3( 0, 0, 0 ) );
|
|
var separateBox = new BBox( new Vector3( 20, 20, 20 ), new Vector3( 30, 30, 30 ) );
|
|
|
|
Assert.IsTrue( outerBox.Contains( innerBox ), "Outer box should contain inner box" );
|
|
Assert.IsFalse( outerBox.Contains( overlappingBox ), "Outer box should not contain overlapping box" );
|
|
Assert.IsFalse( outerBox.Contains( separateBox ), "Outer box should not contain separate box" );
|
|
Assert.IsFalse( innerBox.Contains( outerBox ), "Inner box should not contain outer box" );
|
|
}
|
|
|
|
[TestMethod]
|
|
public void OverlapsBBox()
|
|
{
|
|
var boxA = new BBox( new Vector3( -10, -10, -10 ), new Vector3( 10, 10, 10 ) );
|
|
var boxB = new BBox( new Vector3( 5, 5, 5 ), new Vector3( 15, 15, 15 ) );
|
|
var boxC = new BBox( new Vector3( 20, 20, 20 ), new Vector3( 30, 30, 30 ) );
|
|
|
|
Assert.IsTrue( boxA.Overlaps( boxB ), "Boxes A and B should overlap" );
|
|
Assert.IsFalse( boxA.Overlaps( boxC ), "Boxes A and C should not overlap" );
|
|
Assert.IsTrue( boxB.Overlaps( boxA ), "Overlap should be commutative" );
|
|
}
|
|
|
|
[TestMethod]
|
|
public void AddPointTest()
|
|
{
|
|
var bbox = new BBox( new Vector3( -10, -10, -10 ), new Vector3( 10, 10, 10 ) );
|
|
|
|
// Add a point outside the box
|
|
var expandedBox = bbox.AddPoint( new Vector3( 20, 5, 15 ) );
|
|
|
|
// Check that the box expanded in the right dimensions
|
|
Assert.AreEqual( new Vector3( -10, -10, -10 ), expandedBox.Mins );
|
|
Assert.AreEqual( new Vector3( 20, 10, 15 ), expandedBox.Maxs );
|
|
}
|
|
|
|
[TestMethod]
|
|
public void GrowTest()
|
|
{
|
|
var bbox = new BBox( new Vector3( -10, -10, -10 ), new Vector3( 10, 10, 10 ) );
|
|
|
|
var grownBox = bbox.Grow( 5 );
|
|
|
|
// Check that the box grew in all dimensions
|
|
Assert.AreEqual( new Vector3( -15, -15, -15 ), grownBox.Mins );
|
|
Assert.AreEqual( new Vector3( 15, 15, 15 ), grownBox.Maxs );
|
|
}
|
|
|
|
[TestMethod]
|
|
public void ClosestPointTest()
|
|
{
|
|
var bbox = new BBox( new Vector3( -10, -10, -10 ), new Vector3( 10, 10, 10 ) );
|
|
|
|
// Test points inside the box
|
|
var insidePoint = new Vector3( 5, 5, 5 );
|
|
var closestToInside = bbox.ClosestPoint( insidePoint );
|
|
Assert.IsTrue( closestToInside.AlmostEqual( insidePoint ), "Closest point to an inside point should be the point itself" );
|
|
|
|
// Test points outside the box
|
|
var outsidePoint = new Vector3( 20, 5, 5 );
|
|
var closestToOutside = bbox.ClosestPoint( outsidePoint );
|
|
Assert.IsTrue( closestToOutside.AlmostEqual( new Vector3( 10, 5, 5 ) ), "Closest point should be on the box surface" );
|
|
|
|
// Test point outside on multiple axes
|
|
var cornerPoint = new Vector3( 20, 20, 20 );
|
|
var closestToCorner = bbox.ClosestPoint( cornerPoint );
|
|
Assert.IsTrue( closestToCorner.AlmostEqual( new Vector3( 10, 10, 10 ) ), "Closest point should be the box corner" );
|
|
}
|
|
|
|
[TestMethod]
|
|
public void FromPositionAndSizeTest()
|
|
{
|
|
var bbox1 = BBox.FromPositionAndSize( new Vector3( 10, 20, 30 ), 10.0f );
|
|
Assert.AreEqual( new Vector3( 5, 15, 25 ), bbox1.Mins );
|
|
Assert.AreEqual( new Vector3( 15, 25, 35 ), bbox1.Maxs );
|
|
|
|
var bbox2 = BBox.FromPositionAndSize( new Vector3( 10, 20, 30 ), new Vector3( 2, 4, 6 ) );
|
|
Assert.AreEqual( new Vector3( 9, 18, 27 ), bbox2.Mins );
|
|
Assert.AreEqual( new Vector3( 11, 22, 33 ), bbox2.Maxs );
|
|
}
|
|
|
|
[TestMethod]
|
|
public void GetEdgeDistanceTest()
|
|
{
|
|
var bbox = new BBox( new Vector3( -10, -10, -10 ), new Vector3( 10, 10, 10 ) );
|
|
|
|
// Test center point (should be 10 units from any edge)
|
|
float centerDist = bbox.GetEdgeDistance( new Vector3( 0, 0, 0 ) );
|
|
Assert.AreEqual( 10.0f, centerDist );
|
|
|
|
// Test point near edge
|
|
float nearEdgeDist = bbox.GetEdgeDistance( new Vector3( 9, 0, 0 ) );
|
|
Assert.AreEqual( 1.0f, nearEdgeDist );
|
|
|
|
// Test point outside bbox (should return distance to nearest edge, which is 0)
|
|
float outsideDist = bbox.GetEdgeDistance( new Vector3( 20, 0, 0 ) );
|
|
Assert.AreEqual( 10.0f, outsideDist );
|
|
}
|
|
}
|