227 lines
7.7 KiB
C#

#if !UNITY_5_6_OR_NEWER
using System;
using NUnit.Framework;
namespace LinearAlgebra.Test {
public class DirectionTest {
[Test]
public void RadiansForward() {
Direction d = Direction.Radians(0, 0);
Assert.AreEqual(0, d.horizontal.inDegrees, 0.0001f);
Assert.AreEqual(0, d.vertical.inDegrees, 0.0001f);
}
[Test]
public void RadiansUp() {
Direction d = Direction.Radians(0, (float)Math.PI / 2);
Assert.AreEqual(0, d.horizontal.inDegrees, 0.0001f);
Assert.AreEqual(90, d.vertical.inDegrees, 0.0001f);
}
[Test]
public void RadiansDown() {
Direction d = Direction.Radians(0, -(float)Math.PI / 2);
Assert.AreEqual(0, d.horizontal.inDegrees, 0.0001f);
Assert.AreEqual(-90, d.vertical.inDegrees, 0.0001f);
}
[Test]
public void RadiansArbitrary() {
Direction d = Direction.Radians((float)Math.PI / 4, (float)Math.PI / 6);
Assert.AreEqual(45, d.horizontal.inDegrees, 0.0001f);
Assert.AreEqual(30, d.vertical.inDegrees, 0.0001f);
}
[Test]
public void DegreesNormalize1() {
Direction d = Direction.Degrees(112, 91);
Assert.AreEqual(-68, d.horizontal.inDegrees, 0.0001f);
Assert.AreEqual(89, d.vertical.inDegrees, 0.0001f);
}
[Test]
public void RadiansEquivalentToDegreesConversion() {
Direction d1 = Direction.Radians((float)Math.PI / 3, (float)Math.PI / 4);
Direction d2 = Direction.Degrees(60, 45);
Assert.AreEqual(d1.horizontal.inDegrees, d2.horizontal.inDegrees, 0.0001f);
Assert.AreEqual(d1.vertical.inDegrees, d2.vertical.inDegrees, 0.0001f);
}
[Test]
public void ToVector3Forward() {
Direction d = Direction.forward;
Vector3Float v = d.ToVector3();
Assert.AreEqual(0, v.horizontal, 0.0001f);
Assert.AreEqual(0, v.vertical, 0.0001f);
Assert.AreEqual(1, v.depth, 0.0001f);
}
[Test]
public void ToVector3Up() {
Direction d = Direction.up;
Vector3Float v = d.ToVector3();
Assert.AreEqual(0, v.horizontal, 0.0001f);
Assert.AreEqual(1, v.vertical, 0.0001f);
Assert.AreEqual(0, v.depth, 0.0001f);
}
[Test]
public void ToVector3Down() {
Direction d = Direction.down;
Vector3Float v = d.ToVector3();
Assert.AreEqual(0, v.horizontal, 0.0001f);
Assert.AreEqual(-1, v.vertical, 0.0001f);
Assert.AreEqual(0, v.depth, 0.0001f);
}
[Test]
public void ToVector3Left() {
Direction d = Direction.left;
Vector3Float v = d.ToVector3();
Assert.AreEqual(-1, v.horizontal, 0.0001f);
Assert.AreEqual(0, v.vertical, 0.0001f);
Assert.AreEqual(0, v.depth, 0.0001f);
}
[Test]
public void FromVector3Forward() {
Vector3Float v = new(0, 0, 1);
Direction d = Direction.FromVector3(v);
Assert.AreEqual(0, d.horizontal.inDegrees, 0.0001f);
Assert.AreEqual(0, d.vertical.inDegrees, 0.0001f);
}
[Test]
public void ToVector3AndBack() {
Direction d1 = Direction.Degrees(45, 30);
Vector3Float v = d1.ToVector3();
Direction d2 = Direction.FromVector3(v);
Assert.AreEqual(d1.horizontal.inDegrees, d2.horizontal.inDegrees, 0.0001f);
Assert.AreEqual(d1.vertical.inDegrees, d2.vertical.inDegrees, 0.0001f);
}
[Test]
public void ToVector3AndBack2() {
Direction d1 = Direction.Degrees(-135, 85);
Vector3Float v = d1.ToVector3();
Direction d2 = Direction.FromVector3(v);
Assert.AreEqual(d1.horizontal.inDegrees, d2.horizontal.inDegrees, 0.0001f);
Assert.AreEqual(d1.vertical.inDegrees, d2.vertical.inDegrees, 0.0001f);
}
[Test]
public void Compare() {
Direction d1 = Direction.Degrees(45, 135);
Direction d2 = new(AngleFloat.Degrees(45), AngleFloat.Degrees(135));
bool r;
r = d1 == d2;
Assert.True(r);
Assert.AreEqual(d1, d2);
}
[Test]
public void NotEqualWithDifferentHorizontal() {
Direction d1 = Direction.Degrees(45, 30);
Direction d2 = Direction.Degrees(90, 30);
Assert.True(d1 != d2);
}
[Test]
public void NotEqualWithDifferentVertical() {
Direction d1 = Direction.Degrees(45, 30);
Direction d2 = Direction.Degrees(45, 60);
Assert.True(d1 != d2);
}
[Test]
public void NotEqualWithDifferentBoth() {
Direction d1 = Direction.Degrees(45, 30);
Direction d2 = Direction.Degrees(90, 60);
Assert.True(d1 != d2);
}
[Test]
public void NotEqualWithSameValues() {
Direction d1 = Direction.Degrees(45, 30);
Direction d2 = Direction.Degrees(45, 30);
Assert.False(d1 != d2);
}
[Test]
public void EqualsWithSameValues() {
Direction d1 = Direction.Degrees(45, 30);
Direction d2 = Direction.Degrees(45, 30);
Assert.True(d1.Equals(d2));
}
[Test]
public void EqualsWithDifferentHorizontal() {
Direction d1 = Direction.Degrees(45, 30);
Direction d2 = Direction.Degrees(90, 30);
Assert.False(d1.Equals(d2));
}
[Test]
public void EqualsWithDifferentVertical() {
Direction d1 = Direction.Degrees(45, 30);
Direction d2 = Direction.Degrees(45, 60);
Assert.False(d1.Equals(d2));
}
[Test]
public void EqualsWithDifferentBoth() {
Direction d1 = Direction.Degrees(45, 30);
Direction d2 = Direction.Degrees(90, 60);
Assert.False(d1.Equals(d2));
}
[Test]
public void EqualsWithNonDirectionObject() {
Direction d = Direction.Degrees(45, 30);
Assert.False(d.Equals("not a direction"));
}
[Test]
public void EqualsWithNull() {
Direction d = Direction.Degrees(45, 30);
Assert.False(d.Equals(null));
}
[Test]
public void EqualsWithZeros() {
Direction d1 = Direction.forward;
Direction d2 = Direction.Degrees(0, 0);
Assert.True(d1.Equals(d2));
}
[Test]
public void HashCode() {
Direction d1 = Direction.Degrees(45, 30);
Direction d2 = Direction.Degrees(45, 30);
Assert.AreEqual(d1.GetHashCode(), d2.GetHashCode());
d1 = Direction.Degrees(45, 30);
d2 = Direction.Degrees(90, 30);
Assert.AreNotEqual(d1.GetHashCode(), d2.GetHashCode());
d1 = Direction.Degrees(45, 30);
d2 = Direction.Degrees(45, 60);
Assert.AreNotEqual(d1.GetHashCode(), d2.GetHashCode());
Direction d = Direction.Degrees(45, 30);
int hash1 = d.GetHashCode();
int hash2 = d.GetHashCode();
Assert.AreEqual(hash1, hash2);
d1 = Direction.forward;
d2 = Direction.Degrees(0, 0);
Assert.AreEqual(d1.GetHashCode(), d2.GetHashCode());
}
};
}
#endif