DifferenceTests.cs 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. using Xunit.Sdk;
  2. namespace Terminal.Gui.DrawingTests;
  3. public class DifferenceTests
  4. {
  5. [Fact]
  6. public void Difference_Rectangle_ExcludesFromRegion ()
  7. {
  8. var region = new Region (new (10, 10, 50, 50));
  9. region.Combine (new Rectangle (20, 20, 20, 20), RegionOp.Difference);
  10. Assert.False (region.Contains (25, 25));
  11. Assert.True (region.Contains (15, 15));
  12. }
  13. [Fact]
  14. public void Difference_Region_ExcludesRegions ()
  15. {
  16. var region1 = new Region (new (10, 10, 50, 50));
  17. var region2 = new Region (new (20, 20, 20, 20));
  18. region1.Combine (region2, RegionOp.Difference);
  19. Assert.False (region1.Contains (25, 25));
  20. Assert.True (region1.Contains (15, 15));
  21. }
  22. [Fact]
  23. public void Difference_WithRectangle_ExcludesRectangle ()
  24. {
  25. var region = new Region (new (10, 10, 50, 50));
  26. var rect = new Rectangle (30, 30, 50, 50);
  27. region.Combine (rect, RegionOp.Difference);
  28. Assert.True (region.Contains (20, 20));
  29. Assert.False (region.Contains (35, 35));
  30. }
  31. [Fact]
  32. public void Difference_WithRegion_ExcludesRegion ()
  33. {
  34. var region1 = new Region (new (10, 10, 50, 50));
  35. var region2 = new Region (new (30, 30, 50, 50));
  36. region1.Combine (region2, RegionOp.Difference);
  37. Assert.True (region1.Contains (20, 20));
  38. Assert.False (region1.Contains (35, 35));
  39. }
  40. [Fact]
  41. public void Difference_ContainedRectangle_ExcludesRectangle ()
  42. {
  43. /*
  44. INPUT: (top-left origin, x→, y↓):
  45. x=0 1 2 3 4 5
  46. y=0 A A A A A A
  47. y=1 A A A A A A
  48. y=2 A A B B A A
  49. y=3 A A B B A A
  50. y=4 A A A A A A
  51. y=5 A A A A A A
  52. */
  53. var regionA = new Region (new (0, 0, 6, 6));
  54. var rectangleB = new Rectangle (2, 2, 2, 2);
  55. regionA.Combine (rectangleB, RegionOp.Difference);
  56. Assert.True (regionA.Contains (0, 0));
  57. Assert.True (regionA.Contains (1, 1));
  58. Assert.True (regionA.Contains (4, 4));
  59. Assert.True (regionA.Contains (5, 5));
  60. Assert.False (regionA.Contains (2, 2));
  61. Assert.False (regionA.Contains (3, 3));
  62. }
  63. [Fact]
  64. public void Difference_ContainedRegion_ExcludesRegion ()
  65. {
  66. /*
  67. INPUT: (top-left origin, x→, y↓):
  68. x=0 1 2 3 4 5
  69. y=0 A A A A A A
  70. y=1 A A A A A A
  71. y=2 A A B B A A
  72. y=3 A A B B A A
  73. y=4 A A A A A A
  74. y=5 A A A A A A
  75. */
  76. var regionA = new Region (new (0, 0, 6, 6));
  77. var regionB = new Region (new (2, 2, 2, 2));
  78. regionA.Combine (regionB, RegionOp.Difference);
  79. Assert.True (regionA.Contains (0, 0));
  80. Assert.True (regionA.Contains (1, 1));
  81. Assert.True (regionA.Contains (4, 4));
  82. Assert.True (regionA.Contains (5, 5));
  83. Assert.False (regionA.Contains (2, 2));
  84. Assert.False (regionA.Contains (3, 3));
  85. }
  86. [Fact]
  87. public void Difference_NonRectangularRegion_ExcludesRegion ()
  88. {
  89. /*
  90. INPUT: (top-left origin, x→, y↓):
  91. x=0 1 2 3 4 5
  92. y=0 A A A A A A
  93. y=1 A A A A A A
  94. y=2 A A B B A A
  95. y=3 A A B A A A
  96. y=4 A A A A A A
  97. y=5 A A A A A A
  98. */
  99. var regionA = new Region (new (0, 0, 6, 6));
  100. var regionB = new Region ();
  101. regionB.Combine (new Rectangle (2, 2, 2, 1), RegionOp.MinimalUnion);
  102. regionB.Combine (new Rectangle (2, 3, 1, 1), RegionOp.MinimalUnion);
  103. // regionB is a non-rectangular region that looks like this:
  104. // x= 0 1 2 3 4 5
  105. // y=0 . . . . . .
  106. // y=1 . . . . . .
  107. // y=2 . . B B . .
  108. // y=3 . . B . . .
  109. // y=4 . . . . . .
  110. // y=5 . . . . . .
  111. Assert.True (regionB.Contains (2, 2));
  112. Assert.True (regionB.Contains (3, 2));
  113. Assert.True (regionB.Contains (2, 3));
  114. Assert.False (regionB.Contains (3, 3));
  115. regionA.Combine (regionB, RegionOp.Difference);
  116. Assert.True (regionA.Contains (0, 0));
  117. Assert.True (regionA.Contains (1, 1));
  118. Assert.True (regionA.Contains (3, 3));
  119. Assert.True (regionA.Contains (4, 4));
  120. Assert.True (regionA.Contains (5, 5));
  121. Assert.False (regionA.Contains (2, 2));
  122. Assert.False (regionA.Contains (3, 2));
  123. Assert.False (regionA.Contains (2, 3));
  124. }
  125. }