From 33f4823d81eb7dc61ab9cb10f3f5d9544e11b4df Mon Sep 17 00:00:00 2001
From: bosskkev <kossivikevin29@gmail.com>
Date: Sun, 26 Nov 2023 18:29:42 +0100
Subject: [PATCH] Rajout des tests des CartesianVector et des Movable.

---
 src/main/java/engine/Kernel.java              | 19 +++---
 .../java/engine/graphic/GraphicEngine.java    |  9 +--
 .../java/engine/graphic/ImageComponent.java   | 10 +--
 .../java/engine/graphic/ScoreComponent.java   |  8 +--
 ...oordinates2D.java => CartesianVector.java} | 21 ++++---
 src/main/java/engine/physic/Entity.java       | 14 ++---
 src/main/java/engine/physic/Movable.java      | 28 ++++-----
 src/main/java/engine/physic/NotMovable.java   | 19 +++---
 src/main/java/engine/physic/PhysicEngine.java | 11 ++--
 src/main/java/pong/PongApp.java               | 12 ++--
 src/main/java/pong/PongBall.java              | 24 +++----
 src/main/java/pong/PongObject.java            | 14 ++---
 src/main/java/pong/PongRacket.java            | 24 +++----
 src/main/java/sprint2_demo/Grid.java          |  8 +--
 src/main/java/sprint2_demo/Hero.java          | 18 +++---
 .../engine/physic/CartesianVectorTest.java    | 49 +++++++++++++++
 src/test/java/engine/physic/MovableTest.java  | 63 +++++++++++++++++++
 src/test/java/pong/PongBallTest.java          | 18 ------
 18 files changed, 226 insertions(+), 143 deletions(-)
 rename src/main/java/engine/physic/{Coordinates2D.java => CartesianVector.java} (50%)
 create mode 100644 src/test/java/engine/physic/CartesianVectorTest.java
 create mode 100644 src/test/java/engine/physic/MovableTest.java
 delete mode 100644 src/test/java/pong/PongBallTest.java

diff --git a/src/main/java/engine/Kernel.java b/src/main/java/engine/Kernel.java
index ac5221d..c50f348 100644
--- a/src/main/java/engine/Kernel.java
+++ b/src/main/java/engine/Kernel.java
@@ -1,14 +1,13 @@
 package engine;
 
 import engine.graphic.GraphicEngine;
-import engine.physic.Coordinates2D;
+import engine.physic.CartesianVector;
 import engine.physic.Entity;
 import engine.sound.SoundEngine;
 import engine.physic.PhysicEngine;
 import pong.PongObject;
 
 import javax.swing.*;
-import java.awt.*;
 import java.awt.event.ActionEvent;
 import java.io.IOException;
 import java.util.ArrayList;
