AngleTest.cs 3.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. using Microsoft.Xna.Framework;
  2. using Xunit;
  3. namespace MonoGame.Extended.Tests
  4. {
  5. public class AngleTest
  6. {
  7. private const float _delta = 0.00001f;
  8. private readonly WithinDeltaEqualityComparer _withinDeltaEqualityComparer = new(_delta);
  9. [Fact]
  10. public void ConstructorTest()
  11. {
  12. const float value = 0.5f;
  13. // ReSharper disable once RedundantArgumentDefaultValue
  14. var radians = new Angle(value, AngleType.Radian);
  15. var degrees = new Angle(value, AngleType.Degree);
  16. var gradians = new Angle(value, AngleType.Gradian);
  17. var revolutions = new Angle(value, AngleType.Revolution);
  18. Assert.Equal(0.5f, radians.Radians, _withinDeltaEqualityComparer);
  19. Assert.Equal(0.5f, degrees.Degrees, _withinDeltaEqualityComparer);
  20. Assert.Equal(0.5f, gradians.Gradians, _withinDeltaEqualityComparer);
  21. Assert.Equal(0.5f, revolutions.Revolutions, _withinDeltaEqualityComparer);
  22. }
  23. [Fact]
  24. public void ConversionTest()
  25. {
  26. //from radians
  27. var radians = new Angle(MathHelper.Pi);
  28. Assert.Equal(180f, radians.Degrees, _withinDeltaEqualityComparer);
  29. Assert.Equal(200f, radians.Gradians, _withinDeltaEqualityComparer);
  30. Assert.Equal(0.5f, radians.Revolutions, _withinDeltaEqualityComparer);
  31. //to radians
  32. var degrees = new Angle(180f, AngleType.Degree);
  33. var gradians = new Angle(200f, AngleType.Gradian);
  34. var revolutions = new Angle(0.5f, AngleType.Revolution);
  35. Assert.Equal(MathHelper.Pi, degrees.Radians, _withinDeltaEqualityComparer);
  36. Assert.Equal(MathHelper.Pi, gradians.Radians, _withinDeltaEqualityComparer);
  37. Assert.Equal(MathHelper.Pi, revolutions.Radians, _withinDeltaEqualityComparer);
  38. }
  39. [Fact]
  40. public void WrapTest()
  41. {
  42. for (var f = -10f; f < 10f; f += 0.1f)
  43. {
  44. var wrappositive = new Angle(f);
  45. wrappositive.WrapPositive();
  46. var wrap = new Angle(f);
  47. wrap.Wrap();
  48. Assert.True(wrappositive.Radians >= 0);
  49. Assert.True(wrappositive.Radians < 2d * MathHelper.Pi);
  50. Assert.True(wrap.Radians >= -MathHelper.Pi);
  51. Assert.True(wrap.Radians < MathHelper.Pi);
  52. }
  53. }
  54. [Fact]
  55. public void VectorTest()
  56. {
  57. var angle = Angle.FromVector(Vector2.One);
  58. Assert.Equal(-MathHelper.Pi / 4f, angle.Radians, _withinDeltaEqualityComparer);
  59. Assert.Equal(10f, angle.ToVector(10f).Length());
  60. angle = Angle.FromVector(Vector2.UnitX);
  61. Assert.Equal(0, angle.Radians, _withinDeltaEqualityComparer);
  62. Assert.True(Vector2.UnitX.EqualsWithTolerence(angle.ToUnitVector()));
  63. angle = Angle.FromVector(-Vector2.UnitY);
  64. Assert.Equal(MathHelper.Pi / 2f, angle.Radians, _withinDeltaEqualityComparer);
  65. Assert.True((-Vector2.UnitY).EqualsWithTolerence(angle.ToUnitVector()));
  66. }
  67. [Fact]
  68. public void EqualsTest()
  69. {
  70. var angle1 = new Angle(0);
  71. var angle2 = new Angle(MathHelper.Pi * 2f);
  72. Assert.True(angle1 == angle2);
  73. angle2.Radians = MathHelper.Pi * 4f;
  74. Assert.True(angle1.Equals(angle2));
  75. }
  76. }
  77. }