diff --git a/src/main/java/controller/Controller.java b/src/main/java/controller/Controller.java index 32e565779e3dad6299bcfe582e6f5a85816ffd20..01dae37f19b1102256c299687b836feaa1a22775 100644 --- a/src/main/java/controller/Controller.java +++ b/src/main/java/controller/Controller.java @@ -1,6 +1,6 @@ package controller; -import datastruct.Coordinate; +import matrix.Coordinate; import javafx.animation.Animation; import javafx.animation.KeyFrame; import javafx.animation.Timeline; @@ -11,7 +11,6 @@ import javafx.scene.control.Label; import javafx.scene.control.ToggleButton; import javafx.scene.control.ToggleGroup; import javafx.util.Duration; -import model.CellularAutomatonSimulation; import view.MatrixPane; import static java.util.Objects.requireNonNull; diff --git a/src/main/java/controller/Simulation.java b/src/main/java/controller/Simulation.java index 8c33146524a2ac98ab455a906ffbfa086ecfb61c..71e5d0ff43fcaaf0d7c317c253ad34bedd934f5c 100644 --- a/src/main/java/controller/Simulation.java +++ b/src/main/java/controller/Simulation.java @@ -1,6 +1,6 @@ package controller; -import datastruct.Coordinate; +import matrix.Coordinate; import javafx.scene.paint.Color; import model.OnChangeListener; diff --git a/src/main/java/datastruct/ConstantMatrixInitializer.java b/src/main/java/datastruct/ConstantMatrixInitializer.java deleted file mode 100644 index e13032bf492cd7afdbcf566c5b478e4c2d3cf11e..0000000000000000000000000000000000000000 --- a/src/main/java/datastruct/ConstantMatrixInitializer.java +++ /dev/null @@ -1,14 +0,0 @@ -package datastruct; - -public class ConstantMatrixInitializer<T> implements MatrixInitializer<T> { - - private final T constant; - - public ConstantMatrixInitializer(T constant) { - this.constant = constant; - } - @Override - public T initialValueAt(Coordinate coordinate) { - return constant; - } -} diff --git a/src/main/java/datastruct/Matrix.java b/src/main/java/datastruct/Matrix.java deleted file mode 100644 index f98bd7a2a5b7bcf877287220867bb5204be79eef..0000000000000000000000000000000000000000 --- a/src/main/java/datastruct/Matrix.java +++ /dev/null @@ -1,182 +0,0 @@ -package datastruct; - -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; - - -/** - * Represents a matrix, a rectangular array, with generic values in each cell. - * - * @param <T> The type of values stored in the matrix cells. - */ -public class Matrix<T> implements Iterable<T> { - - private final List<List<T>> matrix; - private final int width; - private final int height; - - /** - * Creates a new {@link Matrix} with the specified width, height, and an initializer to set - * values. - * - * @param width The width of the {@link Matrix}. - * @param height The height of the {@link Matrix}. - * @param initializer A matrix initializer to set values in the {@link Matrix}. - */ - public Matrix(int width, int height, MatrixInitializer<T> initializer) { - this.width = width; - this.height = height; - this.matrix = new ArrayList<>(); - this.initializeWith(initializer); - } - - /** - * Creates a new {@link Matrix} with the specified width, height, and initial value for all - * cells. - * - * @param width The width of the {@link Matrix}. - * @param height The height of the {@link Matrix}. - * @param initialValue The initial value to set in all cells of the {@link Matrix}. - */ - public Matrix(int width, int height, T initialValue) { - this(width, height, new ConstantMatrixInitializer<>(initialValue)); - } - - private void initializeWith(MatrixInitializer<T> initializer) { - for (int x = 0; x < width; x++) { - List<T> row = new ArrayList<>(); - this.matrix.add(row); - for (int y = 0; y < height; y++) { - row.add(initializer.initialValueAt(Coordinate.of(x, y))); - } - } - } - - /** - * Returns the width of the {@link Matrix}. - * - * @return The width of the {@link Matrix}. - */ - public int width() { - return width; - } - - /** - * Returns the height of the {@link Matrix}. - * - * @return The height of the {@link Matrix}. - */ - public int height() { - return height; - } - - /** - * Gets the value at the specified coordinates (x, y) in the {@link Matrix}. - * - * @param x The x-coordinate. - * @param y The y-coordinate. - * @return The value at the specified coordinates. - */ - public T get(int x, int y) { - return this.matrix.get(x).get(y); - } - - /** - * Gets the value at the specified {@link Coordinate} in the {@link Matrix}. - * - * @param coordinate The {@link Coordinate}. - * @return The value at the specified {@link Coordinate}. - */ - public T get(Coordinate coordinate) { - return this.get(coordinate.x(), coordinate.y()); - } - - /** - * Sets the value at the specified coordinates (x, y) in the {@link Matrix}. - * - * @param x The x-coordinate. - * @param y The y-coordinate. - * @param value The value to set at the specified coordinates. - */ - public void set(int x, int y, T value) { - this.matrix.get(x).set(y, value); - } - - - /** - * Sets the value at the specified {@link Coordinate} in the {@link Matrix}. - * - * @param coordinate The {@link Coordinate}. - * @param value The value to set at the specified {@link Coordinate}. - */ - public void set(Coordinate coordinate, T value) { - this.set(coordinate.x(), coordinate.y(), value); - } - - /** - * Returns an {@link Iterator} that allows iterating over the elements in the {@link Matrix} in - * row-major order. - * - * @return An {@link Iterator} for the {@link Matrix}. - */ - public Iterator<T> iterator() { - Iterator<Coordinate> coordIterator = this.coordinatesIterator(); - return new MatrixIterator<>(this, coordIterator); - } - - /** - * Returns an {@link Iterable} that provides access to the {@link Coordinate}s of the - * {@link Matrix} in row-major order. This means that a {@code for} loop on a {@link Matrix} - * will loop over the coordinates of the {@link Matrix}. - * - * @return An {@link Iterable} for the {@link Coordinate}s of the {@link Matrix}. - */ - public Iterable<Coordinate> coordinates() { - return this::coordinatesIterator; - } - - /** - * Returns an {@link Iterator} that allows iterating over the {@link Coordinate}s in the - * {@link Matrix} in row-major order. - * - * @return An {@link Iterator} for the {@link Matrix}. - */ - private Iterator<Coordinate> coordinatesIterator() { - return new CoordinateIterator(this.width, this.height); - } - - /** - * Returns a lens for accessing and modifying the value at the specified coordinates (x, y) in - * the {@link Matrix}. - * - * @param x The x-coordinate. - * @param y The y-coordinate. - * @return A lens for the specified coordinates. - */ - public Lens<T> at(int x, int y) { - return new Lens<T>() { - @Override - public T get() { - return Matrix.this.get(x, y); - } - - @Override - public void set(T value) { - Matrix.this.set(x, y, value); - } - }; - } - - /** - * Returns a lens for accessing and modifying the value at the specified coordinate in the - * {@link Matrix}. - * - * @param coordinate The {@link Coordinate}. - * @return A lens for the specified {@link Coordinate}. - */ - public Lens<T> at(Coordinate coordinate) { - return this.at(coordinate.x(), coordinate.y()); - } - -} diff --git a/src/main/java/matrix/ConstantMatrixInitializer.java b/src/main/java/matrix/ConstantMatrixInitializer.java new file mode 100644 index 0000000000000000000000000000000000000000..88d798b4b1a0e79292168f2a8d6f47024457fdae --- /dev/null +++ b/src/main/java/matrix/ConstantMatrixInitializer.java @@ -0,0 +1,16 @@ +package matrix; + +public class ConstantMatrixInitializer<T> implements MatrixInitializer<T> { + + // TODO: add instance variables + + public ConstantMatrixInitializer(T constant) { + // TODO + } + + @Override + public T initialValueAt(Coordinate coordinate) { + // TODO + return null; + } +} diff --git a/src/main/java/datastruct/Coordinate.java b/src/main/java/matrix/Coordinate.java similarity index 76% rename from src/main/java/datastruct/Coordinate.java rename to src/main/java/matrix/Coordinate.java index f7f7e22f440efd4cb15793ca3d1b4ecc8d5bda0c..f3e5ac009ee837b1c3998c6b1f033e42019669b6 100644 --- a/src/main/java/datastruct/Coordinate.java +++ b/src/main/java/matrix/Coordinate.java @@ -1,6 +1,5 @@ -package datastruct; +package matrix; -import java.util.ArrayList; import java.util.List; /** @@ -62,7 +61,15 @@ public record Coordinate(int x, int y) { /** * Computes and returns a list of orthogonal (adjacent in horizontal or vertical direction) neighbors. - * + * | | | | + * --------- + * | |X| | + * --------- + * |X|O|X| + * --------- + * | |X| | + * --------- + * | | | | * @return A list of orthogonal neighboring {@link Coordinate}s. */ public List<Coordinate> orthogonalNeighbours() { @@ -72,6 +79,15 @@ public record Coordinate(int x, int y) { /** * Computes and returns a list of diagonal (adjacent in diagonal direction) neighbors. + * | | | | + * --------- + * |X| |X| + * --------- + * | |O| | + * --------- + * |X| |X| + * --------- + * | | | | * * @return A list of diagonal neighboring {@link Coordinate}s. */ @@ -82,6 +98,15 @@ public record Coordinate(int x, int y) { /** * Computes and returns a list of all orthogonal and diagonal neighbors. + * * | | | | + * * --------- + * * |X|X|X| + * * --------- + * * |X|O|X| + * * --------- + * * |X|X|X| + * * --------- + * * | | | | * * @return A list of all neighboring {@link Coordinate}s. */ @@ -94,4 +119,12 @@ public record Coordinate(int x, int y) { public String toString() { return "(" + this.x + "," + this.y + ")"; } + + public Coordinate minus(Coordinate corner) { + return new Coordinate(this.x - corner.x, this.y - corner.y); + } + + public Coordinate plus(Coordinate corner) { + return new Coordinate(this.x + corner.x, this.y + corner.y); + } } \ No newline at end of file diff --git a/src/main/java/datastruct/CoordinateIterator.java b/src/main/java/matrix/CoordinateIterator.java similarity index 98% rename from src/main/java/datastruct/CoordinateIterator.java rename to src/main/java/matrix/CoordinateIterator.java index 37360d0720a983441f3d37d3d2e45550c727c30a..810b71287e52821943a45e52eb7959ace9df7f06 100644 --- a/src/main/java/datastruct/CoordinateIterator.java +++ b/src/main/java/matrix/CoordinateIterator.java @@ -1,4 +1,4 @@ -package datastruct; +package matrix; import java.util.Iterator; import java.util.NoSuchElementException; diff --git a/src/main/java/matrix/ListMatrix.java b/src/main/java/matrix/ListMatrix.java new file mode 100644 index 0000000000000000000000000000000000000000..990ffa8cf1891a6b2e6086d7561645fd8b7467de --- /dev/null +++ b/src/main/java/matrix/ListMatrix.java @@ -0,0 +1,68 @@ +package matrix; + +import java.util.List; + + +/** + * Represents a matrix, a rectangular array, with generic values in each cell. + * + * @param <T> The type of values stored in the matrix cells. + */ +public class ListMatrix<T> implements Matrix<T> { + + private final List<List<T>> matrix; + private final int width; + private final int height; + + /** + * Creates a new {@link ListMatrix} with the specified width, height, and an initializer to set + * values. + * + * @param width The width of the {@link ListMatrix}. + * @param height The height of the {@link ListMatrix}. + * @param initializer A matrix initializer to set values in the {@link ListMatrix}. + */ + public ListMatrix(int width, int height, MatrixInitializer<T> initializer) { + // TODO + this.width = 0; + this.height = 0; + this.matrix = null; + this.initializeWith(initializer); // fills the matrix using initializer + } + + public ListMatrix(int width, int height, T constant) { + this(width, height, new ConstantMatrixInitializer<>(constant)); + } + + private void initializeWith(MatrixInitializer<T> initializer) { + // TODO initialize each cell of the matrix, with a value determined by initializer + } + + public int width() { + // TODO + return 0; + } + + public int height() { + // TODO + return 0; + } + + @Override + public T get(int x, int y) { + // TODO + return null; + } + + + @Override + public void set(int x, int y, T newValue) { + // TODO + } + + public Matrix<T> subMatrix(Coordinate corner, int width, int height) { + // TODO + return this; + } + +} diff --git a/src/main/java/matrix/Matrix.java b/src/main/java/matrix/Matrix.java new file mode 100644 index 0000000000000000000000000000000000000000..3a797735bbb392d0a0e3165bd4faaad2aa8608c9 --- /dev/null +++ b/src/main/java/matrix/Matrix.java @@ -0,0 +1,85 @@ +package matrix; + +import java.util.Iterator; + +public interface Matrix<T> extends Iterable<T> { + + /** + * Returns the width of the {@link Matrix}. + * + * @return The width of the {@link Matrix}. + */ + int width(); + + /** + * Returns the height of the {@link Matrix}. + * + * @return The height of the {@link Matrix}. + */ + int height(); + + /** + * Returns the value at the specified coordinates (x, y) in + * the {@link Matrix}. + * + * @param x The x-coordinate. + * @param y The y-coordinate. + * @return The content of the matrix at the coordinates (x,y). + */ + T get(int x, int y); + /** + * Returns the value at the specified coordinates (x, y) in + * the {@link Matrix}. + * + * @param coordinate The coordinates (x,y). + * @return The content of the matrix at the coordinates (x,y). + */ + default T get(Coordinate coordinate) { + return this.get(coordinate.x(), coordinate.y()); + } + + /** + * Changes the value at the specified coordinates (x,y) in the {@link Matrix} + * + * @param x the x-coordinate + * @param y the y-coordinate + * @param newValue the value to assign to coordinates (x,y). + */ + void set(int x, int y, T newValue); + + /** + * Changes the value at the specified coordinates (x,y) in the {@link Matrix} + * + * @param coordinate The coordinates (x,y) + * @param newValue the value to assign to coordinates (x,y). + */ + default void set(Coordinate coordinate, T newValue) { + this.set(coordinate.x(), coordinate.y(), newValue); + } + + Matrix<T> subMatrix(Coordinate corner, int width, int height); + + + /** + * Returns an {@link Iterable} that provides access to the {@link Coordinate}s of the + * {@link Matrix} in row-major order. This means that a {@code for} loop on a {@link Matrix} + * will loop over the coordinates of the {@link Matrix}. + * + * @return An {@link Iterable} for the {@link Coordinate}s of the {@link Matrix}. + */ + default Iterable<Coordinate> coordinates() { + return () -> new CoordinateIterator(this.width(), this.height()); + } + + /** + * Returns an {@link Iterator} that allows iterating over the elements in the {@link Matrix} in + * row-major order. + * + * @return An {@link Iterator} for the {@link Matrix}. + */ + default Iterator<T> iterator() { + Iterator<Coordinate> coords = + new CoordinateIterator(this.width(),this.height()); + return new MatrixIterator<>(this, coords); + } +} diff --git a/src/main/java/datastruct/MatrixInitializer.java b/src/main/java/matrix/MatrixInitializer.java similarity index 51% rename from src/main/java/datastruct/MatrixInitializer.java rename to src/main/java/matrix/MatrixInitializer.java index dab2bf2900018e92094a81c9b04bdd005852e83e..492d15c3453095569dd901b763f83337d854cae8 100644 --- a/src/main/java/datastruct/MatrixInitializer.java +++ b/src/main/java/matrix/MatrixInitializer.java @@ -1,14 +1,14 @@ -package datastruct; +package matrix; /** - * An interface for initializing a {@link Matrix} by providing initial values for each cell. + * An interface for initializing a {@link ListMatrix} by providing initial values for each cell. * - * @param <T> The type of values to initialize the {@link Matrix} with. + * @param <T> The type of values to initialize the {@link ListMatrix} with. */ public interface MatrixInitializer<T> { /** - * Returns the initial value to be set in a {@link Matrix} cell at the specified + * Returns the initial value to be set in a {@link ListMatrix} cell at the specified * {@link Coordinate}. * * @param coordinate The {@link Coordinate} at which to set the initial value. diff --git a/src/main/java/datastruct/MatrixIterator.java b/src/main/java/matrix/MatrixIterator.java similarity index 96% rename from src/main/java/datastruct/MatrixIterator.java rename to src/main/java/matrix/MatrixIterator.java index f0d1f661e7510d699515156f1a456bc994461424..d775f9ef5b92da66d070582f49feaa6a934b6d0e 100644 --- a/src/main/java/datastruct/MatrixIterator.java +++ b/src/main/java/matrix/MatrixIterator.java @@ -1,4 +1,4 @@ -package datastruct; +package matrix; import java.util.Iterator; import java.util.NoSuchElementException; diff --git a/src/main/java/model/Cell.java b/src/main/java/model/Cell.java index 03780346a5a4b46bb5c2b61d704ec27ee00bef63..f7f62749df1c3193503dce5e366a671762967f21 100644 --- a/src/main/java/model/Cell.java +++ b/src/main/java/model/Cell.java @@ -1,7 +1,5 @@ package model; -import datastruct.Lens; - import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/model/CellularAutomatonSimulation.java b/src/main/java/model/CellularAutomatonSimulation.java index 4f51254692cefda4e95edb8be3de494242c387da..d08c7a4eb05750d514d2929720bba2c0beeeb694 100644 --- a/src/main/java/model/CellularAutomatonSimulation.java +++ b/src/main/java/model/CellularAutomatonSimulation.java @@ -1,8 +1,8 @@ package model; import controller.Simulation; -import datastruct.Coordinate; -import datastruct.Matrix; +import matrix.Coordinate; +import matrix.ListMatrix; import javafx.scene.paint.Color; import java.util.Iterator; @@ -18,7 +18,7 @@ import java.util.Random; public class CellularAutomatonSimulation<S extends State<S>> implements Simulation { - private final Matrix<Cell<S>> grid; + private final ListMatrix<Cell<S>> grid; private final Cell<Integer> generationNumber = new Cell<>(0); private final CellularAutomaton<S> automaton; private final Random generator; @@ -31,7 +31,7 @@ public class CellularAutomatonSimulation<S extends State<S>> */ public CellularAutomatonSimulation(CellularAutomaton<S> automaton, Random generator) { this.automaton = automaton; - this.grid = new Matrix<>( + this.grid = new ListMatrix<>( automaton.numberOfColumns(), automaton.numberOfRows(), new ConstantCellInitializer<>(automaton.defaultState()) @@ -68,12 +68,12 @@ public class CellularAutomatonSimulation<S extends State<S>> //TODO: à compléter, en utilisant nextGenerationMatrix() } - /** Computes the {@link Matrix} of states obtained after a single step of updates + /** Computes the {@link ListMatrix} of states obtained after a single step of updates * of the simulation. * * @return the states of each cell after one generation */ - private Matrix<S> nextGenerationMatrix() { + private ListMatrix<S> nextGenerationMatrix() { //TODO: à compléter return null; } diff --git a/src/main/java/model/ConstantCellInitializer.java b/src/main/java/model/ConstantCellInitializer.java index c44714566bb35f8b7eaacc90d7acc321d27f8cc8..39a5b7160e7cf25f8240daff179ae177fcd92407 100644 --- a/src/main/java/model/ConstantCellInitializer.java +++ b/src/main/java/model/ConstantCellInitializer.java @@ -1,11 +1,11 @@ package model; -import datastruct.Coordinate; -import datastruct.Matrix; -import datastruct.MatrixInitializer; +import matrix.Coordinate; +import matrix.ListMatrix; +import matrix.MatrixInitializer; /** - * An initializer for {@link Matrix} of {@link Cell}s, where each cell is initialized to the + * An initializer for {@link ListMatrix} of {@link Cell}s, where each cell is initialized to the * same value. * * @param <T> the type of content of each cell diff --git a/src/main/java/datastruct/Lens.java b/src/main/java/model/Lens.java similarity index 96% rename from src/main/java/datastruct/Lens.java rename to src/main/java/model/Lens.java index a98fd46ffe1fc6f6f63b51ba704c87ecb83e1122..254415ed97d7bbd98fdd8b17db0eaf495a3872e1 100644 --- a/src/main/java/datastruct/Lens.java +++ b/src/main/java/model/Lens.java @@ -1,4 +1,4 @@ -package datastruct; +package model; /** * A lens interface representing a view into a mutable state. diff --git a/src/main/java/model/NextGenerationInitializer.java b/src/main/java/model/NextGenerationInitializer.java index ad03fdf0a14dc41e72f1bfbd4beb976bcf212a9f..f9462bfbd6fe1b55ad7ee10ada452a78825b6a2e 100644 --- a/src/main/java/model/NextGenerationInitializer.java +++ b/src/main/java/model/NextGenerationInitializer.java @@ -1,14 +1,12 @@ package model; -import datastruct.Coordinate; -import datastruct.MatrixInitializer; -import datastruct.Matrix; +import matrix.Coordinate; +import matrix.MatrixInitializer; +import matrix.ListMatrix; import controller.Simulation; -import java.util.ArrayList; -import java.util.List; /** - * An initializer for a {@link Matrix} of states, where each state is computed based on the value + * An initializer for a {@link ListMatrix} of states, where each state is computed based on the value * of its neighbours in a {@link Simulation} of a cellular automaton. * * @param <S> the type of states in the simulation. diff --git a/src/main/java/view/FillingMouseListener.java b/src/main/java/view/FillingMouseListener.java index a4946eb3188788e721932033b65154f418b8d41b..30a9a29f8aebf5dd418c37e5d8557e3604f45542 100644 --- a/src/main/java/view/FillingMouseListener.java +++ b/src/main/java/view/FillingMouseListener.java @@ -1,6 +1,6 @@ package view; -import datastruct.Coordinate; +import matrix.Coordinate; import javafx.scene.input.MouseEvent; public class FillingMouseListener implements MouseListener { diff --git a/src/main/java/view/MatrixPane.java b/src/main/java/view/MatrixPane.java index 050f73930aeb7f17b4b95ed8bb2ff3aec5f9dfda..99f049ea91346ad80af0ed393c38d9b8c73de1cf 100644 --- a/src/main/java/view/MatrixPane.java +++ b/src/main/java/view/MatrixPane.java @@ -1,7 +1,7 @@ package view; import controller.Controller; -import datastruct.Coordinate; +import matrix.Coordinate; import javafx.scene.input.MouseDragEvent; import javafx.scene.input.MouseEvent; import javafx.scene.layout.GridPane; diff --git a/src/main/java/view/MouseListener.java b/src/main/java/view/MouseListener.java index 775cc91de92b1ca00c324365a04ecd53c0439cff..5852db084912b04e6b960f4f89b271219f17f140 100644 --- a/src/main/java/view/MouseListener.java +++ b/src/main/java/view/MouseListener.java @@ -1,6 +1,6 @@ package view; -import datastruct.Coordinate; +import matrix.Coordinate; import javafx.scene.input.MouseEvent; interface MouseListener { diff --git a/src/main/java/view/WaitingMouseListener.java b/src/main/java/view/WaitingMouseListener.java index 68601debb4757abdd55450b8b6d58f16ff5e8ba3..ecab1d150f928d6d10321fbf6be876c0de6df359 100644 --- a/src/main/java/view/WaitingMouseListener.java +++ b/src/main/java/view/WaitingMouseListener.java @@ -1,6 +1,6 @@ package view; -import datastruct.Coordinate; +import matrix.Coordinate; import javafx.scene.input.MouseEvent; class WaitingMouseListener implements MouseListener { diff --git a/src/test/java/datastruct/ConstantMatrixInitializerTest.java b/src/test/java/matrix/ConstantMatrixInitializerTest.java similarity index 77% rename from src/test/java/datastruct/ConstantMatrixInitializerTest.java rename to src/test/java/matrix/ConstantMatrixInitializerTest.java index 4db9c2a7d37554e5eb11c7a6c15a28064421dbe5..74350891205c4a038b9d4aec3216b0f82027e4a2 100644 --- a/src/test/java/datastruct/ConstantMatrixInitializerTest.java +++ b/src/test/java/matrix/ConstantMatrixInitializerTest.java @@ -1,4 +1,4 @@ -package datastruct; +package matrix; import org.junit.jupiter.api.Test; @@ -7,7 +7,7 @@ import static org.junit.jupiter.api.Assertions.*; class ConstantMatrixInitializerTest { @Test public void testMatrixInitializationWithConstantValue() { - Matrix<String> matrix = new Matrix<>(3, 3, new ConstantMatrixInitializer<>("X")); + ListMatrix<String> matrix = new ListMatrix<>(3, 3, new ConstantMatrixInitializer<>("X")); // Test that all cells have the constant value. for (int x = 0; x < 3; x++) { @@ -19,7 +19,7 @@ class ConstantMatrixInitializerTest { @Test public void testMatrixInitializationWithConstantValue2() { - Matrix<Integer> matrix = new Matrix<>(3, 5, new ConstantMatrixInitializer<>(12)); + ListMatrix<Integer> matrix = new ListMatrix<>(3, 5, new ConstantMatrixInitializer<>(12)); // Test that all cells have the constant value. for (int x = 0; x < 3; x++) { diff --git a/src/test/java/datastruct/CoordinateIteratorTest.java b/src/test/java/matrix/CoordinateIteratorTest.java similarity index 98% rename from src/test/java/datastruct/CoordinateIteratorTest.java rename to src/test/java/matrix/CoordinateIteratorTest.java index 90be82e7250425d8ff455b65f74a6f0dadd5ac22..5339f994cef0d6ff7446e73499c791eb1215cbc7 100644 --- a/src/test/java/datastruct/CoordinateIteratorTest.java +++ b/src/test/java/matrix/CoordinateIteratorTest.java @@ -1,4 +1,4 @@ -package datastruct; +package matrix; import org.junit.jupiter.api.Test; diff --git a/src/test/java/datastruct/CoordinateTest.java b/src/test/java/matrix/CoordinateTest.java similarity index 99% rename from src/test/java/datastruct/CoordinateTest.java rename to src/test/java/matrix/CoordinateTest.java index bddaae9ce239168d12a0c5f89b6411d41bb8243f..fccb4c96b0a9ac3aedb839c4db79a26559966712 100644 --- a/src/test/java/datastruct/CoordinateTest.java +++ b/src/test/java/matrix/CoordinateTest.java @@ -1,4 +1,4 @@ -package datastruct; +package matrix; import org.junit.jupiter.api.Test; diff --git a/src/test/java/datastruct/MatrixTest.java b/src/test/java/matrix/ListMatrixTest.java similarity index 64% rename from src/test/java/datastruct/MatrixTest.java rename to src/test/java/matrix/ListMatrixTest.java index 346c29bed09667ea471416d7f5455ebe0597ca72..f2f309a92953a8520d288a2bd2e41e30610a8ac9 100644 --- a/src/test/java/datastruct/MatrixTest.java +++ b/src/test/java/matrix/ListMatrixTest.java @@ -1,4 +1,4 @@ -package datastruct; +package matrix; import org.junit.jupiter.api.Test; @@ -6,14 +6,14 @@ import java.util.Iterator; import static org.junit.jupiter.api.Assertions.*; -class MatrixTest { +class ListMatrixTest { private final MatrixInitializer<Integer> sumInitializer = coord -> coord.x() + coord.y(); @Test public void testMatrixCreationWithInitializer() { - Matrix<Integer> matrix = new Matrix<>(3, 4, sumInitializer); + ListMatrix<Integer> matrix = new ListMatrix<>(3, 4, sumInitializer); assertEquals(3, matrix.width()); assertEquals(4, matrix.height()); assertEquals(4, matrix.get(2, 2)); @@ -24,7 +24,7 @@ class MatrixTest { @Test public void testMatrixCreationWithInitialValue() { - Matrix<String> matrix = new Matrix<>(2, 2, "Foo"); + ListMatrix<String> matrix = new ListMatrix<>(2, 2, "Foo"); assertEquals(2, matrix.width()); assertEquals(2, matrix.height()); assertEquals("Foo", matrix.get(1, 1)); // Test a specific cell value. @@ -32,28 +32,28 @@ class MatrixTest { @Test public void testMatrixSetAndGet() { - Matrix<Integer> matrix = new Matrix<>(3, 3, 0); - matrix.set(1, 1, 42); + ListMatrix<Integer> matrix = new ListMatrix<>(3, 3, 0); + matrix.set(1, 1,42); assertEquals(42, matrix.get(1, 1)); - matrix.set(0, 2, 10); + matrix.set(0, 2,10); assertEquals(10, matrix.get(0, 2)); - matrix.set(Coordinate.of(2, 2), 99); + matrix.set(Coordinate.of(2, 2),99); assertEquals(99, matrix.get(Coordinate.of(2, 2))); } @Test public void testMatrixWidthAndHeight() { - Matrix<String> matrix = new Matrix<>(4, 2, "A"); + ListMatrix<String> matrix = new ListMatrix<>(4, 2, "A"); assertEquals(4, matrix.width()); assertEquals(2, matrix.height()); - matrix.set(3, 1, "B"); + matrix.set(3, 1,"B"); assertEquals(4, matrix.width()); assertEquals(2, matrix.height()); } @Test public void testMatrixIterator() { - Matrix<Integer> matrix = new Matrix<>(2, 2, sumInitializer); + ListMatrix<Integer> matrix = new ListMatrix<>(2, 2, sumInitializer); Iterator<Integer> iterator = matrix.iterator(); assertTrue(iterator.hasNext()); assertEquals(0, iterator.next()); @@ -68,7 +68,7 @@ class MatrixTest { @Test public void testMatrixCoordinates() { - Matrix<Integer> matrix = new Matrix<>(2, 2, 0); + ListMatrix<Integer> matrix = new ListMatrix<>(2, 2, 0); Iterable<Coordinate> coordinates = matrix.coordinates(); int count = 0; for (Coordinate coord : coordinates) { @@ -77,12 +77,24 @@ class MatrixTest { assertEquals(4, count); } + @Test - public void testMatrixLens() { - Matrix<Integer> matrix = new Matrix<>(2, 2, 0); - Lens<Integer> lens = matrix.at(1, 1); - assertEquals(0, lens.get()); - lens.set(42); - assertEquals(42, matrix.get(1, 1)); + public void testSubMatrix() { + Matrix<Integer> matrix = new ListMatrix<>(5, 5, 0); + for (int x = 0; x < 5; x++) { + for (int y = 0; y < 5; y++) { + matrix.set(x,y,x + y * 5); + } + } + Matrix<Integer> sub = matrix.subMatrix(Coordinate.of(2,1),2,3); + assertEquals(2, sub.width()); + assertEquals(3, sub.height()); + for (int x = 2; x < 4; x++) { + for (int y = 1; y < 4; y++) { + assertEquals(x + y * 5, sub.get(x-2,y-1)); + } + } } + + } diff --git a/src/test/java/model/CellularAutomatonSimulationTest.java b/src/test/java/model/CellularAutomatonSimulationTest.java index 81c4eaca06a853af85fc445d56c4e9e22ae0b846..cd7dd67ba39a8f11640171b1493d77d2f90ba4f9 100644 --- a/src/test/java/model/CellularAutomatonSimulationTest.java +++ b/src/test/java/model/CellularAutomatonSimulationTest.java @@ -1,6 +1,6 @@ package model; -import datastruct.Coordinate; +import matrix.Coordinate; import javafx.scene.paint.Color; import model.automata.GameOfLifeAutomaton; import static model.automata.GameOfLifeState.*; diff --git a/src/test/java/model/NextGenerationInitializerTest.java b/src/test/java/model/NextGenerationInitializerTest.java index b2e8ea71824fff1e65d46ce887d1dc5ac30967f3..8edee89c31ec04fe4bbc521d570602ae65f0570a 100644 --- a/src/test/java/model/NextGenerationInitializerTest.java +++ b/src/test/java/model/NextGenerationInitializerTest.java @@ -1,7 +1,6 @@ package model; -import controller.Simulation; -import datastruct.Coordinate; +import matrix.Coordinate; import model.automata.GameOfLifeAutomaton; import model.automata.GameOfLifeState; import org.junit.jupiter.api.BeforeEach;