From 48e60f336b1ca81a55841ba586b47023638890dc Mon Sep 17 00:00:00 2001 From: Kamil Rudny <134285490+krudny@users.noreply.github.com> Date: Fri, 24 Nov 2023 12:06:33 +0100 Subject: [PATCH 1/4] Created grass class and worldelement interface --- oolab/src/main/java/agh/ics/oop/model/Animal.java | 2 +- oolab/src/main/java/agh/ics/oop/model/Grass.java | 15 +++++++++++++++ .../main/java/agh/ics/oop/model/WorldElement.java | 7 +++++++ 3 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 oolab/src/main/java/agh/ics/oop/model/Grass.java create mode 100644 oolab/src/main/java/agh/ics/oop/model/WorldElement.java diff --git a/oolab/src/main/java/agh/ics/oop/model/Animal.java b/oolab/src/main/java/agh/ics/oop/model/Animal.java index 30332d7..3010125 100644 --- a/oolab/src/main/java/agh/ics/oop/model/Animal.java +++ b/oolab/src/main/java/agh/ics/oop/model/Animal.java @@ -1,6 +1,6 @@ package agh.ics.oop.model; -public class Animal { +public class Animal implements WorldElement { private MapDirection direction; private Vector2d position; public Animal() { diff --git a/oolab/src/main/java/agh/ics/oop/model/Grass.java b/oolab/src/main/java/agh/ics/oop/model/Grass.java new file mode 100644 index 0000000..604c0aa --- /dev/null +++ b/oolab/src/main/java/agh/ics/oop/model/Grass.java @@ -0,0 +1,15 @@ +package agh.ics.oop.model; + +public class Grass implements WorldElement { + private final Vector2d position; + public Grass(Vector2d position) { + this.position = position; + } + + public Vector2d getPosition() { + return position; + } + public String toString() { + return "*"; + } +} diff --git a/oolab/src/main/java/agh/ics/oop/model/WorldElement.java b/oolab/src/main/java/agh/ics/oop/model/WorldElement.java new file mode 100644 index 0000000..9099bda --- /dev/null +++ b/oolab/src/main/java/agh/ics/oop/model/WorldElement.java @@ -0,0 +1,7 @@ +package agh.ics.oop.model; + +public interface WorldElement { + String toString(); + + Vector2d getPosition(); +} From 80eacfdcb5d414482cd0027dd7302fd5acce1a96 Mon Sep 17 00:00:00 2001 From: Kamil Rudny <134285490+krudny@users.noreply.github.com> Date: Fri, 24 Nov 2023 12:21:45 +0100 Subject: [PATCH 2/4] WorldMap modification --- oolab/src/main/java/agh/ics/oop/model/RectangularMap.java | 5 ++--- oolab/src/main/java/agh/ics/oop/model/WorldMap.java | 2 +- .../src/main/java/agh/ics/oop/model/util/MapVisualizer.java | 3 +++ 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/oolab/src/main/java/agh/ics/oop/model/RectangularMap.java b/oolab/src/main/java/agh/ics/oop/model/RectangularMap.java index d41d81d..728f9ae 100644 --- a/oolab/src/main/java/agh/ics/oop/model/RectangularMap.java +++ b/oolab/src/main/java/agh/ics/oop/model/RectangularMap.java @@ -39,12 +39,11 @@ public boolean place(Animal animal) { } return false; } - @Override public boolean isOccupied(Vector2d position) { return animals.containsKey(position); } - @Override - public Animal objectAt(Vector2d position) { + + public WorldElement objectAt(Vector2d position) { return animals.get(position); } @Override diff --git a/oolab/src/main/java/agh/ics/oop/model/WorldMap.java b/oolab/src/main/java/agh/ics/oop/model/WorldMap.java index 1277b99..7592b70 100644 --- a/oolab/src/main/java/agh/ics/oop/model/WorldMap.java +++ b/oolab/src/main/java/agh/ics/oop/model/WorldMap.java @@ -41,5 +41,5 @@ public interface WorldMap extends MoveValidator { * @param position The position of the animal. * @return animal or null if the position is not occupied. */ - Animal objectAt(Vector2d position); + WorldElement objectAt(Vector2d position); } \ No newline at end of file diff --git a/oolab/src/main/java/agh/ics/oop/model/util/MapVisualizer.java b/oolab/src/main/java/agh/ics/oop/model/util/MapVisualizer.java index 25b95aa..dd8a388 100644 --- a/oolab/src/main/java/agh/ics/oop/model/util/MapVisualizer.java +++ b/oolab/src/main/java/agh/ics/oop/model/util/MapVisualizer.java @@ -1,6 +1,7 @@ package agh.ics.oop.model.util; import agh.ics.oop.model.Vector2d; +import agh.ics.oop.model.WorldElement; import agh.ics.oop.model.WorldMap; /** @@ -75,7 +76,9 @@ private String drawHeader(Vector2d lowerLeft, Vector2d upperRight) { private String drawObject(Vector2d currentPosition) { if (this.map.isOccupied(currentPosition)) { + Object object = this.map.objectAt(currentPosition); + if (object != null) { return object.toString(); } From cb4ce2d2df2281d107c23174935b33428e0a74c7 Mon Sep 17 00:00:00 2001 From: Kamil Rudny <134285490+krudny@users.noreply.github.com> Date: Wed, 29 Nov 2023 00:00:11 +0100 Subject: [PATCH 3/4] finished grass field map --- .../src/main/java/agh/ics/oop/Simulation.java | 1 + oolab/src/main/java/agh/ics/oop/World.java | 7 +- .../java/agh/ics/oop/model/GrassField.java | 105 ++++++++++++++++++ 3 files changed, 111 insertions(+), 2 deletions(-) create mode 100644 oolab/src/main/java/agh/ics/oop/model/GrassField.java diff --git a/oolab/src/main/java/agh/ics/oop/Simulation.java b/oolab/src/main/java/agh/ics/oop/Simulation.java index 5193c56..d234717 100644 --- a/oolab/src/main/java/agh/ics/oop/Simulation.java +++ b/oolab/src/main/java/agh/ics/oop/Simulation.java @@ -23,6 +23,7 @@ public Simulation(List positions, List moves, WorldMap } public void run() { + System.out.println(Map); int animal_count = Animals.size(); int cnt = 0; diff --git a/oolab/src/main/java/agh/ics/oop/World.java b/oolab/src/main/java/agh/ics/oop/World.java index 97b39dd..ff9b576 100644 --- a/oolab/src/main/java/agh/ics/oop/World.java +++ b/oolab/src/main/java/agh/ics/oop/World.java @@ -28,10 +28,13 @@ public static void run(List directions) { } public static void main(String[] args) { List directions = OptionsParser.Parser(args); - List positions = List.of(new Vector2d(2,2), new Vector2d(3,4), new Vector2d(0,0)); - WorldMap worldMap = new RectangularMap(5,5); + List positions = List.of(new Vector2d(3,4)); + GrassField worldMap = new GrassField(10); + worldMap.generatePositions(); + Simulation simulation = new Simulation(positions, directions, worldMap); simulation.run(); + } } diff --git a/oolab/src/main/java/agh/ics/oop/model/GrassField.java b/oolab/src/main/java/agh/ics/oop/model/GrassField.java new file mode 100644 index 0000000..ef27cc7 --- /dev/null +++ b/oolab/src/main/java/agh/ics/oop/model/GrassField.java @@ -0,0 +1,105 @@ +package agh.ics.oop.model; + +import agh.ics.oop.model.util.MapVisualizer; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; + +public class GrassField implements WorldMap { + private int grass_amount; + private final Map grass = new HashMap<>(); + private final Map animals = new HashMap<>(); + private final MapVisualizer mapVisualizer = new MapVisualizer(this); + + public GrassField(int grass_amount) { + this.grass_amount = grass_amount; + } + + Vector2d MAP_LEFT_BOTTOM = new Vector2d(0,0); + Vector2d MAP_RIGHT_TOP = new Vector2d(0,0); + + + public void generatePositions() { + int maxX = (int) Math.sqrt((double) grass_amount * 10); + int maxY = maxX; + Set positions = new HashSet<>(); + + while (positions.size() < grass_amount) { + + int x = (int) (Math.random() * maxX); + int y = (int) (Math.random() * maxY); + + Vector2d vec = new Vector2d(x, y); + calculateMapSize(vec); + + Vector2d position = new Vector2d(x, y); + positions.add(position); + } + + for(Vector2d position : positions) { + grass.put(position, new Grass(position)); + } + } + + + @Override + public String toString() { + return mapVisualizer.draw(MAP_LEFT_BOTTOM, MAP_RIGHT_TOP); + } + + + @Override + public boolean canMoveTo(Vector2d position) { + + return !animals.containsKey(position); + } + + @Override + public boolean place(Animal animal) { + Vector2d position = animal.getPosition(); + if(canMoveTo(position)) { + animals.put(position, animal); + return true; + } + return false; + } + + public void calculateMapSize(Vector2d vec) { + MAP_LEFT_BOTTOM = MAP_LEFT_BOTTOM.lowerLeft(vec); + MAP_RIGHT_TOP = MAP_RIGHT_TOP.upperRight(vec); + } + + @Override + public void move(Animal animal, MoveDirection direction) { + Vector2d position = animal.getPosition(); + if (animals.containsKey(position)){ + animal.move(direction, this); + if (!position.equals(animal.getPosition())){ + animals.put(animal.getPosition(), animal); + animals.remove(position); + + int x = animal.getPosition().getX(); + int y = animal.getPosition().getY(); + + Vector2d vec = new Vector2d(x, y); + calculateMapSize(vec); + } + } + } + @Override + public boolean isOccupied(Vector2d position) { + return (animals.containsKey(position) || grass.containsKey(position)); + } + + @Override + public WorldElement objectAt(Vector2d position) { + if (animals.containsKey(position)){ + return animals.get(position); + } else if (grass.containsKey(position)) { + return grass.get(position); + } + return null; + } +} From 4b967fadfc33f8db5287135ff3aae61fcfd2af76 Mon Sep 17 00:00:00 2001 From: Kamil Rudny <134285490+krudny@users.noreply.github.com> Date: Fri, 1 Dec 2023 21:40:57 +0100 Subject: [PATCH 4/4] finished tests --- .../src/main/java/agh/ics/oop/Simulation.java | 1 - oolab/src/main/java/agh/ics/oop/World.java | 13 +-- .../agh/ics/oop/model/AbstractWorldMap.java | 71 ++++++++++++++++ .../java/agh/ics/oop/model/GrassField.java | 83 ++++++------------- .../agh/ics/oop/model/RectangularMap.java | 36 +------- .../agh/ics/oop/model/GrassFieldTest.java | 58 +++++++++++++ .../IntegrationAbstractWorldMapTest.java | 75 +++++++++++++++++ .../ics/oop/model/IntegrationMoveTest.java | 8 +- .../agh/ics/oop/model/RectangularMapTest.java | 3 - 9 files changed, 243 insertions(+), 105 deletions(-) create mode 100644 oolab/src/main/java/agh/ics/oop/model/AbstractWorldMap.java create mode 100644 oolab/src/test/java/agh/ics/oop/model/GrassFieldTest.java create mode 100644 oolab/src/test/java/agh/ics/oop/model/IntegrationAbstractWorldMapTest.java diff --git a/oolab/src/main/java/agh/ics/oop/Simulation.java b/oolab/src/main/java/agh/ics/oop/Simulation.java index d234717..563b2f8 100644 --- a/oolab/src/main/java/agh/ics/oop/Simulation.java +++ b/oolab/src/main/java/agh/ics/oop/Simulation.java @@ -12,7 +12,6 @@ public class Simulation { public Simulation(List positions, List moves, WorldMap map) { this.Moves = moves; this.Map = map; - for(Vector2d position : positions) { Animal new_animal = new Animal(position.getX(), position.getY()); if(map.place(new_animal)) { diff --git a/oolab/src/main/java/agh/ics/oop/World.java b/oolab/src/main/java/agh/ics/oop/World.java index ff9b576..d383d44 100644 --- a/oolab/src/main/java/agh/ics/oop/World.java +++ b/oolab/src/main/java/agh/ics/oop/World.java @@ -4,6 +4,7 @@ import java.util.ArrayList; import java.util.List; +import java.util.Map; import java.util.Objects; public class World { @@ -27,13 +28,13 @@ public static void run(List directions) { } } public static void main(String[] args) { - List directions = OptionsParser.Parser(args); - List positions = List.of(new Vector2d(3,4)); - GrassField worldMap = new GrassField(10); - worldMap.generatePositions(); + String[] args1 = {"f", "b", "l", "r", "r", "f", "l", "b", "b"}; + List directions = OptionsParser.Parser(args1); + List positions = List.of(new Vector2d(2,2), new Vector2d(3,4), new Vector2d(0,0)); - Simulation simulation = new Simulation(positions, directions, worldMap); - simulation.run(); + GrassField map = new GrassField(10); + Simulation sim = new Simulation(positions, directions, map); + sim.run(); } diff --git a/oolab/src/main/java/agh/ics/oop/model/AbstractWorldMap.java b/oolab/src/main/java/agh/ics/oop/model/AbstractWorldMap.java new file mode 100644 index 0000000..6c08af6 --- /dev/null +++ b/oolab/src/main/java/agh/ics/oop/model/AbstractWorldMap.java @@ -0,0 +1,71 @@ +package agh.ics.oop.model; + +import agh.ics.oop.model.util.MapVisualizer; + +import java.util.HashMap; +import java.util.Map; + +public abstract class AbstractWorldMap implements WorldMap { + protected Map animals = new HashMap<>(); + protected Map all_elements = new HashMap<>(); + protected MapVisualizer mapVisualizer = new MapVisualizer(this); + Vector2d MAP_LEFT_BOTTOM = new Vector2d(0,0); + Vector2d MAP_RIGHT_TOP = new Vector2d(0,0); + + @Override + public boolean place(Animal animal) { + if (canMoveTo(animal.getPosition())){ + animals.put(animal.getPosition(), animal); + return true; + } + + return false; + } + + @Override + public boolean canMoveTo(Vector2d position) { + return !animals.containsKey(position); + } + + @Override + public WorldElement objectAt(Vector2d position) { + return animals.get(position); + } + + @Override + public boolean isOccupied(Vector2d position) { + return animals.containsKey(position); + } + + @Override + public void move(Animal animal, MoveDirection direction) { + Vector2d position = animal.getPosition(); + if (animals.containsKey(position)){ + animal.move(direction, this); + if (!position.equals(animal.getPosition())){ + animals.put(animal.getPosition(), animal); + animals.remove(position); + int x = animal.getPosition().getX(); + int y = animal.getPosition().getY(); + Vector2d vec = new Vector2d(x, y); + calculateMapSize(vec); + } + } + } + + public void calculateMapSize(Vector2d vec) { + MAP_LEFT_BOTTOM = MAP_LEFT_BOTTOM.lowerLeft(vec); + MAP_RIGHT_TOP = MAP_RIGHT_TOP.upperRight(vec); + } + + public Map getElements(){ + for(Map.Entry entry : animals.entrySet()){ + Vector2d key = entry.getKey(); + WorldElement element = entry.getValue(); + + all_elements.put(key, element); + } + + return all_elements; + } +} diff --git a/oolab/src/main/java/agh/ics/oop/model/GrassField.java b/oolab/src/main/java/agh/ics/oop/model/GrassField.java index ef27cc7..100b0a6 100644 --- a/oolab/src/main/java/agh/ics/oop/model/GrassField.java +++ b/oolab/src/main/java/agh/ics/oop/model/GrassField.java @@ -1,49 +1,34 @@ package agh.ics.oop.model; - import agh.ics.oop.model.util.MapVisualizer; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; +import java.util.*; -public class GrassField implements WorldMap { +public class GrassField extends AbstractWorldMap { private int grass_amount; private final Map grass = new HashMap<>(); - private final Map animals = new HashMap<>(); - private final MapVisualizer mapVisualizer = new MapVisualizer(this); + public GrassField(int grass_amount) { this.grass_amount = grass_amount; + generatePositions(); } - Vector2d MAP_LEFT_BOTTOM = new Vector2d(0,0); - Vector2d MAP_RIGHT_TOP = new Vector2d(0,0); - - public void generatePositions() { int maxX = (int) Math.sqrt((double) grass_amount * 10); int maxY = maxX; Set positions = new HashSet<>(); - while (positions.size() < grass_amount) { - int x = (int) (Math.random() * maxX); int y = (int) (Math.random() * maxY); - Vector2d vec = new Vector2d(x, y); calculateMapSize(vec); - Vector2d position = new Vector2d(x, y); positions.add(position); } - for(Vector2d position : positions) { grass.put(position, new Grass(position)); } } - - @Override public String toString() { return mapVisualizer.draw(MAP_LEFT_BOTTOM, MAP_RIGHT_TOP); @@ -51,55 +36,37 @@ public String toString() { @Override - public boolean canMoveTo(Vector2d position) { - - return !animals.containsKey(position); + public boolean isOccupied(Vector2d position) { + return (super.isOccupied(position) || grass.containsKey(position)); } - @Override - public boolean place(Animal animal) { - Vector2d position = animal.getPosition(); - if(canMoveTo(position)) { - animals.put(position, animal); - return true; + public WorldElement objectAt(Vector2d position) { + + if (grass.containsKey(position)) { + return grass.get(position); } - return false; + return super.objectAt(position); } - public void calculateMapSize(Vector2d vec) { - MAP_LEFT_BOTTOM = MAP_LEFT_BOTTOM.lowerLeft(vec); - MAP_RIGHT_TOP = MAP_RIGHT_TOP.upperRight(vec); + public Map getGrass(){ + return grass; + } + + public Map getAnimals(){ + return animals; } @Override - public void move(Animal animal, MoveDirection direction) { - Vector2d position = animal.getPosition(); - if (animals.containsKey(position)){ - animal.move(direction, this); - if (!position.equals(animal.getPosition())){ - animals.put(animal.getPosition(), animal); - animals.remove(position); + public Map getElements(){ + Map all_animals = super.getElements(); - int x = animal.getPosition().getX(); - int y = animal.getPosition().getY(); + for(Map.Entry entry : grass.entrySet()){ + Vector2d key = entry.getKey(); + WorldElement element = entry.getValue(); - Vector2d vec = new Vector2d(x, y); - calculateMapSize(vec); - } + all_elements.put(key, element); } - } - @Override - public boolean isOccupied(Vector2d position) { - return (animals.containsKey(position) || grass.containsKey(position)); - } - @Override - public WorldElement objectAt(Vector2d position) { - if (animals.containsKey(position)){ - return animals.get(position); - } else if (grass.containsKey(position)) { - return grass.get(position); - } - return null; + return all_elements; } -} +} \ No newline at end of file diff --git a/oolab/src/main/java/agh/ics/oop/model/RectangularMap.java b/oolab/src/main/java/agh/ics/oop/model/RectangularMap.java index 728f9ae..77b4377 100644 --- a/oolab/src/main/java/agh/ics/oop/model/RectangularMap.java +++ b/oolab/src/main/java/agh/ics/oop/model/RectangularMap.java @@ -1,56 +1,26 @@ package agh.ics.oop.model; - import agh.ics.oop.model.util.MapVisualizer; - import java.util.HashMap; import java.util.Map; +public class RectangularMap extends AbstractWorldMap { -public class RectangularMap implements WorldMap { - private Map animals = new HashMap<>(); private final int width; private final int height; private final Vector2d MAP_RIGHT_TOP; private final Vector2d MAP_LEFT_BOTTOM; private final MapVisualizer mapVisualizer = new MapVisualizer(this); - public RectangularMap(int width, int height) { this.width = width; this.height = height; - MAP_RIGHT_TOP = new Vector2d(width - 1, height - 1); MAP_LEFT_BOTTOM = new Vector2d(0,0); } - @Override - public void move(Animal animal, MoveDirection direction) { - Vector2d position = animal.getPosition(); - if (animals.containsKey(position)){ - animal.move(direction, this); - if (!position.equals(animal.getPosition())){ - animals.put(animal.getPosition(), animal); - animals.remove(position); - } - } - } - @Override - public boolean place(Animal animal) { - if (canMoveTo(animal.getPosition())){ - animals.put(animal.getPosition(), animal); - return true; - } - return false; - } - public boolean isOccupied(Vector2d position) { - return animals.containsKey(position); - } - public WorldElement objectAt(Vector2d position) { - return animals.get(position); - } + @Override public boolean canMoveTo(Vector2d position) { return (!isOccupied(position) && position.precedes(MAP_RIGHT_TOP) && position.follows(MAP_LEFT_BOTTOM)); } - public Vector2d getMAP_RIGHT_TOP() { return MAP_RIGHT_TOP; } @@ -61,4 +31,4 @@ public Vector2d getMAP_LEFT_BOTTOM() { public String toString(){ return mapVisualizer.draw(MAP_LEFT_BOTTOM, MAP_RIGHT_TOP); } -} +} \ No newline at end of file diff --git a/oolab/src/test/java/agh/ics/oop/model/GrassFieldTest.java b/oolab/src/test/java/agh/ics/oop/model/GrassFieldTest.java new file mode 100644 index 0000000..a80f787 --- /dev/null +++ b/oolab/src/test/java/agh/ics/oop/model/GrassFieldTest.java @@ -0,0 +1,58 @@ +package agh.ics.oop.model; + +import agh.ics.oop.OptionsParser; +import agh.ics.oop.Simulation; +import org.junit.jupiter.api.Test; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import static org.junit.jupiter.api.Assertions.*; + +public class GrassFieldTest { + @Test + public void placeTest() { + List positions = List.of(new Vector2d(2,2), new Vector2d(3,4), new Vector2d(0,0)); + GrassField map = new GrassField(10); + Map finalAnimals = map.getAnimals(); + + for(Vector2d position : positions) { + map.place(new Animal(position.getX(), position.getY())); + } + + assertTrue(finalAnimals.containsKey(new Vector2d(3,4))); + assertTrue(finalAnimals.containsKey(new Vector2d(0,0))); + assertTrue(finalAnimals.containsKey(new Vector2d(2,2))); + assertFalse(finalAnimals.containsKey(new Vector2d(1,2))); + } + + @Test + public void isOccupiedTest() { + List positions = List.of(new Vector2d(2,2), new Vector2d(5,7), new Vector2d(-4,0)); + GrassField map = new GrassField(10); + + for(Vector2d position : positions) { + map.place(new Animal(position.getX(), position.getY())); + } + + assertTrue(map.isOccupied(new Vector2d(2,2))); + assertTrue(map.isOccupied(new Vector2d(5,7))); + assertTrue(map.isOccupied(new Vector2d(-4,0))); + } + + @Test + public void objectAtTest() { + List positions = List.of(new Vector2d(2,2)); + GrassField map = new GrassField(10); + + for(Vector2d position : positions) { + map.place(new Animal(position.getX(), position.getY())); + } + + Animal animal = (Animal) map.objectAt(new Vector2d(2,2)); + Vector2d vec = animal.getPosition(); + + assertEquals(vec, new Vector2d(2,2)); + } +} diff --git a/oolab/src/test/java/agh/ics/oop/model/IntegrationAbstractWorldMapTest.java b/oolab/src/test/java/agh/ics/oop/model/IntegrationAbstractWorldMapTest.java new file mode 100644 index 0000000..3b6c90f --- /dev/null +++ b/oolab/src/test/java/agh/ics/oop/model/IntegrationAbstractWorldMapTest.java @@ -0,0 +1,75 @@ +package agh.ics.oop.model; + +import agh.ics.oop.OptionsParser; +import agh.ics.oop.Simulation; +import org.junit.jupiter.api.Test; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class IntegrationAbstractWorldMapTest { + @Test + public void RectangularMapMovesTest() { + String[] args = {"f", "b", "l", "r", "r", "f", "l", "b", "b"}; + List directions = OptionsParser.Parser(args); + List positions = List.of(new Vector2d(2,2), new Vector2d(3,4), new Vector2d(0,0)); + + RectangularMap map = new RectangularMap(10, 10); + Simulation sim = new Simulation(positions, directions, map); + sim.run(); + + List finalAnimals = sim.getAnimals(); + List actualPositions = new ArrayList<>(); + + for (Animal animal : finalAnimals) { + actualPositions.add(animal.getPosition()); + } + List correctPositions = new ArrayList<>() {{ + add(new Vector2d(2,3)); + add(new Vector2d(3,3)); + add(new Vector2d(1,0)); + }}; + + assertEquals(correctPositions, actualPositions); + } + + @Test + public void GrassFieldMovesTest() { + String[] args = {"f", "f", "r", "f", "f", "b", "f", "f"}; + List directions = OptionsParser.Parser(args); + List positions = List.of(new Vector2d(2,2)); + + GrassField map = new GrassField(15); + Simulation sim = new Simulation(positions, directions, map); + sim.run(); + + List finalAnimals = sim.getAnimals(); + List actualPositions = new ArrayList<>(); + + for (Animal animal : finalAnimals) { + actualPositions.add(animal.getPosition()); + } + List correctPositions = new ArrayList<>() {{ + add(new Vector2d(5,4)); + }}; + + assertEquals(correctPositions, actualPositions); + } + + @Test + public void GrassAmountTest(){ + GrassField map = new GrassField(15); + Map grass = map.getGrass(); + + assertEquals(grass.size(), 15); + + GrassField map2 = new GrassField(3); + Map grass2 = map2.getGrass(); + + assertEquals(grass2.size(), 3); + } + +} diff --git a/oolab/src/test/java/agh/ics/oop/model/IntegrationMoveTest.java b/oolab/src/test/java/agh/ics/oop/model/IntegrationMoveTest.java index e561742..0e3c51c 100644 --- a/oolab/src/test/java/agh/ics/oop/model/IntegrationMoveTest.java +++ b/oolab/src/test/java/agh/ics/oop/model/IntegrationMoveTest.java @@ -58,7 +58,7 @@ public void testInvalidMoves() { } @Test public void testOutOfBorderMoves1() { - String[] args = {"f", "l", "f", "f", "f", "f", "f", "f", "f", "f", "f", "f"}; + String[] args = {"f", "l", "l", "f", "f", "f", "f", "f", "f", "f", "f"}; List directions = OptionsParser.Parser(args); List positions = List.of(new Vector2d(2,2), new Vector2d(3,4)); WorldMap worldMap = new RectangularMap(7,7); @@ -72,8 +72,8 @@ public void testOutOfBorderMoves1() { actualPositions.add(animal.getPosition()); } List correctPositions = new ArrayList<>() {{ - add(new Vector2d(2,4)); add(new Vector2d(0,4)); + add(new Vector2d(0,3)); }}; assertEquals(correctPositions, actualPositions); @@ -94,8 +94,8 @@ public void testOutOfBorderMoves2() { actualPositions.add(animal.getPosition()); } List correctPositions = new ArrayList<>() {{ - add(new Vector2d(4,3)); - add(new Vector2d(4,4)); + add(new Vector2d(6,3)); + add(new Vector2d(6,4)); }}; assertEquals(correctPositions, actualPositions); diff --git a/oolab/src/test/java/agh/ics/oop/model/RectangularMapTest.java b/oolab/src/test/java/agh/ics/oop/model/RectangularMapTest.java index 145db56..5cecff2 100644 --- a/oolab/src/test/java/agh/ics/oop/model/RectangularMapTest.java +++ b/oolab/src/test/java/agh/ics/oop/model/RectangularMapTest.java @@ -16,7 +16,6 @@ public void testCanMoveToBasic(){ assertTrue(rectangularMap.canMoveTo(VEC11)); assertFalse(rectangularMap.canMoveTo(new Vector2d(5,5))); } - @Test public void testPlace(){ RectangularMap rectangularMap = new RectangularMap(4,4); @@ -24,7 +23,6 @@ public void testPlace(){ assertTrue(rectangularMap.place(ANIMAL2)); assertFalse(rectangularMap.place(new Animal())); } - @Test public void testIsOccupied(){ RectangularMap rectangularMap = new RectangularMap(4,4); @@ -33,7 +31,6 @@ public void testIsOccupied(){ assertFalse(rectangularMap.isOccupied(new Vector2d(0,0))); assertTrue(rectangularMap.isOccupied(VEC11)); } - @Test public void testObjectAt(){ RectangularMap rectangularMap = new RectangularMap(4,4);