summaryrefslogtreecommitdiff
path: root/Plugins/MonoGame.Extended/tests/MonoGame.Extended.Tests/AngleTest.cs
diff options
context:
space:
mode:
authorchai <215380520@qq.com>2024-06-03 10:15:45 +0800
committerchai <215380520@qq.com>2024-06-03 10:15:45 +0800
commitacea7b2e728787a0d83bbf83c8c1f042d2c32e7e (patch)
tree0bfec05c1ca2d71be2c337bcd110a0421f19318b /Plugins/MonoGame.Extended/tests/MonoGame.Extended.Tests/AngleTest.cs
parent88febcb02bf127d961c6471d9e846c0e1315f5c3 (diff)
+ plugins project
Diffstat (limited to 'Plugins/MonoGame.Extended/tests/MonoGame.Extended.Tests/AngleTest.cs')
-rw-r--r--Plugins/MonoGame.Extended/tests/MonoGame.Extended.Tests/AngleTest.cs92
1 files changed, 92 insertions, 0 deletions
diff --git a/Plugins/MonoGame.Extended/tests/MonoGame.Extended.Tests/AngleTest.cs b/Plugins/MonoGame.Extended/tests/MonoGame.Extended.Tests/AngleTest.cs
new file mode 100644
index 0000000..2f2762b
--- /dev/null
+++ b/Plugins/MonoGame.Extended/tests/MonoGame.Extended.Tests/AngleTest.cs
@@ -0,0 +1,92 @@
+using Microsoft.Xna.Framework;
+using Xunit;
+
+namespace MonoGame.Extended.Tests
+{
+ public class AngleTest
+ {
+ private const float _delta = 0.00001f;
+ private readonly WithinDeltaEqualityComparer _withinDeltaEqualityComparer = new(_delta);
+
+ [Fact]
+ public void ConstructorTest()
+ {
+ const float value = 0.5f;
+
+ // ReSharper disable once RedundantArgumentDefaultValue
+ var radians = new Angle(value, AngleType.Radian);
+ var degrees = new Angle(value, AngleType.Degree);
+ var gradians = new Angle(value, AngleType.Gradian);
+ var revolutions = new Angle(value, AngleType.Revolution);
+
+ Assert.Equal(0.5f, radians.Radians, _withinDeltaEqualityComparer);
+ Assert.Equal(0.5f, degrees.Degrees, _withinDeltaEqualityComparer);
+ Assert.Equal(0.5f, gradians.Gradians, _withinDeltaEqualityComparer);
+ Assert.Equal(0.5f, revolutions.Revolutions, _withinDeltaEqualityComparer);
+ }
+
+ [Fact]
+ public void ConversionTest()
+ {
+ //from radians
+ var radians = new Angle(MathHelper.Pi);
+ Assert.Equal(180f, radians.Degrees, _withinDeltaEqualityComparer);
+ Assert.Equal(200f, radians.Gradians, _withinDeltaEqualityComparer);
+ Assert.Equal(0.5f, radians.Revolutions, _withinDeltaEqualityComparer);
+
+ //to radians
+ var degrees = new Angle(180f, AngleType.Degree);
+ var gradians = new Angle(200f, AngleType.Gradian);
+ var revolutions = new Angle(0.5f, AngleType.Revolution);
+
+ Assert.Equal(MathHelper.Pi, degrees.Radians, _withinDeltaEqualityComparer);
+ Assert.Equal(MathHelper.Pi, gradians.Radians, _withinDeltaEqualityComparer);
+ Assert.Equal(MathHelper.Pi, revolutions.Radians, _withinDeltaEqualityComparer);
+ }
+
+ [Fact]
+ public void WrapTest()
+ {
+ for (var f = -10f; f < 10f; f += 0.1f)
+ {
+ var wrappositive = new Angle(f);
+ wrappositive.WrapPositive();
+
+ var wrap = new Angle(f);
+ wrap.Wrap();
+
+ Assert.True(wrappositive.Radians >= 0);
+ Assert.True(wrappositive.Radians < 2d * MathHelper.Pi);
+
+ Assert.True(wrap.Radians >= -MathHelper.Pi);
+ Assert.True(wrap.Radians < MathHelper.Pi);
+ }
+ }
+
+ [Fact]
+ public void VectorTest()
+ {
+ var angle = Angle.FromVector(Vector2.One);
+ Assert.Equal(-MathHelper.Pi / 4f, angle.Radians, _withinDeltaEqualityComparer);
+ Assert.Equal(10f, angle.ToVector(10f).Length());
+
+ angle = Angle.FromVector(Vector2.UnitX);
+ Assert.Equal(0, angle.Radians, _withinDeltaEqualityComparer);
+ Assert.True(Vector2.UnitX.EqualsWithTolerence(angle.ToUnitVector()));
+
+ angle = Angle.FromVector(-Vector2.UnitY);
+ Assert.Equal(MathHelper.Pi / 2f, angle.Radians, _withinDeltaEqualityComparer);
+ Assert.True((-Vector2.UnitY).EqualsWithTolerence(angle.ToUnitVector()));
+ }
+
+ [Fact]
+ public void EqualsTest()
+ {
+ var angle1 = new Angle(0);
+ var angle2 = new Angle(MathHelper.Pi * 2f);
+ Assert.True(angle1 == angle2);
+ angle2.Radians = MathHelper.Pi * 4f;
+ Assert.True(angle1.Equals(angle2));
+ }
+ }
+}