diff --git a/src/test/java/model/NextGenerationInitializerTest.java b/src/test/java/model/NextGenerationInitializerTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..037e22b8e3b564b8ae97e380af4f905d798ab730
--- /dev/null
+++ b/src/test/java/model/NextGenerationInitializerTest.java
@@ -0,0 +1,82 @@
+package model;
+
+import controller.Simulation;
+import datastruct.Coordinate;
+import model.automata.GameOfLifeAutomaton;
+import model.automata.GameOfLifeState;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import java.util.Random;
+
+import static model.automata.GameOfLifeState.ALIVE;
+import static model.automata.GameOfLifeState.DEAD;
+import static org.junit.jupiter.api.Assertions.*;
+
+class NextGenerationInitializerTest {
+
+    private final CellularAutomatonSimulation<GameOfLifeState> simulation =
+            new CellularAutomatonSimulation<>(
+                    new GameOfLifeAutomaton(4,3),
+                    new Random()
+                    );
+    private final NextGenerationInitializer<GameOfLifeState> initializer =
+            new NextGenerationInitializer<>(this.simulation);
+
+    @BeforeEach
+    public void prepareSimulation() {
+        GameOfLifeState[][] state =
+                { { DEAD, DEAD, ALIVE, DEAD }
+                , { ALIVE, ALIVE, DEAD, DEAD }
+                , { DEAD, DEAD, DEAD, DEAD }
+                };
+        for (Coordinate coordinate : this.simulation) {
+            this.simulation.at(coordinate).set(state[coordinate.y()][coordinate.x()]);
+        }
+    }
+
+    @Test
+    void initialValueAt() {
+        assertEquals(DEAD, initializer.initialValueAt(Coordinate.of(0,1)));
+        assertEquals(ALIVE, initializer.initialValueAt(Coordinate.of(1,0)));
+        assertEquals(ALIVE, initializer.initialValueAt(Coordinate.of(1,1)));
+        assertEquals(ALIVE, initializer.initialValueAt(Coordinate.of(1,2)));
+        assertEquals(DEAD, initializer.initialValueAt(Coordinate.of(2,2)));
+    }
+
+    @Test
+    public void testWrapCoordinateInsideGrid() {
+        Coordinate coordinate = Coordinate.of(1, 1);
+        Coordinate wrapped = initializer.wrap(coordinate);
+        assertEquals(coordinate, wrapped);
+    }
+
+    @Test
+    public void testWrapCoordinateOutsideGrid() {
+        assertEquals(
+                Coordinate.of(0, 1),
+                initializer.wrap(Coordinate.of(4, 4))
+        );
+        assertEquals(
+                Coordinate.of(3, 2),
+                initializer.wrap(Coordinate.of(-1, 2))
+        );
+         assertEquals(
+                Coordinate.of(3, 2),
+                initializer.wrap(Coordinate.of(-1, -1))
+        );   }
+
+    @Test
+    public void testModuloPositive() {
+        int result = NextGenerationInitializer.modulo(7, 4);
+        assertEquals(3, result);
+    }
+
+    @Test
+    public void testModuloNegative() {
+        int result = NextGenerationInitializer.modulo(-7, 4);
+        assertEquals(1, result);
+    }
+
+
+}
\ No newline at end of file