66 lines
2.1 KiB
C#
66 lines
2.1 KiB
C#
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
|
using NavisworksTransport.Utils.CoordinateSystem;
|
|
using System.Numerics;
|
|
|
|
namespace NavisworksTransport.UnitTests.CoordinateSystem
|
|
{
|
|
[TestClass]
|
|
public class CanonicalTrackedPositionResolverTests
|
|
{
|
|
[TestMethod]
|
|
public void GroundReference_ShouldOffsetHalfHeightAlongUp()
|
|
{
|
|
Vector3 result = CanonicalTrackedPositionResolver.ResolveGroundTrackedCenter(
|
|
new Vector3(10f, 20f, 30f),
|
|
Vector3.UnitZ,
|
|
4.0);
|
|
|
|
AssertVector(result, 10.0, 20.0, 32.0);
|
|
}
|
|
|
|
[TestMethod]
|
|
public void TopSuspensionReference_ShouldOffsetNegativeHalfHeightAlongUp()
|
|
{
|
|
Vector3 result = CanonicalTrackedPositionResolver.ResolveTopSuspensionTrackedCenter(
|
|
new Vector3(10f, 20f, 30f),
|
|
Vector3.UnitZ,
|
|
4.0);
|
|
|
|
AssertVector(result, 10.0, 20.0, 28.0);
|
|
}
|
|
|
|
[TestMethod]
|
|
public void ArbitraryNormalReference_ShouldOffsetAlongProvidedNormal()
|
|
{
|
|
Vector3 normal = Vector3.Normalize(new Vector3(0f, 1f, 1f));
|
|
Vector3 result = CanonicalTrackedPositionResolver.ResolveCenterFromContactReference(
|
|
new Vector3(5f, 6f, 7f),
|
|
normal,
|
|
4.0,
|
|
0.0);
|
|
|
|
Vector3 expected = new Vector3(5f, 6f, 7f) + normal * 2f;
|
|
AssertVector(result, expected.X, expected.Y, expected.Z);
|
|
}
|
|
|
|
[TestMethod]
|
|
public void MidSurfaceFactor_ShouldProduceNoOffset()
|
|
{
|
|
Vector3 result = CanonicalTrackedPositionResolver.ResolveCenterFromContactReference(
|
|
new Vector3(1f, 2f, 3f),
|
|
Vector3.UnitZ,
|
|
8.0,
|
|
0.5);
|
|
|
|
AssertVector(result, 1.0, 2.0, 3.0);
|
|
}
|
|
|
|
private static void AssertVector(Vector3 actual, double x, double y, double z)
|
|
{
|
|
Assert.AreEqual(x, actual.X, 1e-6);
|
|
Assert.AreEqual(y, actual.Y, 1e-6);
|
|
Assert.AreEqual(z, actual.Z, 1e-6);
|
|
}
|
|
}
|
|
}
|