From ea1e159c871524a3557ccd384f246bdadebd86d1 Mon Sep 17 00:00:00 2001 From: DmitriyMX Date: Fri, 7 Sep 2018 22:18:29 +0300 Subject: [PATCH] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=BB=D0=B5=D0=BD=D1=8B=20?= =?UTF-8?q?=D1=82=D0=B5=D1=81=D1=82=D1=8B=20=D0=B4=D0=BB=D1=8F=20=D1=81?= =?UTF-8?q?=D1=80=D0=B0=D0=B2=D0=BD=D0=B5=D0=BD=D0=B8=D1=8F=20Location's?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/mc/core/EntityLocation.java | 17 ++++++++ core/src/main/java/mc/core/Location.java | 17 ++++++++ .../test/java/mc/core/TestEntityLocation.java | 40 +++++++++++++++++-- core/src/test/java/mc/core/TestLocation.java | 19 +++++++++ 4 files changed, 89 insertions(+), 4 deletions(-) diff --git a/core/src/main/java/mc/core/EntityLocation.java b/core/src/main/java/mc/core/EntityLocation.java index 0eec9d2..56b4605 100644 --- a/core/src/main/java/mc/core/EntityLocation.java +++ b/core/src/main/java/mc/core/EntityLocation.java @@ -8,6 +8,8 @@ import lombok.Getter; import lombok.Setter; import mc.core.world.World; +import java.util.Objects; + public class EntityLocation extends Location implements Cloneable { @Getter @Setter @@ -31,4 +33,19 @@ public class EntityLocation extends Location implements Cloneable { public EntityLocation clone() { return (EntityLocation) super.clone(); } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + if (!super.equals(o)) return false; + EntityLocation that = (EntityLocation) o; + return Float.compare(that.yaw, yaw) == 0 && + Float.compare(that.pitch, pitch) == 0; + } + + @Override + public int hashCode() { + return Objects.hash(super.hashCode(), yaw, pitch); + } } diff --git a/core/src/main/java/mc/core/Location.java b/core/src/main/java/mc/core/Location.java index 4a4c1b4..60afc2b 100644 --- a/core/src/main/java/mc/core/Location.java +++ b/core/src/main/java/mc/core/Location.java @@ -13,6 +13,7 @@ import mc.core.world.chunk.ChunkSection; import java.lang.ref.Reference; import java.lang.ref.WeakReference; +import java.util.Objects; public class Location implements Cloneable { @Getter @@ -88,4 +89,20 @@ public class Location implements Cloneable { return null; } } + + @Override + public boolean equals(Object obj) { + if (this == obj) return true; + if (obj == null || getClass() != obj.getClass()) return false; + Location location = (Location) obj; + return Double.compare(location.x, x) == 0 && + Double.compare(location.y, y) == 0 && + Double.compare(location.z, z) == 0 && + Objects.equals(refWorld.get(), location.refWorld.get()); + } + + @Override + public int hashCode() { + return Objects.hash(x, y, z, refWorld.get()); + } } diff --git a/core/src/test/java/mc/core/TestEntityLocation.java b/core/src/test/java/mc/core/TestEntityLocation.java index 06fbfa7..25ac1d7 100644 --- a/core/src/test/java/mc/core/TestEntityLocation.java +++ b/core/src/test/java/mc/core/TestEntityLocation.java @@ -1,19 +1,30 @@ package mc.core; import mc.core.world.World; +import org.junit.Before; import org.junit.Test; +import java.util.concurrent.ThreadLocalRandom; + import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotEquals; import static org.junit.Assert.assertSame; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; public class TestEntityLocation { + private World mockWorld; + + @Before + public void before() { + mockWorld = mock(World.class); + when(mockWorld.getName()).thenReturn("mock_world"); + } + @Test public void cloneTest() { - World dummyWorld = mock(World.class); - - EntityLocation firstLocation = new EntityLocation(10, 20, 30, 40, 50, dummyWorld); - assertSame("Lost world reference before cloning", dummyWorld, firstLocation.getWorld()); + EntityLocation firstLocation = new EntityLocation(10, 20, 30, 40, 50, mockWorld); + assertSame("Lost world reference before cloning", mockWorld, firstLocation.getWorld()); EntityLocation locationClone = firstLocation.clone(); assertEquals("X mismatch", firstLocation.getX(), locationClone.getX(), 0); @@ -23,4 +34,25 @@ public class TestEntityLocation { assertEquals("Yaw mismatch", firstLocation.getYaw(), locationClone.getYaw(), 0); assertSame("World mismatch (accidental clone of the World object?)", firstLocation.getWorld(), locationClone.getWorld()); } + + @Test + public void testEquals() { + final ThreadLocalRandom rnd = ThreadLocalRandom.current(); + final double minD = 0.0d, maxD = 10.0d; + final float minF = 0.0f, maxF = 359.9f; + final double x = rnd.nextDouble(minD, maxD); + final double y = rnd.nextDouble(minD, maxD); + final double z = rnd.nextDouble(minD, maxD); + final float yaw = rnd.nextFloat() * (maxF - minF) + minF; + final float pitch = rnd.nextFloat() * (maxF - minF) + minF; + + EntityLocation loc1 = new EntityLocation(x, y, z, yaw, pitch, mockWorld); + EntityLocation loc2 = new EntityLocation(x, y, z, yaw, pitch, mockWorld); + assertEquals(loc1, loc2); + + loc2 = new EntityLocation(x+3, y+1, z+2, yaw, pitch, mockWorld); + assertNotEquals(loc1, loc2); + loc2 = new EntityLocation(x, y, z, yaw+5, pitch-1, mockWorld); + assertNotEquals(loc1, loc2); + } } diff --git a/core/src/test/java/mc/core/TestLocation.java b/core/src/test/java/mc/core/TestLocation.java index 3d6715e..18d537e 100644 --- a/core/src/test/java/mc/core/TestLocation.java +++ b/core/src/test/java/mc/core/TestLocation.java @@ -5,7 +5,10 @@ import mc.core.world.chunk.Chunk; import org.junit.Before; import org.junit.Test; +import java.util.concurrent.ThreadLocalRandom; + import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotEquals; import static org.mockito.Mockito.*; public class TestLocation { @@ -121,4 +124,20 @@ public class TestLocation { assertEquals(-2, chunk.getX()); assertEquals(-2, chunk.getZ()); } + + @Test + public void testEquals() { + final ThreadLocalRandom rnd = ThreadLocalRandom.current(); + final double minD = 0.0d, maxD = 10.0d; + final double x = rnd.nextDouble(minD, maxD); + final double y = rnd.nextDouble(minD, maxD); + final double z = rnd.nextDouble(minD, maxD); + + Location loc1 = new Location(x, y, z, world); + Location loc2 = new Location(x, y, z, world); + assertEquals(loc1, loc2); + + loc2 = new Location(x+3, y+1, z+2, world); + assertNotEquals(loc1, loc2); + } }