using System; using System.Collections.Generic; namespace UnityEngine.TestTools.Utils { /// /// Use this class to compare two Vector2 objects for /// equality with NUnit constraints. Use the static /// /// to have the calculation error value set to default 0.0001f. /// For any other error value, instantiate a new comparer /// object with the one argument constructor. /// public class Vector2EqualityComparer : IEqualityComparer { private const float k_DefaultError = 0.0001f; private readonly float AllowedError; private static readonly Vector2EqualityComparer m_Instance = new Vector2EqualityComparer(); /// /// A comparer instance with the default error value set to 0.0001f. /// public static Vector2EqualityComparer Instance { get { return m_Instance; } } private Vector2EqualityComparer() : this(k_DefaultError) { } /// /// Initializes an instance of Vector2Equality comparer with custom allowed calculation error. /// /// This value identifies the calculation error allowed. public Vector2EqualityComparer(float error) { AllowedError = error; } /// /// Compares the actual and expected Vector2 objects for equality using the method. /// /// The expected Vector2 used for comparison /// The actual Vector2 to test /// True if the vectors are equals, false otherwise. /// /// The following example shows how to verify if two Vector2 are equals /// ///[TestFixture] /// public class Vector2Test /// { /// [Test] /// public void VerifyThat_TwoVector2ObjectsAreEqual() /// { /// // Custom calculation error /// var actual = new Vector2(10e-7f, 10e-7f); /// var expected = new Vector2(0f, 0f); /// var comparer = new Vector2EqualityComparer(10e-6f); /// /// Assert.That(actual, Is.EqualTo(expected).Using(comparer)); /// /// //Default error 0.0001f /// actual = new Vector2(0.01f, 0.01f); /// expected = new Vector2(0.01f, 0.01f); /// /// Assert.That(actual, Is.EqualTo(expected).Using(Vector2EqualityComparer.Instance)); /// } /// } /// /// public bool Equals(Vector2 expected, Vector2 actual) { return Utils.AreFloatsEqual(expected.x, actual.x, AllowedError) && Utils.AreFloatsEqual(expected.y, actual.y, AllowedError); } /// /// Serves as the default hash function. /// /// A not null Vector2 /// Returns 0 public int GetHashCode(Vector2 vec2) { return 0; } } }