diff options
author | chai <215380520@qq.com> | 2024-06-03 10:15:45 +0800 |
---|---|---|
committer | chai <215380520@qq.com> | 2024-06-03 10:15:45 +0800 |
commit | acea7b2e728787a0d83bbf83c8c1f042d2c32e7e (patch) | |
tree | 0bfec05c1ca2d71be2c337bcd110a0421f19318b /Plugins/MonoGame.Extended/tests/MonoGame.Extended.Tests/AngleTest.cs | |
parent | 88febcb02bf127d961c6471d9e846c0e1315f5c3 (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.cs | 92 |
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)); + } + } +} |