No Description
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

QuaternionEqualityComparer.cs 3.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. using System;
  2. using System.Collections.Generic;
  3. namespace UnityEngine.TestTools.Utils
  4. {
  5. /// <summary>
  6. /// Use this utility to compare two Quaternion objects for equality
  7. /// with NUnit assertion constraints.
  8. /// Use the static instance QuaternionEqualityComparer.Instance
  9. /// to have the default calculation error value set to 0.00001f.
  10. /// For any other custom error value, use the one argument constructor.
  11. /// </summary>
  12. public class QuaternionEqualityComparer : IEqualityComparer<Quaternion>
  13. {
  14. private const float k_DefaultError = 0.00001f;
  15. private readonly float AllowedError;
  16. private static readonly QuaternionEqualityComparer m_Instance = new QuaternionEqualityComparer();
  17. /// <summary>
  18. ///A comparer instance with the default error value 0.00001f.
  19. /// </summary>
  20. public static QuaternionEqualityComparer Instance { get { return m_Instance; } }
  21. private QuaternionEqualityComparer() : this(k_DefaultError) {}
  22. /// <summary>
  23. /// Creates an instance of the comparer with a custom allowed error value.
  24. /// </summary>
  25. /// <param name="allowedError">Describes the custom allowed error value</param>
  26. public QuaternionEqualityComparer(float allowedError)
  27. {
  28. AllowedError = allowedError;
  29. }
  30. /// <summary>
  31. /// Compares the actual and expected Quaternion objects
  32. /// for equality using the <see cref="Quaternion.Dot "/> method.
  33. /// </summary>
  34. /// <param name="expected">Expected Quaternion value used for comparison</param>
  35. /// <param name="actual">Actual Quaternion value to test</param>
  36. /// <returns>True if the quaternion are equals, false otherwise.</returns>
  37. /// <example>
  38. /// The following example shows how to verify if two Quaternion are equals
  39. /// <code>
  40. /// [TestFixture]
  41. /// public class QuaternionTest
  42. /// {
  43. /// [Test]
  44. /// public void VerifyThat_TwoQuaternionsAreEqual()
  45. /// {
  46. /// var actual = new Quaternion(10f, 0f, 0f, 0f);
  47. /// var expected = new Quaternion(1f, 10f, 0f, 0f);
  48. /// var comparer = new QuaternionEqualityComparer(10e-6f);
  49. ///
  50. /// Assert.That(actual, Is.EqualTo(expected).Using(comparer));
  51. ///
  52. /// //Using default error 0.00001f
  53. /// actual = new Quaternion(10f, 0f, 0.1f, 0f);
  54. /// expected = new Quaternion(1f, 10f, 0.1f, 0f);
  55. ///
  56. /// Assert.That(actual, Is.EqualTo(expected).Using(QuaternionEqualityComparer.Instance));
  57. /// }
  58. /// }
  59. /// </code>
  60. /// </example>
  61. public bool Equals(Quaternion expected, Quaternion actual)
  62. {
  63. return Mathf.Abs(Quaternion.Dot(expected, actual)) > (1.0f - AllowedError);
  64. }
  65. /// <summary>
  66. /// Serves as the default hash function.
  67. /// </summary>
  68. /// <param name="quaternion">A not null Quaternion</param>
  69. /// <returns>Returns 0</returns>
  70. public int GetHashCode(Quaternion quaternion)
  71. {
  72. return 0;
  73. }
  74. }
  75. }