672f8bf Spherical Average a278b7d Fix/Improve ToVector3 09d34d1 Prepare for spherical average b19e504 (A little) Performance improvements 2b0433f Fix normalizing direction 3e115cc Fix Direction.ToVector3 0eeedd2 Vector3 conversion fixes 3024562 Fix Unity warnings aa23d57 Fix roaming boid cdfe039 Improve Unity compatibility git-subtree-dir: Assets/NanoBrain/LinearAlgebra git-subtree-split: 672f8bfca1b1e0bc312df41142fa3c4447ce6dba
227 lines
7.7 KiB
C#
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
|
|
|