diff --git a/src/Maths/Silk.NET.Maths.Tests/CubeTests.cs b/src/Maths/Silk.NET.Maths.Tests/CubeTests.cs new file mode 100644 index 0000000000..7f10975c4a --- /dev/null +++ b/src/Maths/Silk.NET.Maths.Tests/CubeTests.cs @@ -0,0 +1,56 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using Xunit; + +namespace Silk.NET.Maths.Tests +{ + public class CubeTests + { + [Fact] + public void ContainsCubeTest() + { + var parent = new Cube(Vector3D.Zero, new Vector3D(10.0f, 10.0f, 10.0f)); + + // Completely inside + var inside = new Cube(new Vector3D(1.0f, 1.0f, 1.0f), new Vector3D(5.0f, 5.0f, 5.0f)); + Assert.True(parent.Contains(inside)); + + // Identical (touching boundaries) + Assert.True(parent.Contains(parent)); + + // Exceeds max X + var exceedsX = new Cube(new Vector3D(1.0f, 1.0f, 1.0f), new Vector3D(11.0f, 5.0f, 5.0f)); + Assert.False(parent.Contains(exceedsX)); + + // Exceeds max Y + var exceedsY = new Cube(new Vector3D(1.0f, 1.0f, 1.0f), new Vector3D(5.0f, 11.0f, 5.0f)); + Assert.False(parent.Contains(exceedsY)); + + // Exceeds max Z + var exceedsZ = new Cube(new Vector3D(1.0f, 1.0f, 1.0f), new Vector3D(5.0f, 5.0f, 11.0f)); + Assert.False(parent.Contains(exceedsZ)); + + // Origin outside min Z + var outsideMinZ = new Cube(new Vector3D(1.0f, 1.0f, -1.0f), new Vector3D(5.0f, 5.0f, 5.0f)); + Assert.False(parent.Contains(outsideMinZ)); + } + + [Fact] + public void ContainsPointTest() + { + var cube = new Cube(Vector3D.Zero, new Vector3D(10.0f, 10.0f, 10.0f)); + + Assert.True(cube.Contains(new Vector3D(5.0f, 5.0f, 5.0f))); + Assert.True(cube.Contains(Vector3D.Zero)); + Assert.True(cube.Contains(new Vector3D(10.0f, 10.0f, 10.0f))); + + Assert.False(cube.Contains(new Vector3D(-1.0f, 5.0f, 5.0f))); + Assert.False(cube.Contains(new Vector3D(5.0f, -1.0f, 5.0f))); + Assert.False(cube.Contains(new Vector3D(5.0f, 5.0f, -1.0f))); + Assert.False(cube.Contains(new Vector3D(11.0f, 5.0f, 5.0f))); + Assert.False(cube.Contains(new Vector3D(5.0f, 11.0f, 5.0f))); + Assert.False(cube.Contains(new Vector3D(5.0f, 5.0f, 11.0f))); + } + } +} diff --git a/src/Maths/Silk.NET.Maths/Cube.cs b/src/Maths/Silk.NET.Maths/Cube.cs index f527716518..ba90199886 100644 --- a/src/Maths/Silk.NET.Maths/Cube.cs +++ b/src/Maths/Silk.NET.Maths/Cube.cs @@ -121,7 +121,7 @@ public bool Contains(Cube other) return Scalar.GreaterThanOrEqual(other.Origin.X, this.Origin.X) && Scalar.GreaterThanOrEqual (other.Origin.Y, this.Origin.Y) && Scalar.GreaterThanOrEqual (other.Origin.Z, this.Origin.Z) && Scalar.LessThanOrEqual(oMax.X, tMax.X) && Scalar.LessThanOrEqual - (oMax.Y, tMax.Y) && Scalar.LessThanOrEqual(oMax.Y, tMax.Y); + (oMax.Y, tMax.Y) && Scalar.LessThanOrEqual(oMax.Z, tMax.Z); } ///