#if !UNITY_5_6_OR_NEWER using NUnit.Framework; namespace LinearAlgebra.Test { [TestFixture] public class SwingTwistTest { [Test] public void Degrees_CreatesSwingTwistWithDegreeAngles() { SwingTwist st = SwingTwist.Degrees(45, 30, 15); Assert.IsNotNull(st); Assert.AreEqual(45, st.swing.horizontal.inDegrees, 0.01f); Assert.AreEqual(30, st.swing.vertical.inDegrees, 0.01f); Assert.AreEqual(15, st.twist.inDegrees, 0.01f); } [Test] public void Radians_CreatesSwingTwistWithRadianAngles() { float pi = (float)System.Math.PI; SwingTwist st = SwingTwist.Radians(pi / 4, pi / 6, pi / 12); Assert.IsNotNull(st); Assert.AreEqual(45, st.swing.horizontal.inDegrees, 0.01f); Assert.AreEqual(30, st.swing.vertical.inDegrees, 0.01f); Assert.AreEqual(15, st.twist.inDegrees, 0.01f); } [Test] public void Zero_CreatesZeroRotation() { SwingTwist st = SwingTwist.zero; Assert.AreEqual(0, st.swing.horizontal.inDegrees, 0.01f); Assert.AreEqual(0, st.swing.vertical.inDegrees, 0.01f); Assert.AreEqual(0, st.twist.inDegrees, 0.01f); } [Test] public void QuaternionTest() { Quaternion q; SwingTwist s; Quaternion r; q = Quaternion.identity; s = SwingTwist.FromQuaternion(q); r = s.ToQuaternion(); Assert.AreEqual(q, r); q = Quaternion.Euler(90, 0, 0); s = SwingTwist.FromQuaternion(q); Assert.AreEqual(0, s.swing.horizontal.inDegrees, 10e-2f); Assert.AreEqual(90, s.swing.vertical.inDegrees, 10e-2f); Assert.AreEqual(0, s.twist.inDegrees, 0.01f); r = s.ToQuaternion(); Assert.AreEqual(0, Quaternion.UnsignedAngle(q, r), 10e-2f); q = Quaternion.Euler(0, 90, 0); s = SwingTwist.FromQuaternion(q); Assert.AreEqual(90, s.swing.horizontal.inDegrees,10e-2f); Assert.AreEqual(0, s.swing.vertical.inDegrees, 0.01f); Assert.AreEqual(0, s.twist.inDegrees, 0.01f); r = s.ToQuaternion(); Assert.AreEqual(0, Quaternion.UnsignedAngle(q, r), 10e-2f); q = Quaternion.Euler(0, 0, 90); s = SwingTwist.FromQuaternion(q); Assert.AreEqual(0, s.swing.horizontal.inDegrees, 0.01f); Assert.AreEqual(0, s.swing.vertical.inDegrees, 0.01f); Assert.AreEqual(90, s.twist.inDegrees, 0.01f); r = s.ToQuaternion(); Assert.AreEqual(0, Quaternion.UnsignedAngle(q, r), 10e-2f); q = Quaternion.Euler(0, 180, 0); s = SwingTwist.FromQuaternion(q); Assert.AreEqual(-180, s.swing.horizontal.inDegrees, 0.01f); Assert.AreEqual(0, s.swing.vertical.inDegrees, 0.01f); Assert.AreEqual(0, s.twist.inDegrees, 0.01f); r = s.ToQuaternion(); Assert.AreEqual(0, Quaternion.UnsignedAngle(q, r), 10e-2f); q = Quaternion.Euler(0, 135, 0); s = SwingTwist.FromQuaternion(q); Assert.AreEqual(135, s.swing.horizontal.inDegrees, 0.01f); Assert.AreEqual(0, s.swing.vertical.inDegrees, 0.01f); Assert.AreEqual(0, s.twist.inDegrees, 0.01f); r = s.ToQuaternion(); Assert.AreEqual(0, Quaternion.UnsignedAngle(q, r), 10e-2f); q = Quaternion.Euler(60, 45, 30); s = SwingTwist.FromQuaternion(q); Assert.AreEqual(45, s.swing.horizontal.inDegrees, 0.01f); Assert.AreEqual(60, s.swing.vertical.inDegrees, 0.01f); Assert.AreEqual(30, s.twist.inDegrees, 0.01f); // r = s.ToQuaternion(); // Assert.AreEqual(0, Quaternion.UnsignedAngle(q, r), 10e-2f); // q = Quaternion.Euler(-45, -30, -15); // s = SwingTwist.FromQuaternion(q); // Assert.AreEqual(-30, s.swing.horizontal.inDegrees, 0.01f); // Assert.AreEqual(-45, s.swing.vertical.inDegrees, 0.01f); // Assert.AreEqual(-15, s.twist.inDegrees, 0.01f); // r = s.ToQuaternion(); // Assert.AreEqual(0, Quaternion.UnsignedAngle(q, r), 10e-2f); // q = Quaternion.Euler(180, 180, 180); // s = SwingTwist.FromQuaternion(q); // Assert.AreEqual(-180, s.swing.horizontal.inDegrees, 0.01f); // Assert.AreEqual(-180, s.swing.vertical.inDegrees, 0.01f); // Assert.AreEqual(-180, s.twist.inDegrees, 0.01f); // r = s.ToQuaternion(); // Assert.AreEqual(0, Quaternion.UnsignedAngle(q, r), 10e-2f); } [Test] public void ToAngleAxis_ConvertsToSpherical() { SwingTwist st = SwingTwist.Degrees(45, 30, 15); Spherical s = st.ToAngleAxis(); Assert.IsNotNull(s); } [Test] public void FromAngleAxis_ConvertsFromSpherical() { Spherical s = new(90, Direction.Degrees(45, 0)); SwingTwist st = SwingTwist.FromAngleAxis(s); Assert.IsNotNull(st); } } } #endif