82 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
		
		
			
		
	
	
			82 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
|  | 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> | ||
|  |         /// <para>The following example shows how to verify if two Quaternion are equals</para> | ||
|  |         /// <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; | ||
|  |         } | ||
|  |     } | ||
|  | } |