131 lines
5.3 KiB
C#

#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