diff --git a/TP2/src/main/java/arraydoubleendedqueue/ArrayDoubleEndedQueue.java b/TP2/src/main/java/arraydoubleendedqueue/ArrayDoubleEndedQueue.java
index 697253d5b5125df0f7417b87a2ee0c6f73ffe15d..b53c63480435b4c64bdfa15f98aa08f4582af8db 100644
--- a/TP2/src/main/java/arraydoubleendedqueue/ArrayDoubleEndedQueue.java
+++ b/TP2/src/main/java/arraydoubleendedqueue/ArrayDoubleEndedQueue.java
@@ -2,66 +2,108 @@ package arraydoubleendedqueue;
 
 import deque.DoubleEndedQueue;
 
+import java.util.NoSuchElementException;
+
 public class ArrayDoubleEndedQueue<E> implements DoubleEndedQueue {
     private Object[] elements;
     private int size;
     private int capacity;
 
+    private int indexFirst;
+
     public ArrayDoubleEndedQueue(int capacity) {
         this.capacity = capacity;
         elements = new Object[capacity];
         this.size = 0;
+        this.indexFirst = 0;
     }
 
     @Override
     public void addFirst(Object o) {
-        if(size < capacity) {
-            elements[size] = o;
-            size++;
+        if(size == capacity) {
+            throw new IllegalStateException("La queue est pleine");
         }
         else {
-            throw new IllegalStateException("Queue is full");
+            elements[size] = o;
+            size++;
+
         }
     }
 
     @Override
     public void addLast(Object o) {
-        if(size < capacity) {
-            elements[size] = o;
-            size++;
+        if(size == capacity) {
+            throw new IllegalStateException("La queue est pleine");
+
         }
         else {
-            throw new IllegalStateException("Queue is full");
+            elements[size] = o;
+            size++;
         }
     }
 
     @Override
     public Object removeFirst() {
-
+        if (size == 0) {
+            throw new NoSuchElementException("La queue est vide");
+        }
+        Object removedElement = (Object) elements[indexFirst];
+        elements[indexFirst] = null;
+        indexFirst = (indexFirst + 1) % capacity;
+        size--;
+        return removedElement;
     }
 
     @Override
     public Object removeLast() {
-        return null;
+        if (size == 0) {
+            throw new NoSuchElementException("La queue est vide");
+        }
+        int lastIndex = (indexFirst + size - 1) % capacity;
+        Object removedElement = (Object) elements[lastIndex];
+        elements[lastIndex] = null;
+        size--;
+        return removedElement;
     }
 
     @Override
     public Object getFirst() {
-        return null;
+        if (size == 0) {
+            throw new NoSuchElementException("La queue est vide");
+        }
+        return (Object) elements[indexFirst];
     }
 
     @Override
     public Object getLast() {
-        return null;
+        if (size == 0) {
+            throw new NoSuchElementException("La queue est vide");
+        }
+        return (Object) elements[((indexFirst + size - 1) % capacity)];
     }
 
     @Override
     public int size() {
-        return 0;
+        return size;
     }
 
     @Override
     public boolean contains(Object o) {
+        if (o == null) {
+            for (int i = 0; i < size; i++) {
+                if (elements[(indexFirst + i) % capacity] == null) {
+                    return true;
+                }
+            }
+        } else {
+            for (int i = 0; i < size; i++) {
+                if (o.equals(elements[(indexFirst + i) % capacity])) {
+                    return true;
+                }
+            }
+        }
         return false;
     }
+
+
 }
diff --git a/TP2/src/test/java/arraydoubleendedqueue/ArrayDoubleEndedQueueTest.java b/TP2/src/test/java/arraydoubleendedqueue/ArrayDoubleEndedQueueTest.java
index a812d1645b1f801d0b6a7bab9cec00894df598cd..16a59d944b778a6aef4fc34ed7f223b7034b9aa7 100644
--- a/TP2/src/test/java/arraydoubleendedqueue/ArrayDoubleEndedQueueTest.java
+++ b/TP2/src/test/java/arraydoubleendedqueue/ArrayDoubleEndedQueueTest.java
@@ -6,9 +6,14 @@ import org.junit.jupiter.api.Test;
 import java.util.Deque;
 
 import static org.assertj.core.api.Assertions.assertThat;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 public class ArrayDoubleEndedQueueTest {
-    static Deque<Integer> ArrayDoubleEndedQueue;
+    static ArrayDoubleEndedQueue<Integer> arrayDoubleEndedQueue;
+    static ArrayDoubleEndedQueue<Integer> queueVide;
+
+
     @BeforeAll
     static void setUpBeforeClass() throws Exception {
         System.out.println("Before all");
@@ -21,6 +26,9 @@ public class ArrayDoubleEndedQueueTest {
 
     @BeforeEach
     void setUp() throws Exception {
+        arrayDoubleEndedQueue = new ArrayDoubleEndedQueue<>(10);
+        queueVide = new ArrayDoubleEndedQueue<>(10);
+
     }
 
     @AfterEach
@@ -30,46 +38,92 @@ public class ArrayDoubleEndedQueueTest {
 
     @Test
     void testAddFirst() {
-        ArrayDoubleEndedQueue.addFirst(1);
-        ArrayDoubleEndedQueue.addFirst(2);
-        ArrayDoubleEndedQueue.addFirst(3);
-        ArrayDoubleEndedQueue.addFirst(4);
-        assertThat(ArrayDoubleEndedQueue.getFirst()).isEqualTo(1);
+        arrayDoubleEndedQueue.addFirst(1);
+        arrayDoubleEndedQueue.addFirst(2);
+        arrayDoubleEndedQueue.addFirst(3);
+        arrayDoubleEndedQueue.addFirst(4);
+        arrayDoubleEndedQueue.addFirst(5);
+        arrayDoubleEndedQueue.addFirst(6);
+        arrayDoubleEndedQueue.addFirst(7);
+        assertThat(arrayDoubleEndedQueue.getFirst()).isEqualTo(1);
     }
 
     @Test
     void testAddLast() {
-        ArrayDoubleEndedQueue.addLast(1);
-        ArrayDoubleEndedQueue.addLast(2);
-        ArrayDoubleEndedQueue.addLast(3);
-        ArrayDoubleEndedQueue.addLast(4);
-        assertThat(ArrayDoubleEndedQueue.getLast()).isEqualTo(4);
+        arrayDoubleEndedQueue.addLast(1);
+        arrayDoubleEndedQueue.addLast(2);
+        arrayDoubleEndedQueue.addLast(3);
+        arrayDoubleEndedQueue.addLast(4);
+        assertThat(arrayDoubleEndedQueue.getLast()).isEqualTo(4);
     }
 
     @Test
     void testRemoveFirst() {
+        arrayDoubleEndedQueue.addLast('X');
+        arrayDoubleEndedQueue.addLast('Y');
+
+        assertEquals('X', arrayDoubleEndedQueue.removeFirst());
 
 
     }
 
     @Test
     void testRemoveLast() {
+        arrayDoubleEndedQueue.addLast(1);
+        arrayDoubleEndedQueue.addLast(2);
+        arrayDoubleEndedQueue.addLast(3);
+        arrayDoubleEndedQueue.addFirst(4);
+
+        assertEquals(4, arrayDoubleEndedQueue.removeLast());
     }
 
     @Test
     void testGetFirst() {
+        arrayDoubleEndedQueue.addLast(10);
+
+        assertEquals(10, arrayDoubleEndedQueue.getFirst());
     }
 
     @Test
     void testGetLast() {
+        arrayDoubleEndedQueue.addLast(10);
+
+        assertEquals(10, arrayDoubleEndedQueue.getLast());
     }
 
     @Test
     void testSize() {
+        arrayDoubleEndedQueue.addLast(10);
+        arrayDoubleEndedQueue.addLast(11);
+        arrayDoubleEndedQueue.addLast(12);
+        arrayDoubleEndedQueue.addLast(13);
+        arrayDoubleEndedQueue.addLast(14);
+        arrayDoubleEndedQueue.addLast(15);
+        arrayDoubleEndedQueue.addLast(16);
+        arrayDoubleEndedQueue.addLast(19);
+
+
+        assertEquals(8, arrayDoubleEndedQueue.size());
     }
 
     @Test
     void testContains() {
+        arrayDoubleEndedQueue.addLast(10);
+        arrayDoubleEndedQueue.addLast(11);
+        arrayDoubleEndedQueue.addLast(12);
+        arrayDoubleEndedQueue.addLast(13);
+        arrayDoubleEndedQueue.addLast(14);
+        arrayDoubleEndedQueue.addLast(15);
+        arrayDoubleEndedQueue.addLast(16);
+        arrayDoubleEndedQueue.addLast(19);
+
+        assertTrue(arrayDoubleEndedQueue.contains(10));
+        assertEquals(false, arrayDoubleEndedQueue.contains(20));
+        assertEquals(false, arrayDoubleEndedQueue.contains(null));
+        queueVide.addLast(null);
+        System.out.println(queueVide.getFirst());
+        assertEquals(true, queueVide.contains(null));
     }
 
+
 }
\ No newline at end of file