RectangleFTests.cs 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. using Microsoft.Xna.Framework;
  2. using Xunit;
  3. namespace MonoGame.Extended.Tests.Primitives
  4. {
  5. public class RectangleFTests
  6. {
  7. [Fact]
  8. public void Rectangle_Intersects_Test()
  9. {
  10. var rect1 = new Rectangle(0, 0, 32, 32);
  11. var rect2 = new Rectangle(32, 32, 32, 32);
  12. Assert.False(rect1.Intersects(rect2));
  13. }
  14. [Fact]
  15. public void PassVector2AsConstructorParameter_Test()
  16. {
  17. var rect1 = new RectangleF(new Vector2(0, 0), new SizeF(12.34f, 56.78f));
  18. var rect2 = new RectangleF(new Vector2(0, 0), new Vector2(12.34f, 56.78f));
  19. Assert.Equal(rect1, rect2);
  20. }
  21. [Fact]
  22. public void PassPointAsConstructorParameter_Test()
  23. {
  24. var rect1 = new RectangleF(new Vector2(0, 0), new SizeF(12, 56));
  25. var rect2 = new RectangleF(new Vector2(0, 0), new SizeF(12, 56));
  26. Assert.Equal(rect1, rect2);
  27. }
  28. public class Transform
  29. {
  30. [Fact]
  31. public void Center_point_is_not_translated()
  32. {
  33. var rectangle = new RectangleF(new Vector2(0, 0), new SizeF(20, 30));
  34. var transform = Matrix3x2.Identity;
  35. var result = RectangleF.Transform(rectangle, ref transform);
  36. Assert.Equal(new Vector2(10, 15), result.Center);
  37. }
  38. [Fact]
  39. public void Center_point_is_translated()
  40. {
  41. var rectangleF = new RectangleF(new Vector2(0, 0), new SizeF(20, 30));
  42. var transform = Matrix3x2.CreateTranslation(1, 2);
  43. var result = RectangleF.Transform(rectangleF, ref transform);
  44. Assert.Equal(new Vector2(11, 17), result.Center);
  45. }
  46. [Fact]
  47. public void Size_is_not_changed_by_identity_transform()
  48. {
  49. var rectangle = new RectangleF(new Vector2(0, 0), new SizeF(20, 30));
  50. var transform = Matrix3x2.Identity;
  51. var result = RectangleF.Transform(rectangle, ref transform);
  52. Assert.Equal(new SizeF(20, 30), result.Size);
  53. }
  54. [Fact]
  55. public void Size_is_not_changed_by_translation()
  56. {
  57. var rectangle = new RectangleF(new Vector2(0, 0), new SizeF(20, 30));
  58. var transform = Matrix3x2.CreateTranslation(1, 2);
  59. var result = RectangleF.Transform(rectangle, ref transform);
  60. Assert.Equal(new SizeF(20, 30), result.Size);
  61. }
  62. [Fact]
  63. public void Applies_rotation_and_translation()
  64. {
  65. /* Rectangle with center point aligned in coordinate system with origin 0.
  66. *
  67. * :
  68. * :
  69. * +-+
  70. * | |
  71. * |p|
  72. * | |
  73. * ...............0-+............
  74. * :
  75. * :
  76. * :
  77. *
  78. * Rotate center point p, 90 degrees around origin 0.
  79. *
  80. * :
  81. * :
  82. * +---+
  83. * | p |
  84. * ...........+---0..............
  85. * :
  86. * :
  87. * :
  88. *
  89. * Then translate rectangle by x=10 and y=20.
  90. * :
  91. * : +---+
  92. * : | p |
  93. * y=21 - - - - - - - -> +---+
  94. * .
  95. * :
  96. * ...............0..............
  97. * :
  98. * :
  99. * :
  100. */
  101. var rectangle = new RectangleF(new Vector2(0, 0), new SizeF(2, 4));
  102. var transform =
  103. Matrix3x2.CreateRotationZ(MathHelper.PiOver2)
  104. *
  105. Matrix3x2.CreateTranslation(10, 20);
  106. var result = RectangleF.Transform(rectangle, ref transform);
  107. Assert.Equal(-2 + 10, result.Center.X, 6);
  108. Assert.Equal(1 + 20, result.Center.Y, 6);
  109. Assert.Equal(4, result.Size.Width, 6);
  110. Assert.Equal(2, result.Size.Height, 6);
  111. }
  112. }
  113. }
  114. }