1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
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));
}
}
}
|