PositionTest.cs 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Text;
  5. using MineCase.Serialization;
  6. using MineCase.World;
  7. using Xunit;
  8. namespace MineCase.UnitTest
  9. {
  10. public class PositionTest
  11. {
  12. private readonly BlockWorldPos _bwPos1 = new BlockWorldPos(0, 0, 0);
  13. private readonly BlockWorldPos _bwPos2 = new BlockWorldPos(1, 1, 1);
  14. private readonly BlockWorldPos _bwPos3 = new BlockWorldPos(17, 17, 17);
  15. private readonly BlockWorldPos _bwPos4 = new BlockWorldPos(-1, 1, -1);
  16. private readonly BlockWorldPos _bwPos5 = new BlockWorldPos(-17, 17, -17);
  17. private readonly BlockChunkPos _bcPos1 = new BlockChunkPos(0, 0, 0);
  18. private readonly BlockChunkPos _bcPos2 = new BlockChunkPos(1, 1, 1);
  19. private readonly BlockChunkPos _bcPos3 = new BlockChunkPos(1, 17, 1);
  20. private readonly BlockChunkPos _bcPos4 = new BlockChunkPos(15, 1, 15);
  21. private readonly BlockChunkPos _bcPos5 = new BlockChunkPos(15, 17, 15);
  22. private readonly ChunkWorldPos _cwPos1 = new ChunkWorldPos(0, 0);
  23. private readonly ChunkWorldPos _cwPos2 = new ChunkWorldPos(0, 0);
  24. private readonly ChunkWorldPos _cwPos3 = new ChunkWorldPos(1, 1);
  25. private readonly ChunkWorldPos _cwPos4 = new ChunkWorldPos(-1, -1);
  26. private readonly ChunkWorldPos _cwPos5 = new ChunkWorldPos(-2, -2);
  27. private readonly BlockWorldPos _cbwPos1 = new BlockWorldPos(0, 0, 0);
  28. private readonly BlockWorldPos _cbwPos2 = new BlockWorldPos(0, 0, 0);
  29. private readonly BlockWorldPos _cbwPos3 = new BlockWorldPos(16, 0, 16);
  30. private readonly BlockWorldPos _cbwPos4 = new BlockWorldPos(-16, 0, -16);
  31. private readonly BlockWorldPos _cbwPos5 = new BlockWorldPos(-32, 0, -32);
  32. private readonly EntityWorldPos _ewPos1 = new EntityWorldPos(0, 0, 0);
  33. private readonly EntityWorldPos _ewPos2 = new EntityWorldPos(1.5f, 1.5f, 1.5f);
  34. private readonly EntityWorldPos _ewPos3 = new EntityWorldPos(17.5f, 17.5f, 17.5f);
  35. private readonly EntityWorldPos _ewPos4 = new EntityWorldPos(-0.5f, 1.5f, -0.5f);
  36. private readonly EntityWorldPos _ewPos5 = new EntityWorldPos(-16.5f, 17.5f, -16.5f);
  37. private readonly EntityChunkPos _ecPos1 = new EntityChunkPos(0, 0, 0);
  38. private readonly EntityChunkPos _ecPos2 = new EntityChunkPos(1.5f, 1.5f, 1.5f);
  39. private readonly EntityChunkPos _ecPos3 = new EntityChunkPos(1.5f, 17.5f, 1.5f);
  40. private readonly EntityChunkPos _ecPos4 = new EntityChunkPos(15.5f, 1.5f, 15.5f);
  41. private readonly EntityChunkPos _ecPos5 = new EntityChunkPos(15.5f, 17.5f, 15.5f);
  42. [Fact]
  43. public void TestBlockWorldPos()
  44. {
  45. Assert.Equal(_bcPos1, _bwPos1.ToBlockChunkPos());
  46. Assert.Equal(_bcPos2, _bwPos2.ToBlockChunkPos());
  47. Assert.Equal(_bcPos3, _bwPos3.ToBlockChunkPos());
  48. Assert.Equal(_bcPos4, _bwPos4.ToBlockChunkPos());
  49. Assert.Equal(_bcPos5, _bwPos5.ToBlockChunkPos());
  50. Assert.Equal(_cwPos1, _bwPos1.ToChunkWorldPos());
  51. Assert.Equal(_cwPos2, _bwPos2.ToChunkWorldPos());
  52. Assert.Equal(_cwPos3, _bwPos3.ToChunkWorldPos());
  53. Assert.Equal(_cwPos4, _bwPos4.ToChunkWorldPos());
  54. Assert.Equal(_cwPos5, _bwPos5.ToChunkWorldPos());
  55. }
  56. [Fact]
  57. public void TestBlockWorldPosExtension()
  58. {
  59. Assert.Equal(_bwPos1.Up(), new BlockWorldPos(0, 1, 0));
  60. Assert.Equal(_bwPos1.Down(), new BlockWorldPos(0, -1, 0));
  61. Assert.Equal(_bwPos1.East(), new BlockWorldPos(1, 0, 0));
  62. Assert.Equal(_bwPos1.West(), new BlockWorldPos(-1, 0, 0));
  63. Assert.Equal(_bwPos1.North(), new BlockWorldPos(0, 0, -1));
  64. Assert.Equal(_bwPos1.South(), new BlockWorldPos(0, 0, 1));
  65. Assert.Equal(_bwPos1.Up(2), new BlockWorldPos(0, 2, 0));
  66. Assert.Equal(_bwPos1.Down(2), new BlockWorldPos(0, -2, 0));
  67. Assert.Equal(_bwPos1.East(2), new BlockWorldPos(2, 0, 0));
  68. Assert.Equal(_bwPos1.West(2), new BlockWorldPos(-2, 0, 0));
  69. Assert.Equal(_bwPos1.North(2), new BlockWorldPos(0, 0, -2));
  70. Assert.Equal(_bwPos1.South(2), new BlockWorldPos(0, 0, 2));
  71. }
  72. [Fact]
  73. public void TestBlockVector()
  74. {
  75. BlockVector bvPos1 = new BlockVector(0, 0, 0);
  76. BlockVector bvPos2 = new BlockVector(1, 1, 1);
  77. BlockVector bvPos3 = new BlockVector(-1, -1, -1);
  78. BlockVector bvPos4 = new BlockVector(6, 7, 8);
  79. Assert.Equal(0, bvPos1.X);
  80. Assert.Equal(0, bvPos1.Y);
  81. Assert.Equal(0, bvPos1.Z);
  82. Assert.Equal(1, bvPos2.X);
  83. Assert.Equal(1, bvPos2.Y);
  84. Assert.Equal(1, bvPos2.Z);
  85. Assert.Equal(-1, bvPos3.X);
  86. Assert.Equal(-1, bvPos3.Y);
  87. Assert.Equal(-1, bvPos3.Z);
  88. Assert.Equal(6, bvPos4.X);
  89. Assert.Equal(7, bvPos4.Y);
  90. Assert.Equal(8, bvPos4.Z);
  91. Assert.Equal(bvPos2, bvPos1 + bvPos2);
  92. Assert.Equal(bvPos3, bvPos1 + bvPos3);
  93. Assert.Equal(bvPos1, bvPos2 + bvPos3);
  94. }
  95. [Fact]
  96. public void TestBlockChunkPos()
  97. {
  98. Assert.Equal(_bwPos1, _bcPos1.ToBlockWorldPos(_cwPos1));
  99. Assert.Equal(_bwPos2, _bcPos2.ToBlockWorldPos(_cwPos2));
  100. Assert.Equal(_bwPos3, _bcPos3.ToBlockWorldPos(_cwPos3));
  101. Assert.Equal(_bwPos4, _bcPos4.ToBlockWorldPos(_cwPos4));
  102. Assert.Equal(_bwPos5, _bcPos5.ToBlockWorldPos(_cwPos5));
  103. }
  104. [Fact]
  105. public void TestChunkWorldPos()
  106. {
  107. Assert.Equal(_cbwPos1, _cwPos1.ToBlockWorldPos());
  108. Assert.Equal(_cbwPos2, _cwPos2.ToBlockWorldPos());
  109. Assert.Equal(_cbwPos3, _cwPos3.ToBlockWorldPos());
  110. Assert.Equal(_cbwPos4, _cwPos4.ToBlockWorldPos());
  111. Assert.Equal(_cbwPos5, _cwPos5.ToBlockWorldPos());
  112. }
  113. [Fact]
  114. public void TestEntityWorldPos_ToChunkWorldPos()
  115. {
  116. Assert.Equal(_cwPos1, _ewPos1.ToChunkWorldPos());
  117. Assert.Equal(_cwPos2, _ewPos2.ToChunkWorldPos());
  118. Assert.Equal(_cwPos3, _ewPos3.ToChunkWorldPos());
  119. Assert.Equal(_cwPos4, _ewPos4.ToChunkWorldPos());
  120. Assert.Equal(_cwPos5, _ewPos5.ToChunkWorldPos());
  121. }
  122. [Fact]
  123. public void TestEntityWorldPos_ToBlockWorldPos()
  124. {
  125. Assert.Equal(_bwPos1, _ewPos1.ToBlockWorldPos());
  126. Assert.Equal(_bwPos2, _ewPos2.ToBlockWorldPos());
  127. Assert.Equal(_bwPos3, _ewPos3.ToBlockWorldPos());
  128. Assert.Equal(_bwPos4, _ewPos4.ToBlockWorldPos());
  129. Assert.Equal(_bwPos5, _ewPos5.ToBlockWorldPos());
  130. }
  131. [Fact]
  132. public void TestEntityWorldPos_ToEntityChunkPos()
  133. {
  134. Assert.Equal(_ecPos1, _ewPos1.ToEntityChunkPos());
  135. Assert.Equal(_ecPos2, _ewPos2.ToEntityChunkPos());
  136. Assert.Equal(_ecPos3, _ewPos3.ToEntityChunkPos());
  137. Assert.Equal(_ecPos4, _ewPos4.ToEntityChunkPos());
  138. Assert.Equal(_ecPos5, _ewPos5.ToEntityChunkPos());
  139. }
  140. [Fact]
  141. public void TestEntityChunkPos_ToEntityWorldPos()
  142. {
  143. Assert.Equal(_ewPos1, _ecPos1.ToEntityWorldPos(_cwPos1));
  144. Assert.Equal(_ewPos2, _ecPos2.ToEntityWorldPos(_cwPos2));
  145. Assert.Equal(_ewPos3, _ecPos3.ToEntityWorldPos(_cwPos3));
  146. Assert.Equal(_ewPos4, _ecPos4.ToEntityWorldPos(_cwPos4));
  147. Assert.Equal(_ewPos5, _ecPos5.ToEntityWorldPos(_cwPos5));
  148. }
  149. [Fact]
  150. public void TestPositionReadWrites()
  151. {
  152. TestPositionReadWrite(_bwPos1);
  153. TestPositionReadWrite(_bwPos2);
  154. TestPositionReadWrite(_bwPos3);
  155. TestPositionReadWrite(_bwPos4);
  156. TestPositionReadWrite(_bwPos5);
  157. }
  158. private void TestPositionReadWrite(Position position)
  159. {
  160. using (var mem = new MemoryStream())
  161. using (var bw = new BinaryWriter(mem, Encoding.UTF8, true))
  162. {
  163. bw.WriteAsPosition(position);
  164. var br = new SpanReader(mem.ToArray());
  165. Assert.Equal(position, br.ReadAsPosition());
  166. }
  167. }
  168. }
  169. }