83 lines
3.3 KiB
C#
83 lines
3.3 KiB
C#
|
using System.Collections.Generic;
|
||
|
|
||
|
|
||
|
namespace UnityEngine.TestTools.Utils
|
||
|
{
|
||
|
/// <summary>
|
||
|
/// Use this class to compare two Vector3 objects for equality with NUnit constraints. Call Vector3EqualityComparer.Instance comparer to perform a comparison with the default calculation error value 0.0001f. To specify a different error value, use the one argument constructor to instantiate a new comparer.
|
||
|
/// </summary>
|
||
|
public class Vector3EqualityComparer : IEqualityComparer<Vector3>
|
||
|
{
|
||
|
private const float k_DefaultError = 0.0001f;
|
||
|
private readonly float AllowedError;
|
||
|
|
||
|
private static readonly Vector3EqualityComparer m_Instance = new Vector3EqualityComparer();
|
||
|
|
||
|
/// <summary>
|
||
|
/// A comparer instance with the default calculation error value equal to 0.0001f.
|
||
|
///</summary>
|
||
|
public static Vector3EqualityComparer Instance { get { return m_Instance; } }
|
||
|
|
||
|
private Vector3EqualityComparer() : this(k_DefaultError) {}
|
||
|
|
||
|
/// <summary>
|
||
|
/// Initializes an instance of Vector3Equality comparer with custom allowed calculation error.
|
||
|
/// </summary>
|
||
|
/// <param name="allowedError">This value identifies the calculation error allowed.</param>
|
||
|
public Vector3EqualityComparer(float allowedError)
|
||
|
{
|
||
|
this.AllowedError = allowedError;
|
||
|
}
|
||
|
///<summary>
|
||
|
/// Compares the actual and expected Vector3 objects
|
||
|
/// for equality using <see cref="Utils.AreFloatsEqual"/> to compare the x, y, and z attributes of Vector3.
|
||
|
/// </summary>
|
||
|
/// <param name="expected">The expected Vector3 used for comparison</param>
|
||
|
/// <param name="actual">The actual Vector3 to test</param>
|
||
|
/// <returns>True if the vectors are equals, false otherwise.</returns>
|
||
|
/// <example>
|
||
|
/// The following example shows how to verify if two Vector3 are equals
|
||
|
/// <code>
|
||
|
/// [TestFixture]
|
||
|
/// public class Vector3Test
|
||
|
/// {
|
||
|
/// [Test]
|
||
|
/// public void VerifyThat_TwoVector3ObjectsAreEqual()
|
||
|
/// {
|
||
|
/// //Custom error 10e-6f
|
||
|
/// var actual = new Vector3(10e-8f, 10e-8f, 10e-8f);
|
||
|
/// var expected = new Vector3(0f, 0f, 0f);
|
||
|
/// var comparer = new Vector3EqualityComparer(10e-6f);
|
||
|
///
|
||
|
///
|
||
|
/// Assert.That(actual, Is.EqualTo(expected).Using(comparer));
|
||
|
///
|
||
|
/// //Default error 0.0001f
|
||
|
/// actual = new Vector3(0.01f, 0.01f, 0f);
|
||
|
/// expected = new Vector3(0.01f, 0.01f, 0f);
|
||
|
///
|
||
|
/// Assert.That(actual, Is.EqualTo(expected).Using(Vector3EqualityComparer.Instance));
|
||
|
/// }
|
||
|
/// }
|
||
|
/// </code>
|
||
|
///</example>
|
||
|
|
||
|
public bool Equals(Vector3 expected, Vector3 actual)
|
||
|
{
|
||
|
return Utils.AreFloatsEqual(expected.x, actual.x, AllowedError) &&
|
||
|
Utils.AreFloatsEqual(expected.y, actual.y, AllowedError) &&
|
||
|
Utils.AreFloatsEqual(expected.z, actual.z, AllowedError);
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// Serves as the default hash function.
|
||
|
/// </summary>
|
||
|
/// <param name="vec3">A not null Vector3</param>
|
||
|
/// <returns>Returns 0</returns>
|
||
|
public int GetHashCode(Vector3 vec3)
|
||
|
{
|
||
|
return 0;
|
||
|
}
|
||
|
}
|
||
|
}
|