123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- using System;
- using System.Collections.Generic;
-
- namespace UnityEngine.TestTools.Utils
- {
- /// <summary>
- /// 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.
- /// </summary>
- public class QuaternionEqualityComparer : IEqualityComparer<Quaternion>
- {
- private const float k_DefaultError = 0.00001f;
- private readonly float AllowedError;
-
- private static readonly QuaternionEqualityComparer m_Instance = new QuaternionEqualityComparer();
- /// <summary>
- ///A comparer instance with the default error value 0.00001f.
- /// </summary>
- public static QuaternionEqualityComparer Instance { get { return m_Instance; } }
-
-
- private QuaternionEqualityComparer() : this(k_DefaultError) {}
- /// <summary>
- /// Creates an instance of the comparer with a custom allowed error value.
- /// </summary>
- /// <param name="allowedError">Describes the custom allowed error value</param>
- public QuaternionEqualityComparer(float allowedError)
- {
- AllowedError = allowedError;
- }
-
- /// <summary>
- /// Compares the actual and expected Quaternion objects
- /// for equality using the <see cref="Quaternion.Dot "/> method.
- /// </summary>
- /// <param name="expected">Expected Quaternion value used for comparison</param>
- /// <param name="actual">Actual Quaternion value to test</param>
- /// <returns>True if the quaternion are equals, false otherwise.</returns>
- /// <example>
- /// The following example shows how to verify if two Quaternion are equals
- /// <code>
- /// [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));
- /// }
- /// }
- /// </code>
- /// </example>
- public bool Equals(Quaternion expected, Quaternion actual)
- {
- return Mathf.Abs(Quaternion.Dot(expected, actual)) > (1.0f - AllowedError);
- }
-
- /// <summary>
- /// Serves as the default hash function.
- /// </summary>
- /// <param name="quaternion">A not null Quaternion</param>
- /// <returns>Returns 0</returns>
- public int GetHashCode(Quaternion quaternion)
- {
- return 0;
- }
- }
- }
|