NavisworksTransport/UnitTests/CoordinateSystem/HostCoordinateAdapterTests.cs

70 lines
2.6 KiB
C#

using Microsoft.VisualStudio.TestTools.UnitTesting;
using NavisworksTransport.Utils.CoordinateSystem;
using System.Numerics;
namespace NavisworksTransport.UnitTests.CoordinateSystem
{
[TestClass]
public class HostCoordinateAdapterTests
{
[TestMethod]
public void ZUp_PointRoundTrip_ShouldRemainUnchanged()
{
var adapter = new HostCoordinateAdapter(CoordinateSystemType.ZUp);
var hostPoint = new Vector3(1.5f, -2.5f, 3.5f);
Vector3 canonicalPoint = adapter.ToCanonicalPoint3(hostPoint);
Vector3 roundTripPoint = adapter.FromCanonicalPoint3(canonicalPoint);
AssertPoint(roundTripPoint, 1.5, -2.5, 3.5);
}
[TestMethod]
public void YUp_PointAndVectorRoundTrip_ShouldMatchExpectedMapping()
{
var adapter = new HostCoordinateAdapter(CoordinateSystemType.YUp);
var hostPoint = new Vector3(1.0f, 2.0f, 3.0f);
var hostVector = new Vector3(4.0f, 5.0f, 6.0f);
Vector3 canonicalPoint = adapter.ToCanonicalPoint3(hostPoint);
Vector3 canonicalVector = adapter.ToCanonicalVector3(hostVector);
AssertPoint(canonicalPoint, 1.0, -3.0, 2.0);
AssertVector(canonicalVector, 4.0, -6.0, 5.0);
Vector3 restoredPoint = adapter.FromCanonicalPoint3(canonicalPoint);
Vector3 restoredVector = adapter.FromCanonicalVector3(canonicalVector);
AssertPoint(restoredPoint, 1.0, 2.0, 3.0);
AssertVector(restoredVector, 4.0, 5.0, 6.0);
}
[TestMethod]
public void YUp_BoundsRoundTrip_ShouldPreserveBounds()
{
var adapter = new HostCoordinateAdapter(CoordinateSystemType.YUp);
var hostBounds = new CanonicalBounds3(new Vector3(-2.0f, 1.0f, 3.0f), new Vector3(5.0f, 7.0f, 11.0f));
CanonicalBounds3 canonicalBounds = adapter.ToCanonicalBounds3(hostBounds);
CanonicalBounds3 restoredBounds = adapter.FromCanonicalBounds3(canonicalBounds);
AssertPoint(restoredBounds.Min, -2.0, 1.0, 3.0);
AssertPoint(restoredBounds.Max, 5.0, 7.0, 11.0);
}
private static void AssertPoint(Vector3 point, double x, double y, double z)
{
Assert.AreEqual(x, point.X, 1e-9);
Assert.AreEqual(y, point.Y, 1e-9);
Assert.AreEqual(z, point.Z, 1e-9);
}
private static void AssertVector(Vector3 vector, double x, double y, double z)
{
Assert.AreEqual(x, vector.X, 1e-9);
Assert.AreEqual(y, vector.Y, 1e-9);
Assert.AreEqual(z, vector.Z, 1e-9);
}
}
}