mirror of
https://github.com/AlexMacocian/MonoGame.Extended.git
synced 2026-07-16 07:29:29 +00:00
93 lines
3.4 KiB
C#
93 lines
3.4 KiB
C#
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));
|
|
}
|
|
}
|
|
}
|