using System; using System.Collections.Generic; namespace UnityEngine.TestTools.Utils { /// /// Use this class to compare two Vector4 objects for equality with NUnit constraints. Call Vector4EqualityComparer.Instance to perform comparisons using default calculation error value 0.0001f. To set a custom test value, instantiate a new comparer using the one argument constructor. /// public class Vector4EqualityComparer : IEqualityComparer { private const float k_DefaultError = 0.0001f; private readonly float AllowedError; private static readonly Vector4EqualityComparer m_Instance = new Vector4EqualityComparer(); /// /// A comparer instance with the default calculation error value set to 0.0001f. /// public static Vector4EqualityComparer Instance { get { return m_Instance; } } private Vector4EqualityComparer() : this(k_DefaultError) {} /// /// Initializes an instance of Vector4Equality comparer with custom allowed calculation error. /// /// This value identifies the calculation error allowed. public Vector4EqualityComparer(float allowedError) { AllowedError = allowedError; } /// /// Compares the actual and expected Vector4 objects for equality using to compare the x, y, z, and w attributes of Vector4. /// /// The expected Vector4 used for comparison /// The actual Vector4 to test /// True if the vectors are equals, false otherwise. /// /// ///[TestFixture] /// public class Vector4Test /// { /// [Test] /// public void VerifyThat_TwoVector4ObjectsAreEqual() /// { /// // Custom error 10e-6f /// var actual = new Vector4(0, 0, 1e-6f, 1e-6f); /// var expected = new Vector4(1e-6f, 0f, 0f, 0f); /// var comparer = new Vector4EqualityComparer(10e-6f); /// /// Assert.That(actual, Is.EqualTo(expected).Using(comparer)); /// /// // Default error 0.0001f /// actual = new Vector4(0.01f, 0.01f, 0f, 0f); /// expected = new Vector4(0.01f, 0.01f, 0f, 0f); /// /// Assert.That(actual, Is.EqualTo(expected).Using(Vector4EqualityComparer.Instance)); /// } /// } /// /// public bool Equals(Vector4 expected, Vector4 actual) { return Utils.AreFloatsEqual(expected.x, actual.x, AllowedError) && Utils.AreFloatsEqual(expected.y, actual.y, AllowedError) && Utils.AreFloatsEqual(expected.z, actual.z, AllowedError) && Utils.AreFloatsEqual(expected.w, actual.w, AllowedError); } /// /// Serves as the default hash function. /// /// A not null Vector4 object /// Returns 0 public int GetHashCode(Vector4 vec4) { return 0; } } }