diff --git a/src/main/java/model/ColoredSide.java b/src/main/java/model/ColoredSide.java
index 9eed9feda3e501453633875314a10b3314979c8c..fd39ebfc65ecd69d271cd0aeae08ca16aaac0610 100644
--- a/src/main/java/model/ColoredSide.java
+++ b/src/main/java/model/ColoredSide.java
@@ -4,6 +4,7 @@ import javafx.scene.paint.Color;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Objects;
 
 public class ColoredSide implements Side {
   private final Color color;
@@ -32,4 +33,24 @@ public class ColoredSide implements Side {
   public Color color() {
     return color;
   }
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) return true;
+    if (o == null || getClass() != o.getClass()) return false;
+    ColoredSide that = (ColoredSide) o;
+    return Objects.equals(color, that.color);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(color);
+  }
+
+  @Override
+  public String toString() {
+    return "ColoredSide{" +
+            "color=" + color +
+            '}';
+  }
 }
diff --git a/src/main/java/model/UniformTile.java b/src/main/java/model/UniformTile.java
index 89ea2dbe032f89934bf5e7477fe1482262967b96..aed44728fbcf3ffa7b644b788b347b59d3a42c43 100644
--- a/src/main/java/model/UniformTile.java
+++ b/src/main/java/model/UniformTile.java
@@ -1,5 +1,7 @@
 package model;
 
+import java.util.Objects;
+
 public class UniformTile implements Tile{
   private final Side side;
 
@@ -11,4 +13,17 @@ public class UniformTile implements Tile{
   public Side side(CardinalDirection direction) {
     return side;
   }
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) return true;
+    if (o == null || getClass() != o.getClass()) return false;
+    UniformTile that = (UniformTile) o;
+    return Objects.equals(side, that.side);
+  }
+
+  @Override
+  public int hashCode() {
+    return side != null ? side.hashCode() : 0;
+  }
 }
diff --git a/src/test/java/model/ColoredSideTest.java b/src/test/java/model/ColoredSideTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..06f4bf29d67303854896fc980400bbc249a37061
--- /dev/null
+++ b/src/test/java/model/ColoredSideTest.java
@@ -0,0 +1,62 @@
+package model;
+import javafx.scene.paint.Color;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import java.util.List;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+public class ColoredSideTest {
+  Side redSide;
+  Side blueSide;
+  Side redSide2;
+
+  @BeforeEach
+  void initializeSides(){
+    redSide = new ColoredSide(Color.RED);
+    blueSide = new ColoredSide(Color.BLUE);
+    redSide2 = new ColoredSide(Color.RED);
+  }
+
+  @Test
+  void testColor(){
+    assertThat(redSide.color()).isEqualTo(Color.RED);
+    assertThat(blueSide.color()).isEqualTo(Color.BLUE);
+  }
+
+  @Test
+  void testEquals(){
+    assertThat(redSide2).isEqualTo(redSide2);
+    assertThat(redSide).isEqualTo(redSide2);
+    assertThat(redSide).isNotEqualTo(blueSide);
+  }
+
+  @Test
+  void testAccept(){
+    assertThat(blueSide.accept(blueSide)).isTrue();
+    assertThat(blueSide.accept(redSide2)).isFalse();
+    assertThat(redSide.accept(redSide2)).isTrue();
+  }
+
+  @Test
+  void testCompatibleSides(){
+    List<Side> sides = List.of(redSide, blueSide, redSide2);
+    assertThat(blueSide.compatibleSides(sides))
+            .containsExactly(blueSide)
+            .hasSize(1)
+            .doesNotContain(redSide);
+    assertThat(redSide.compatibleSides(sides))
+            .contains(redSide, redSide2)
+            .hasSize(2)
+            .doesNotContain(blueSide);
+    assertThat(sides).containsExactly(redSide, blueSide, redSide2);
+  }
+
+  @Test
+  void testToString(){
+    assertThat(redSide.toString()).isEqualTo("ColoredSide{color=0xff0000ff}");
+    assertThat(blueSide.toString()).isEqualTo("ColoredSide{color=0x0000ffff}");
+  }
+
+}