@@ -103,28 +102,28 @@ public class Kernel {
         Action upAction = new AbstractAction() {
             @Override
             public void actionPerformed(ActionEvent e) {
-                physicEngine.pongObjectEntityHashMap.get(gameObjects.get(1)).setSpeed(new Coordinates2D(0, -3));
+                physicEngine.pongObjectEntityHashMap.get(gameObjects.get(1)).setSpeed(new CartesianVector(0, -3));
             }
         };
 
         Action downAction = new AbstractAction() {
             @Override
             public void actionPerformed(ActionEvent e) {
-                physicEngine.pongObjectEntityHashMap.get(gameObjects.get(1)).setSpeed(new Coordinates2D(0, 3));
+                physicEngine.pongObjectEntityHashMap.get(gameObjects.get(1)).setSpeed(new CartesianVector(0, 3));
             }
         };
 
         Action zAction = new AbstractAction() {
             @Override
             public void actionPerformed(ActionEvent e) {
-                physicEngine.pongObjectEntityHashMap.get(gameObjects.get(0)).setSpeed(new Coordinates2D(0, -3));
+                physicEngine.pongObjectEntityHashMap.get(gameObjects.get(0)).setSpeed(new CartesianVector(0, -3));
             }
         };
 
         Action sAction = new AbstractAction() {
             @Override
             public void actionPerformed(ActionEvent e) {
-                physicEngine.pongObjectEntityHashMap.get(gameObjects.get(0)).setSpeed(new Coordinates2D(0, 3));
+                physicEngine.pongObjectEntityHashMap.get(gameObjects.get(0)).setSpeed(new CartesianVector(0, 3));
             }
         };
 
@@ -144,28 +143,28 @@ public class Kernel {
         Action upReleaseAction = new AbstractAction() {
             @Override
             public void actionPerformed(ActionEvent e) {
-                physicEngine.pongObjectEntityHashMap.get(gameObjects.get(1)).setSpeed(new Coordinates2D(0, 0));
+                physicEngine.pongObjectEntityHashMap.get(gameObjects.get(1)).setSpeed(new CartesianVector(0, 0));
             }
         };
 
         Action downReleaseAction = new AbstractAction() {
             @Override
             public void actionPerformed(ActionEvent e) {
-                physicEngine.pongObjectEntityHashMap.get(gameObjects.get(1)).setSpeed(new Coordinates2D(0, 0));
+                physicEngine.pongObjectEntityHashMap.get(gameObjects.get(1)).setSpeed(new CartesianVector(0, 0));
             }
         };
 
         Action zReleaseAction = new AbstractAction() {
             @Override
             public void actionPerformed(ActionEvent e) {
-                physicEngine.pongObjectEntityHashMap.get(gameObjects.get(0)).setSpeed(new Coordinates2D(0, 0));
+                physicEngine.pongObjectEntityHashMap.get(gameObjects.get(0)).setSpeed(new CartesianVector(0, 0));
             }
         };
 
         Action sReleaseAction = new AbstractAction() {
             @Override
             public void actionPerformed(ActionEvent e) {
-                physicEngine.pongObjectEntityHashMap.get(gameObjects.get(0)).setSpeed(new Coordinates2D(0, 0));
+                physicEngine.pongObjectEntityHashMap.get(gameObjects.get(0)).setSpeed(new CartesianVector(0, 0));
             }
         };
 
diff --git a/src/main/java/engine/graphic/GraphicEngine.java b/src/main/java/engine/graphic/GraphicEngine.java
index 3e88eb6..9dda229 100644
--- a/src/main/java/engine/graphic/GraphicEngine.java
+++ b/src/main/java/engine/graphic/GraphicEngine.java
@@ -2,15 +2,12 @@ package engine.graphic;
 
 import engine.Engine;
 import engine.Kernel;
-import engine.physic.Coordinates2D;
-import engine.sound.SoundEngine;
+import engine.physic.CartesianVector;
 import pong.PongApp;
 import pong.PongObject;
 
 import javax.swing.*;
 import java.awt.*;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
 import java.io.IOException;
 
 public class GraphicEngine extends JFrame implements Engine {
@@ -64,7 +61,7 @@ public class GraphicEngine extends JFrame implements Engine {
             }
         }
         drawRect();
-        this.getContentPane().add(new ScoreComponent(new Coordinates2D(100, 100), new Coordinates2D(670, 100), PongApp.score1, PongApp.score2));
+        this.getContentPane().add(new ScoreComponent(new CartesianVector(100, 100), new CartesianVector(670, 100), PongApp.score1, PongApp.score2));
         repaint();
         revalidate();
 
@@ -95,7 +92,7 @@ public class GraphicEngine extends JFrame implements Engine {
     }
 
     public void drawScore(int score1, int score2){
-        this.getContentPane().add(new ScoreComponent(new Coordinates2D(100, 100), new Coordinates2D(500, 100), score1, score2));
+        this.getContentPane().add(new ScoreComponent(new CartesianVector(100, 100), new CartesianVector(500, 100), score1, score2));
     }
 
     public void addButton(JButton button){
diff --git a/src/main/java/engine/graphic/ImageComponent.java b/src/main/java/engine/graphic/ImageComponent.java
index 3efac2a..310360f 100644
--- a/src/main/java/engine/graphic/ImageComponent.java
+++ b/src/main/java/engine/graphic/ImageComponent.java
@@ -1,6 +1,6 @@
 package engine.graphic;
 
-import engine.physic.Coordinates2D;
+import engine.physic.CartesianVector;
 import pong.PongApp;
 
 import javax.swing.*;
@@ -8,12 +8,12 @@ import java.awt.*;
 
 public class ImageComponent extends JComponent {
     private Image image;
-    private Coordinates2D position;
+    private CartesianVector position;
 
     private int width;
     private int height;
 
-    public ImageComponent(Image image, Coordinates2D position, int width, int height) {
+    public ImageComponent(Image image, CartesianVector position, int width, int height) {
         this.width = width;
         this.height = height;
         this.image = image;
@@ -29,11 +29,11 @@ public class ImageComponent extends JComponent {
         return image;
     }
 
-    public Coordinates2D getPosition() {
+    public CartesianVector getPosition() {
         return position;
     }
 
-    public void setPosition(Coordinates2D position) {
+    public void setPosition(CartesianVector position) {
         this.position = position;
     }
 
diff --git a/src/main/java/engine/graphic/ScoreComponent.java b/src/main/java/engine/graphic/ScoreComponent.java
index bbde00a..e1640f2 100644
--- a/src/main/java/engine/graphic/ScoreComponent.java
+++ b/src/main/java/engine/graphic/ScoreComponent.java
@@ -1,6 +1,6 @@
 package engine.graphic;
 
-import engine.physic.Coordinates2D;
+import engine.physic.CartesianVector;
 import pong.PongApp;
 
 import javax.swing.*;
@@ -9,10 +9,10 @@ import java.awt.*;
 public class ScoreComponent extends JComponent {
     private int score1;
     private int score2;
-    Coordinates2D position1;
-    Coordinates2D position2;
+    CartesianVector position1;
+    CartesianVector position2;
 
-    public ScoreComponent(Coordinates2D position1, Coordinates2D position2, int score1, int score2) {
+    public ScoreComponent(CartesianVector position1, CartesianVector position2, int score1, int score2) {
         this.score1 = score1;
         this.score2 = score2;
         this.position1 = position1;
diff --git a/src/main/java/engine/physic/Coordinates2D.java b/src/main/java/engine/physic/CartesianVector.java
similarity index 50%
rename from src/main/java/engine/physic/Coordinates2D.java
rename to src/main/java/engine/physic/CartesianVector.java
index c2c3f9f..d2a6089 100644
--- a/src/main/java/engine/physic/Coordinates2D.java
+++ b/src/main/java/engine/physic/CartesianVector.java
@@ -1,20 +1,20 @@
 package engine.physic;
 
-public class Coordinates2D {
+public class CartesianVector {
     private int x;
     private int y;
-    public Coordinates2D(int x, int y){
+    public CartesianVector(int x, int y){
         this.x = x;
         this.y = y;
     }
-    public void add(Coordinates2D otherCoordinates2D){
-        this.x += otherCoordinates2D.getX();
-        this.y += otherCoordinates2D.getY();
+    public void add(CartesianVector otherCartesianVector){
+        this.x += otherCartesianVector.getX();
+        this.y += otherCartesianVector.getY();
     }
 
-    public void sub(Coordinates2D otherCoordinates2D){
-        this.x -= otherCoordinates2D.getX();
-        this.y -= otherCoordinates2D.getY();
+    public void sub(CartesianVector otherCartesianVector){
+        this.x -= otherCartesianVector.getX();
+        this.y -= otherCartesianVector.getY();
     }
 
     public void mul(int scalar){
@@ -51,7 +51,8 @@ public class Coordinates2D {
         this.x = x;
     }
 
-    public boolean equals(Coordinates2D otherCoordinates2D){
-        return this.x == otherCoordinates2D.getX() && this.y == otherCoordinates2D.getY();
+    public boolean equals(CartesianVector otherCartesianVector){
+        System.out.println("Comparing " + this.x + " " + this.y + " with " + otherCartesianVector.getX() + " " + otherCartesianVector.getY());
+        return this.x == otherCartesianVector.getX() && this.y == otherCartesianVector.getY();
     }
 }
\ No newline at end of file
diff --git a/src/main/java/engine/physic/Entity.java b/src/main/java/engine/physic/Entity.java
index 9b1fd46..d159b30 100644
--- a/src/main/java/engine/physic/Entity.java
+++ b/src/main/java/engine/physic/Entity.java
@@ -1,7 +1,5 @@
 package engine.physic;
 
-import engine.physic.Coordinates2D;
-
 /**
  * Interface for all entities in the game
  */
@@ -18,40 +16,40 @@ public interface Entity {
      * 
      * @return speed
      */
-    public Coordinates2D getSpeed();
+    public CartesianVector getSpeed();
 
     /**
      * Return the position of the entity
      * 
      * @return position
      */
-    public Coordinates2D getPosition();
+    public CartesianVector getPosition();
 
     /**
      * Return the acceleration of the entity
      * 
      * @return acceleration
      */
-    public Coordinates2D getAcceleration();
+    public CartesianVector getAcceleration();
 
     /**
      * Set the speed of the entity
      * 
      * @param speed the new speed of the entity
      */
-    public void setSpeed(Coordinates2D speed);
+    public void setSpeed(CartesianVector speed);
 
     /**
      * Set the position of the entity
      * 
      * @param position the new position of the entity
      */
-    public void setPosition(Coordinates2D position);
+    public void setPosition(CartesianVector position);
 
     /**
      * Set the acceleration of the entity
      */
-    public void setAcceleration(Coordinates2D acceleration);
+    public void setAcceleration(CartesianVector acceleration);
 
     /**
      * Update the position of the entity
diff --git a/src/main/java/engine/physic/Movable.java b/src/main/java/engine/physic/Movable.java
index 5aef204..b2a9c46 100644
--- a/src/main/java/engine/physic/Movable.java
+++ b/src/main/java/engine/physic/Movable.java
@@ -7,13 +7,13 @@ public class Movable implements Entity {
 
     private int width;
     private int height;
-    private Coordinates2D speed;
-    private Coordinates2D position;
+    private CartesianVector speed;
+    private CartesianVector position;
 
-    private Coordinates2D acceleration;
+    private CartesianVector acceleration;
 
 
-    public Movable(int weight, Coordinates2D position, Coordinates2D speed, Coordinates2D acceleration, int width, int height) {
+    public Movable(int weight, CartesianVector position, CartesianVector speed, CartesianVector acceleration, int width, int height) {
         this.weight = weight;
         this.speed = speed;
         this.position = position;
@@ -28,38 +28,38 @@ public class Movable implements Entity {
     }
 
     @Override
-    public Coordinates2D getSpeed() {
+    public CartesianVector getSpeed() {
         return speed;
     }
 
     @Override
-    public Coordinates2D getPosition() {
+    public CartesianVector getPosition() {
         return position;
     }
 
     @Override
-    public Coordinates2D getAcceleration() {
+    public CartesianVector getAcceleration() {
         return acceleration;
     }
 
     @Override
-    public void setSpeed(Coordinates2D speed) {
+    public void setSpeed(CartesianVector speed) {
         this.speed = speed;
     }
 
     @Override
-    public void setPosition(Coordinates2D position) {
+    public void setPosition(CartesianVector position) {
         this.position = position;
     }
 
     @Override
-    public void setAcceleration(Coordinates2D acceleration) {
+    public void setAcceleration(CartesianVector acceleration) {
 
     }
 
     @Override
     public void updatePosition() {
-        Coordinates2D newPosition = new Coordinates2D(this.position.getX(), this.position.getY());
+        CartesianVector newPosition = new CartesianVector(this.position.getX(), this.position.getY());
         newPosition.add(this.speed); // Calculating the new position
 
         if(newPosition.getX() <= 100 && !PongApp.isGoal){
@@ -71,7 +71,7 @@ public class Movable implements Entity {
             PongApp.isGoal = true;
         }
         if (newPosition.getY() <= 100 || newPosition.getY() >= PongApp.rectHeight - this.height + 100) { // -20 Ă  cause de la barre verticale de la fenĂȘtre
-            this.speed = new Coordinates2D(speed.getX(), -speed.getY());
+            this.speed = new CartesianVector(speed.getX(), -speed.getY());
         }
         this.position.add(this.speed); // Modifying the position (x = x + vx ; y = y + vy)
     }
@@ -88,11 +88,11 @@ public class Movable implements Entity {
 
     @Override
     public void halt() {
-        this.speed = new Coordinates2D(0, 0); // Making the speed null
+        this.speed = new CartesianVector(0, 0); // Making the speed null
         updatePosition(); // Updating the position with a null acceleration
     }
 
-    public void setDirection(Movable movable, Coordinates2D direction) throws InterruptedException {
+    public void setDirection(Movable movable, CartesianVector direction) throws InterruptedException {
         while (true) {
             this.speed = direction;
             this.position.add(this.speed);
diff --git a/src/main/java/engine/physic/NotMovable.java b/src/main/java/engine/physic/NotMovable.java
index 8b7e9aa..35d79da 100644
--- a/src/main/java/engine/physic/NotMovable.java
+++ b/src/main/java/engine/physic/NotMovable.java
@@ -1,8 +1,5 @@
 package engine.physic;
 
-import engine.physic.Coordinates2D;
-import engine.physic.Entity;
-
 /**
  * Class for all obstacles in the game.
  * Obstacles are static entities.
@@ -10,8 +7,8 @@ import engine.physic.Entity;
 public class NotMovable implements Entity {
 
     private int weight;
-    private final Coordinates2D speed = new Coordinates2D(0, 0); // Our obstacle is static
-    private Coordinates2D position;
+    private final CartesianVector speed = new CartesianVector(0, 0); // Our obstacle is static
+    private CartesianVector position;
 
     @Override
     public int getWeight() {
@@ -19,32 +16,32 @@ public class NotMovable implements Entity {
     }
 
     @Override
-    public Coordinates2D getSpeed() {
+    public CartesianVector getSpeed() {
         return null;
     }
 
     @Override
-    public Coordinates2D getPosition() {
+    public CartesianVector getPosition() {
         return null;
     }
 
     @Override
-    public Coordinates2D getAcceleration() {
+    public CartesianVector getAcceleration() {
         return null;
     }
 
     @Override
-    public void setSpeed(Coordinates2D speed) {
+    public void setSpeed(CartesianVector speed) {
 
     }
 
     @Override
-    public void setPosition(Coordinates2D position) {
+    public void setPosition(CartesianVector position) {
 
     }
 
     @Override
-    public void setAcceleration(Coordinates2D acceleration) {
+    public void setAcceleration(CartesianVector acceleration) {
 
     }
 
diff --git a/src/main/java/engine/physic/PhysicEngine.java b/src/main/java/engine/physic/PhysicEngine.java
index fca35f1..329d8cf 100644
--- a/src/main/java/engine/physic/PhysicEngine.java
+++ b/src/main/java/engine/physic/PhysicEngine.java
@@ -6,7 +6,6 @@ import engine.sound.SoundEngine;
 import pong.PongObject;
 
 import java.util.HashMap;
-import java.util.Random;
 
 public class PhysicEngine implements Engine {
 
@@ -15,7 +14,7 @@ public class PhysicEngine implements Engine {
 
     public boolean isCollision = false;
     SoundEngine soundEngine;
-    //private HashMap<Coordinates2D, PongObject> positions; // Map of the positions and the associated pong object
+    //private HashMap<CartesianVector, PongObject> positions; // Map of the positions and the associated pong object
     public PhysicEngine(SoundEngine soundEngine) {
         this.soundEngine = soundEngine;
         restart();
@@ -23,7 +22,7 @@ public class PhysicEngine implements Engine {
     @Override
     public void update(){ //TODO: we cannot have the mention of "Ball" here so we need to find a way to do it without mentioning "Ball"
         for (PongObject pongObject: Kernel.gameObjects) {
-            Coordinates2D previousPosition = pongObjectEntityHashMap.get(pongObject).getPosition();
+            CartesianVector previousPosition = pongObjectEntityHashMap.get(pongObject).getPosition();
             pongObjectEntityHashMap.get(pongObject).updatePosition();// Updating of the associated movable position
             if(pongObject.getName().equals("Ball")){
                 for (PongObject po2: pongObjectEntityHashMap.keySet()
@@ -61,13 +60,13 @@ public class PhysicEngine implements Engine {
     public void restart() {
         pongObjectEntityHashMap = new HashMap<>();
         for (PongObject pongObject: Kernel.gameObjects) {
-            pongObjectEntityHashMap.put(pongObject, new Movable(1, pongObject.getPosition(), pongObject.getInitSpeed(), new Coordinates2D(0, 0), pongObject.getWidth(), pongObject.getHeight()));
+            pongObjectEntityHashMap.put(pongObject, new Movable(1, pongObject.getPosition(), pongObject.getInitSpeed(), new CartesianVector(0, 0), pongObject.getWidth(), pongObject.getHeight()));
         }
     }
 
     public boolean checkCollision(Entity firstObject, Entity secondObject){
-        Coordinates2D pos1 = firstObject.getPosition();
-        Coordinates2D pos2 = secondObject.getPosition();
+        CartesianVector pos1 = firstObject.getPosition();
+        CartesianVector pos2 = secondObject.getPosition();
         return pos1.getX() < pos2.getX() + secondObject.getWidth() &&
                 pos1.getX() + firstObject.getWidth() > pos2.getX() &&
                 pos1.getY() < pos2.getY() + secondObject.getHeight() &&
diff --git a/src/main/java/pong/PongApp.java b/src/main/java/pong/PongApp.java
index 8a42458..7384b9a 100644
--- a/src/main/java/pong/PongApp.java
+++ b/src/main/java/pong/PongApp.java
@@ -1,13 +1,11 @@
 package pong;
 
-import engine.physic.Coordinates2D;
+import engine.physic.CartesianVector;
 import engine.Kernel;
 import engine.sound.SoundEngine;
 
 
 import javax.swing.*;
-import java.awt.event.MouseAdapter;
-import java.awt.event.MouseEvent;
 import java.io.IOException;
 import java.util.ArrayList;
 
@@ -38,13 +36,13 @@ public class PongApp {
         int racketHeight = 120;
         int ballWidth = 32;
 
-        PongRacket leftRacket = new PongRacket("Left racket", "src/main/resources/pong/raquette.png", new Coordinates2D(widthDiff + 5, height/2 - racketHeight/2), new Coordinates2D(0, 0), racketWidth, racketHeight, true);
+        PongRacket leftRacket = new PongRacket("Left racket", "src/main/resources/pong/raquette.png", new CartesianVector(widthDiff + 5, height/2 - racketHeight/2), new CartesianVector(0, 0), racketWidth, racketHeight, true);
         components.add(leftRacket);
 
-        PongRacket rightRacket = new PongRacket("Right racket", "src/main/resources/pong/raquette.png", new Coordinates2D(rectWidth + widthDiff - 5 - racketWidth, height/2 - racketHeight/2), new Coordinates2D(0, 0), racketWidth, racketHeight, false);
+        PongRacket rightRacket = new PongRacket("Right racket", "src/main/resources/pong/raquette.png", new CartesianVector(rectWidth + widthDiff - 5 - racketWidth, height/2 - racketHeight/2), new CartesianVector(0, 0), racketWidth, racketHeight, false);
         components.add(rightRacket);
 
-        PongBall pongBall = new PongBall("Ball", "src/main/resources/pong/ball.png", new Coordinates2D(width/2, height/2), new Coordinates2D(2, 2), ballWidth, ballWidth);
+        PongBall pongBall = new PongBall("Ball", "src/main/resources/pong/ball.png", new CartesianVector(width/2, height/2), new CartesianVector(2, 2), ballWidth, ballWidth);
         components.add(pongBall);
 
         Kernel kernel = new Kernel("Pong", width, height, components);
@@ -111,7 +109,7 @@ public class PongApp {
      */
     public static void restart(){
         isGoal = false;
-        components.get(2).setPosition(new Coordinates2D(width/2, height/2));
+        components.get(2).setPosition(new CartesianVector(width/2, height/2));
     }
 
 
diff --git a/src/main/java/pong/PongBall.java b/src/main/java/pong/PongBall.java
index f1a087a..60d186e 100644
--- a/src/main/java/pong/PongBall.java
+++ b/src/main/java/pong/PongBall.java
@@ -1,6 +1,6 @@
 package pong;
 
-import engine.physic.Coordinates2D;
+import engine.physic.CartesianVector;
 
 import java.awt.*;
 
@@ -9,15 +9,15 @@ public class PongBall implements PongObject {
     public String name;
     private final int width;
     private final int height;
-    private Coordinates2D position;
+    private CartesianVector position;
 
-    private Coordinates2D speed;
+    private CartesianVector speed;
 
-    private final Coordinates2D initSpeed;
-    private Coordinates2D initPosition;
+    private final CartesianVector initSpeed;
+    private CartesianVector initPosition;
     private final Image image;
 
-    PongBall(String name, String imagePath, Coordinates2D position, Coordinates2D speed, int width, int height){
+    PongBall(String name, String imagePath, CartesianVector position, CartesianVector speed, int width, int height){
         this.name = name;
         this.width = width;
         this.height = height;
@@ -29,12 +29,12 @@ public class PongBall implements PongObject {
     }
 
     @Override
-    public Coordinates2D getPosition() {
+    public CartesianVector getPosition() {
         return this.position;
     }
 
     @Override
-    public Coordinates2D getSpeed() {
+    public CartesianVector getSpeed() {
         return this.speed;
     }
 
@@ -60,12 +60,12 @@ public class PongBall implements PongObject {
     }
 
     @Override
-    public void setPosition(Coordinates2D position) {
+    public void setPosition(CartesianVector position) {
         this.position = position;
     }
 
     @Override
-    public void setSpeed(Coordinates2D speed) {
+    public void setSpeed(CartesianVector speed) {
         this.speed = speed;
     }
 
@@ -77,7 +77,7 @@ public class PongBall implements PongObject {
     }
 
     @Override
-    public Coordinates2D getInitPosition() {
+    public CartesianVector getInitPosition() {
         return this.initPosition;
     }
 
@@ -94,7 +94,7 @@ public class PongBall implements PongObject {
     }
 
     @Override
-    public Coordinates2D getInitSpeed(){
+    public CartesianVector getInitSpeed(){
         return this.initSpeed;
     }
 }
diff --git a/src/main/java/pong/PongObject.java b/src/main/java/pong/PongObject.java
index 63cfdab..3011cf7 100644
--- a/src/main/java/pong/PongObject.java
+++ b/src/main/java/pong/PongObject.java
@@ -1,25 +1,25 @@
 package pong;
 
-import engine.physic.Coordinates2D;
+import engine.physic.CartesianVector;
 
 import java.awt.*;
 
 public interface PongObject {
-    public Coordinates2D getPosition();
+    public CartesianVector getPosition();
 
-    public Coordinates2D getSpeed();
+    public CartesianVector getSpeed();
     public Image getImage();
     public int getWidth();
     public int getHeight();
     public int getResistance();
-    public void setPosition(Coordinates2D position);
+    public void setPosition(CartesianVector position);
 
-    public void setSpeed(Coordinates2D speed);
+    public void setSpeed(CartesianVector speed);
 
-    public Coordinates2D getInitSpeed();
+    public CartesianVector getInitSpeed();
     public String getName();
 
-    Coordinates2D getInitPosition();
+    CartesianVector getInitPosition();
 
 
     boolean isLeftRacket();
diff --git a/src/main/java/pong/PongRacket.java b/src/main/java/pong/PongRacket.java
index 9d49986..b519044 100644
--- a/src/main/java/pong/PongRacket.java
+++ b/src/main/java/pong/PongRacket.java
@@ -1,6 +1,6 @@
 package pong;
 
-import engine.physic.Coordinates2D;
+import engine.physic.CartesianVector;
 
 import java.awt.*;
 
@@ -9,16 +9,16 @@ public class PongRacket implements PongObject {
     public String name;
     private final int width;
     private final int height;
-    private Coordinates2D position;
-    private final Coordinates2D initPosition;
+    private CartesianVector position;
+    private final CartesianVector initPosition;
     private final Image image;
-    private Coordinates2D speed;
+    private CartesianVector speed;
 
-    private final Coordinates2D initSpeed;
+    private final CartesianVector initSpeed;
 
     private boolean isLeftRacket;
 
-    public PongRacket(String name, String imagePath, Coordinates2D position, Coordinates2D speed, int width, int height, boolean isLeftRacket) {
+    public PongRacket(String name, String imagePath, CartesianVector position, CartesianVector speed, int width, int height, boolean isLeftRacket) {
         this.name = name;
         this.width = width;
         this.height = height;
@@ -31,12 +31,12 @@ public class PongRacket implements PongObject {
     }
 
     @Override
-    public Coordinates2D getPosition() {
+    public CartesianVector getPosition() {
         return position;
     }
 
     @Override
-    public Coordinates2D getSpeed() {
+    public CartesianVector getSpeed() {
         return this.speed;
     }
 
@@ -61,12 +61,12 @@ public class PongRacket implements PongObject {
     }
 
     @Override
-    public void setPosition(Coordinates2D position) {
+    public void setPosition(CartesianVector position) {
         this.position = position;
     }
 
     @Override
-    public void setSpeed(Coordinates2D speed) {
+    public void setSpeed(CartesianVector speed) {
         this.speed = speed;
     }
 
@@ -77,7 +77,7 @@ public class PongRacket implements PongObject {
     }
 
     @Override
-    public Coordinates2D getInitPosition() {
+    public CartesianVector getInitPosition() {
         return initPosition;
     }
 
@@ -127,7 +127,7 @@ public class PongRacket implements PongObject {
     }
 
     @Override
-    public Coordinates2D getInitSpeed() {
+    public CartesianVector getInitSpeed() {
         return initSpeed;
     }
 }
diff --git a/src/main/java/sprint2_demo/Grid.java b/src/main/java/sprint2_demo/Grid.java
index 1229641..6cee6d1 100644
--- a/src/main/java/sprint2_demo/Grid.java
+++ b/src/main/java/sprint2_demo/Grid.java
@@ -1,7 +1,7 @@
 package sprint2_demo;
 
 import engine.*;
-import engine.physic.Coordinates2D;
+import engine.physic.CartesianVector;
 
 import javax.swing.*;
 import java.awt.*;
@@ -12,8 +12,8 @@ public class Grid extends JFrame {
 
     // Arraylist<Elements> elements = new ArrayList<>();
     ArrayList<JButton> buttons = new ArrayList<>();
-    public Hero hero = new Hero("asteroid", 1, "src/main/resources/sprint2_demo/asteroid.png", new Coordinates2D(100, 100),
-            new Coordinates2D(-1, -1), new Coordinates2D(0, 0));
+    public Hero hero = new Hero("asteroid", 1, "src/main/resources/sprint2_demo/asteroid.png", new CartesianVector(100, 100),
+            new CartesianVector(-1, -1), new CartesianVector(0, 0));
 
     // JPanel mainPanel = new JPanel();
     Kernel kernel;
@@ -59,7 +59,7 @@ public class Grid extends JFrame {
      * @param image
      * @throws IOException
      */
-    public void draw(Coordinates2D position, Image image, int width, int height) throws IOException {
+    public void draw(CartesianVector position, Image image, int width, int height) throws IOException {
         //getContentPane().add(new CircleComponent(100));
         //getContentPane().add(new ImageComponent(image, position, width, height));
     }
diff --git a/src/main/java/sprint2_demo/Hero.java b/src/main/java/sprint2_demo/Hero.java
index 24cf15e..ded1fff 100644
--- a/src/main/java/sprint2_demo/Hero.java
+++ b/src/main/java/sprint2_demo/Hero.java
@@ -1,6 +1,6 @@
 package sprint2_demo;
 
-import engine.physic.Coordinates2D;
+import engine.physic.CartesianVector;
 
 import javax.imageio.ImageIO;
 import java.awt.*;
@@ -12,13 +12,13 @@ public class Hero {
 
     public String name;
     public int life;
-    public Coordinates2D position;
-    private Coordinates2D speed;
-    private Coordinates2D acceleration;
+    public CartesianVector position;
+    private CartesianVector speed;
+    private CartesianVector acceleration;
 
     private Image image;
 
-    public Hero(String name, int life, String imagePath, Coordinates2D position, Coordinates2D speed, Coordinates2D acceleration) throws IOException {
+    public Hero(String name, int life, String imagePath, CartesianVector position, CartesianVector speed, CartesianVector acceleration) throws IOException {
         this.name = name;
         this.life = life;
         this.position = position;
@@ -35,11 +35,11 @@ public class Hero {
         return image;
     }
 
-    public void setPosition(Coordinates2D position) {
+    public void setPosition(CartesianVector position) {
         this.position = position;
     }
 
-    public Coordinates2D getPosition() {
+    public CartesianVector getPosition() {
         return position;
     }
 
@@ -47,11 +47,11 @@ public class Hero {
         return 0;
     }
 
-    public Coordinates2D getSpeed() {
+    public CartesianVector getSpeed() {
         return speed;
     }
 
-    public Coordinates2D getAcceleration() {
+    public CartesianVector getAcceleration() {
         return acceleration;
     }
 
diff --git a/src/test/java/engine/physic/CartesianVectorTest.java b/src/test/java/engine/physic/CartesianVectorTest.java
new file mode 100644
index 0000000..7897a55
--- /dev/null
+++ b/src/test/java/engine/physic/CartesianVectorTest.java
@@ -0,0 +1,49 @@
+package engine.physic;
+
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+class CartesianVectorTest {
+    @Test
+    public void testAdd() {
+        CartesianVector cartesianVector = new CartesianVector(1, 1);
+        CartesianVector otherCartesianVector = new CartesianVector(2, 2);
+        cartesianVector.add(otherCartesianVector);
+        CartesianVector expectedCartesianVector = new CartesianVector(3, 3);
+        assertTrue(expectedCartesianVector.equals(cartesianVector));
+    }
+
+    @Test
+    public void testAddNegativeVector() {
+        CartesianVector cartesianVector = new CartesianVector(1, 1);
+        CartesianVector otherCartesianVector = new CartesianVector(-2, -2);
+        cartesianVector.add(otherCartesianVector);
+        CartesianVector expectedCartesianVector = new CartesianVector(-1, -1);
+        assertTrue(expectedCartesianVector.equals(cartesianVector));
+    }
+
+    @Test
+    public void testMultiply() {
+        CartesianVector cartesianVector = new CartesianVector(1, 1);
+        cartesianVector.mul(2);
+        CartesianVector expectedCartesianVector = new CartesianVector(2, 2);
+        assertTrue(expectedCartesianVector.equals(cartesianVector));
+    }
+
+    @Test
+    public void testMultiplyNegative() {
+        CartesianVector cartesianVector = new CartesianVector(1, 1);
+        cartesianVector.mul(-2);
+        CartesianVector expectedCartesianVector = new CartesianVector(-2, -2);
+        assertTrue(expectedCartesianVector.equals(cartesianVector));
+    }
+
+    @Test
+    public void testEquals() {
+        CartesianVector cartesianVector = new CartesianVector(1, 1);
+        CartesianVector otherCartesianVector = new CartesianVector(1, 1);
+        assertTrue(cartesianVector.equals(otherCartesianVector));
+    }
+
+}
\ No newline at end of file
diff --git a/src/test/java/engine/physic/MovableTest.java b/src/test/java/engine/physic/MovableTest.java
new file mode 100644
index 0000000..f889249
--- /dev/null
+++ b/src/test/java/engine/physic/MovableTest.java
@@ -0,0 +1,63 @@
+package engine.physic;
+
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+
+/**
+ * Test class for the Movable class. Here we test the updatePosition method according to the following rules:
+ * - The position should be x > 100 and y > 100
+ * - If the speed is positive, the position should be updated with the speed
+ * - If the speed is negative, the position should be updated with the speed
+ * - If the speed is null, the position should not be updated
+ * @see Movable
+ */
+class MovableTest {
+    @Test
+    public void testUpdatePosition() {
+        // Create an instance of Movable for the tests
+        CartesianVector initialPosition = new CartesianVector(200, 200);
+        CartesianVector initialSpeed = new CartesianVector(2, 2);
+        CartesianVector acceleration = new CartesianVector(1, 1);
+        Movable movable = new Movable(1, initialPosition, initialSpeed, acceleration, 10, 10);
+
+        // Update the position
+        movable.updatePosition();
+
+        // test if the position has been updated correctly
+        CartesianVector expectedPosition = new CartesianVector(202, 202);
+        assertTrue(expectedPosition.equals(movable.getPosition()));
+    }
+
+    @Test
+    public void testUpdatePositionWithNegativeSpeed() {
+        // Create an instance of Movable for the tests
+        CartesianVector initialPosition = new CartesianVector(200, 200);
+        CartesianVector initialSpeed = new CartesianVector(-2, -2);
+
+        Movable movable = new Movable(1, initialPosition, initialSpeed, null, 10, 10);
+
+        // Update the position
+        movable.updatePosition();
+
+        // Test if the position has been updated correctly
+        CartesianVector expectedPosition = new CartesianVector(198, 198);
+        assertTrue(expectedPosition.equals(movable.getPosition()));
+    }
+
+    @Test
+    public void testUpdateWithNullSpeed() {
+        // Create an instance of Movable for the tests
+        CartesianVector initialPosition = new CartesianVector(200, 200);
+        CartesianVector initialSpeed = new CartesianVector(0, 0);
+        Movable movable = new Movable(1, initialPosition, initialSpeed, null, 10, 10);
+
+        // Update the position
+        movable.updatePosition();
+
+        // Test if the position has been updated correctly
+        CartesianVector expectedPosition = new CartesianVector(200, 200);
+        assertTrue(expectedPosition.equals(movable.getPosition()));
+    }
+}
\ No newline at end of file
diff --git a/src/test/java/pong/PongBallTest.java b/src/test/java/pong/PongBallTest.java
deleted file mode 100644
index bd204bc..0000000
--- a/src/test/java/pong/PongBallTest.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package pong;
-
-import engine.physic.Coordinates2D;
-import org.junit.jupiter.api.Test;
-
-import static org.junit.jupiter.api.Assertions.*;
-
-class PongBallTest {
-    /**
-     * Test if the speed of the ball is updated correctly when the ball hits the upper half of the paddle
-     * If we hit the upper half of the paddle, the ball should go up (-x, -y) and
-     * if we hit the lower half of the paddle, the ball should go down (-x, y)
-     */
-    @Test
-    void testUpdateSpeedUpperHalfHit() {
-
-    }
-}
\ No newline at end of file
-- 
GitLab