NanoBrain-unitypackage/test/DirectionTest.cs
Pascal Serrarens 841d923fed Squashed 'Assets/NanoBrain/LinearAlgebra/' changes from 15c08f2..672f8bf
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
2026-01-07 11:33:48 +01:00

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