A stealth-based 2D platformer where you don't have to kill anyone unless you want to. https://www.semicolin.games
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

283 lines
7.1 KiB

  1. using Microsoft.Xna.Framework;
  2. using System;
  3. using System.Collections.Generic;
  4. using Xunit;
  5. namespace SemiColinGames.Tests {
  6. public class LineTests {
  7. [Fact]
  8. public void TestRasterizeSinglePoint() {
  9. var p1 = new Point(10, 10);
  10. var expected = new Point[] { p1 };
  11. var result = new List<Point>();
  12. Line.Rasterize(p1, p1, result);
  13. Assert.Equal(expected, result);
  14. }
  15. [Fact]
  16. public void TestRasterizeHorizontal() {
  17. var p1 = new Point(10, 10);
  18. var p2 = new Point(15, 10);
  19. var expected = new Point[] {
  20. new Point(10, 10),
  21. new Point(11, 10),
  22. new Point(12, 10),
  23. new Point(13, 10),
  24. new Point(14, 10),
  25. new Point(15, 10)
  26. };
  27. var result = new List<Point>();
  28. Line.Rasterize(p1, p2, result);
  29. Assert.Equal(expected, result);
  30. }
  31. [Fact]
  32. public void TestRasterizeHorizontalReverse() {
  33. var p1 = new Point(15, 10);
  34. var p2 = new Point(10, 10);
  35. var expected = new Point[] {
  36. new Point(15, 10),
  37. new Point(14, 10),
  38. new Point(13, 10),
  39. new Point(12, 10),
  40. new Point(11, 10),
  41. new Point(10, 10)
  42. };
  43. var result = new List<Point>();
  44. Line.Rasterize(p1, p2, result);
  45. Assert.Equal(expected, result);
  46. }
  47. [Fact]
  48. public void TestRasterizeVertical() {
  49. var p1 = new Point(10, 10);
  50. var p2 = new Point(10, 15);
  51. var expected = new Point[] {
  52. new Point(10, 10),
  53. new Point(10, 11),
  54. new Point(10, 12),
  55. new Point(10, 13),
  56. new Point(10, 14),
  57. new Point(10, 15)
  58. };
  59. var result = new List<Point>();
  60. Line.Rasterize(p1, p2, result);
  61. Assert.Equal(expected, result);
  62. }
  63. [Fact]
  64. public void TestRasterizeVerticalReverse() {
  65. var p1 = new Point(10, 15);
  66. var p2 = new Point(10, 10);
  67. var expected = new Point[] {
  68. new Point(10, 15),
  69. new Point(10, 14),
  70. new Point(10, 13),
  71. new Point(10, 12),
  72. new Point(10, 11),
  73. new Point(10, 10)
  74. };
  75. var result = new List<Point>();
  76. Line.Rasterize(p1, p2, result);
  77. Assert.Equal(expected, result);
  78. }
  79. [Fact]
  80. public void TestRasterizeDiagonalPosPos() {
  81. var p1 = new Point(0, 0);
  82. var p2 = new Point(5, 5);
  83. var expected = new Point[] {
  84. new Point(0, 0),
  85. new Point(1, 1),
  86. new Point(2, 2),
  87. new Point(3, 3),
  88. new Point(4, 4),
  89. new Point(5, 5)
  90. };
  91. var result = new List<Point>();
  92. Line.Rasterize(p1, p2, result);
  93. Assert.Equal(expected, result);
  94. }
  95. [Fact]
  96. public void TestRasterizeDiagonalPosNeg() {
  97. var p1 = new Point(0, 5);
  98. var p2 = new Point(5, 0);
  99. var expected = new Point[] {
  100. new Point(0, 5),
  101. new Point(1, 4),
  102. new Point(2, 3),
  103. new Point(3, 2),
  104. new Point(4, 1),
  105. new Point(5, 0)
  106. };
  107. var result = new List<Point>();
  108. Line.Rasterize(p1, p2, result);
  109. Assert.Equal(expected, result);
  110. }
  111. [Fact]
  112. public void TestRasterizeDiagonalNegPos() {
  113. var p1 = new Point(5, 0);
  114. var p2 = new Point(0, 5);
  115. var expected = new Point[] {
  116. new Point(5, 0),
  117. new Point(4, 1),
  118. new Point(3, 2),
  119. new Point(2, 3),
  120. new Point(1, 4),
  121. new Point(0, 5)
  122. };
  123. var result = new List<Point>();
  124. Line.Rasterize(p1, p2, result);
  125. Assert.Equal(expected, result);
  126. }
  127. [Fact]
  128. public void TestRasterizeDiagonalNegNeg() {
  129. var p1 = new Point(5, 5);
  130. var p2 = new Point(0, 0);
  131. var expected = new Point[] {
  132. new Point(5, 5),
  133. new Point(4, 4),
  134. new Point(3, 3),
  135. new Point(2, 2),
  136. new Point(1, 1),
  137. new Point(0, 0)
  138. };
  139. var result = new List<Point>();
  140. Line.Rasterize(p1, p2, result);
  141. Assert.Equal(expected, result);
  142. }
  143. [Fact]
  144. public void TestRasterizeDoubleSlope() {
  145. var p1 = new Point(0, 0);
  146. var p2 = new Point(4, 9);
  147. var expected = new Point[] {
  148. new Point(0, 0),
  149. new Point(0, 1),
  150. new Point(1, 2),
  151. new Point(1, 3),
  152. new Point(2, 4),
  153. new Point(2, 5),
  154. new Point(3, 6),
  155. new Point(3, 7),
  156. new Point(4, 8),
  157. new Point(4, 9)
  158. };
  159. var result = new List<Point>();
  160. Line.Rasterize(p1, p2, result);
  161. Assert.Equal(expected, result);
  162. }
  163. [Fact]
  164. public void TestRasterizeDoubleSlopePlusOne() {
  165. var p1 = new Point(0, 0);
  166. var p2 = new Point(5, 10);
  167. var expected = new Point[] {
  168. new Point(0, 0),
  169. new Point(1, 1),
  170. new Point(1, 2),
  171. new Point(2, 3),
  172. new Point(2, 4),
  173. new Point(3, 5),
  174. new Point(3, 6),
  175. new Point(4, 7),
  176. new Point(4, 8),
  177. new Point(5, 9),
  178. new Point(5, 10)
  179. };
  180. var result = new List<Point>();
  181. Line.Rasterize(p1, p2, result);
  182. Assert.Equal(expected, result);
  183. }
  184. [Fact]
  185. public void TestRasterizeDoubleSlopePlusOneReverse() {
  186. var p1 = new Point(5, 10);
  187. var p2 = new Point(0, 0);
  188. var expected = new Point[] {
  189. new Point(5, 10),
  190. new Point(4, 9),
  191. new Point(4, 8),
  192. new Point(3, 7),
  193. new Point(3, 6),
  194. new Point(2, 5),
  195. new Point(2, 4),
  196. new Point(1, 3),
  197. new Point(1, 2),
  198. new Point(0, 1),
  199. new Point(0, 0)
  200. };
  201. var result = new List<Point>();
  202. Line.Rasterize(p1, p2, result);
  203. Assert.Equal(expected, result);
  204. }
  205. [Fact]
  206. public void TestRasterizeHalfSlope() {
  207. var p1 = new Point(0, 0);
  208. var p2 = new Point(9, 4);
  209. var expected = new Point[] {
  210. new Point(0, 0),
  211. new Point(1, 0),
  212. new Point(2, 1),
  213. new Point(3, 1),
  214. new Point(4, 2),
  215. new Point(5, 2),
  216. new Point(6, 3),
  217. new Point(7, 3),
  218. new Point(8, 4),
  219. new Point(9, 4)
  220. };
  221. var result = new List<Point>();
  222. Line.Rasterize(p1, p2, result);
  223. Assert.Equal(expected, result);
  224. }
  225. [Fact]
  226. public void TestRasterizeHalfSlopePlusOne() {
  227. var p1 = new Point(0, 0);
  228. var p2 = new Point(10, 5);
  229. var expected = new Point[] {
  230. new Point(0, 0),
  231. new Point(1, 1),
  232. new Point(2, 1),
  233. new Point(3, 2),
  234. new Point(4, 2),
  235. new Point(5, 3),
  236. new Point(6, 3),
  237. new Point(7, 4),
  238. new Point(8, 4),
  239. new Point(9, 5),
  240. new Point(10, 5)
  241. };
  242. var result = new List<Point>();
  243. Line.Rasterize(p1, p2, result);
  244. Assert.Equal(expected, result);
  245. }
  246. [Fact]
  247. public void TestRasterizeHalfSlopePlusOneReverse() {
  248. var p1 = new Point(10, 5);
  249. var p2 = new Point(0, 0);
  250. var expected = new Point[] {
  251. new Point(10, 5),
  252. new Point(9, 4),
  253. new Point(8, 4),
  254. new Point(7, 3),
  255. new Point(6, 3),
  256. new Point(5, 2),
  257. new Point(4, 2),
  258. new Point(3, 1),
  259. new Point(2, 1),
  260. new Point(1, 0),
  261. new Point(0, 0)
  262. };
  263. var result = new List<Point>();
  264. Line.Rasterize(p1, p2, result);
  265. Assert.Equal(expected, result);
  266. }
  267. }
  268. }