using System; using System.Collections.Generic; namespace UnityEngine.TestTools.Utils { /// /// Use this utility to compare two Quaternion objects for equality /// with NUnit assertion constraints. /// Use the static instance QuaternionEqualityComparer.Instance /// to have the default calculation error value set to 0.00001f. /// For any other custom error value, use the one argument constructor. /// public class QuaternionEqualityComparer : IEqualityComparer { private const float k_DefaultError = 0.00001f; private readonly float AllowedError; private static readonly QuaternionEqualityComparer m_Instance = new QuaternionEqualityComparer(); /// ///A comparer instance with the default error value 0.00001f. /// public static QuaternionEqualityComparer Instance { get { return m_Instance; } } private QuaternionEqualityComparer() : this(k_DefaultError) {} /// /// Creates an instance of the comparer with a custom allowed error value. /// /// Describes the custom allowed error value public QuaternionEqualityComparer(float allowedError) { AllowedError = allowedError; } /// /// Compares the actual and expected Quaternion objects /// for equality using the method. /// /// Expected Quaternion value used for comparison /// Actual Quaternion value to test /// True if the quaternion are equals, false otherwise. /// /// The following example shows how to verify if two Quaternion are equals /// /// [TestFixture] /// public class QuaternionTest /// { /// [Test] /// public void VerifyThat_TwoQuaternionsAreEqual() /// { /// var actual = new Quaternion(10f, 0f, 0f, 0f); /// var expected = new Quaternion(1f, 10f, 0f, 0f); /// var comparer = new QuaternionEqualityComparer(10e-6f); /// /// Assert.That(actual, Is.EqualTo(expected).Using(comparer)); /// /// //Using default error 0.00001f /// actual = new Quaternion(10f, 0f, 0.1f, 0f); /// expected = new Quaternion(1f, 10f, 0.1f, 0f); /// /// Assert.That(actual, Is.EqualTo(expected).Using(QuaternionEqualityComparer.Instance)); /// } /// } /// /// public bool Equals(Quaternion expected, Quaternion actual) { return Mathf.Abs(Quaternion.Dot(expected, actual)) > (1.0f - AllowedError); } /// /// Serves as the default hash function. /// /// A not null Quaternion /// Returns 0 public int GetHashCode(Quaternion quaternion) { return 0; } } }