131 lines
5.3 KiB
C#
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 |