@@ -172,4 +172,69 @@ public function testDequeBehaviorAfterMixedOperations(): void
172172 $ this ->assertSame (1 , $ deque ->dequeue ());
173173 $ this ->assertSame (3 , $ deque ->peekLast ());
174174 }
175+
176+ // Test capacity expansion during addFirst operations
177+ public function testEnsureCapacityExpandsDuringAddFirstOperations (): void
178+ {
179+ $ deque = new ArrayDeque (2 );
180+ $ deque ->addFirst (1 );
181+ $ deque ->addFirst (2 );
182+ $ deque ->addFirst (3 ); // Should trigger capacity increase
183+ $ this ->assertSame (3 , $ deque ->size ());
184+ $ this ->assertSame (3 , $ deque ->peek ());
185+ $ this ->assertSame (1 , $ deque ->peekLast ());
186+ }
187+
188+ // Test capacity expansion during removeLast operations
189+ public function testEnsureCapacityExpandsDuringRemoveLastOperations (): void
190+ {
191+ $ deque = new ArrayDeque (2 );
192+ $ deque ->enqueue (1 );
193+ $ deque ->enqueue (2 );
194+ $ deque ->enqueue (3 ); // Should trigger capacity increase
195+ $ deque ->removeLast ();
196+ $ deque ->removeLast ();
197+ $ this ->assertSame (1 , $ deque ->size ());
198+ $ this ->assertSame (1 , $ deque ->peek ());
199+ }
200+
201+ // Test mixed operations of addFirst, addLast, removeFirst, and removeLast
202+ public function testMixedOperations (): void
203+ {
204+ $ deque = new ArrayDeque ();
205+ $ deque ->addFirst (1 );
206+ $ deque ->enqueue (2 );
207+ $ deque ->addFirst (0 );
208+ $ this ->assertSame (0 , $ deque ->dequeue ());
209+ $ this ->assertSame (1 , $ deque ->dequeue ());
210+ $ this ->assertSame (2 , $ deque ->removeLast ());
211+ $ deque ->enqueue (3 );
212+ $ deque ->addFirst (4 );
213+ $ this ->assertSame (4 , $ deque ->peek ());
214+ $ this ->assertSame (3 , $ deque ->peekLast ());
215+ }
216+
217+ // Test clearing the deque
218+ public function testClearEmptiesTheDeque (): void
219+ {
220+ $ deque = new ArrayDeque ();
221+ $ deque ->enqueue (1 );
222+ $ deque ->enqueue (2 );
223+ $ deque ->clear ();
224+ $ this ->assertTrue ($ deque ->isEmpty ());
225+ $ this ->assertNull ($ deque ->peek ());
226+ $ this ->assertNull ($ deque ->peekLast ());
227+ $ this ->assertNull ($ deque ->dequeue ());
228+ $ this ->assertNull ($ deque ->removeLast ());
229+ }
230+
231+ // Test getting all items
232+ public function testGetItemsReturnsAllElementsInCorrectOrder (): void
233+ {
234+ $ deque = new ArrayDeque ();
235+ $ deque ->enqueue (1 );
236+ $ deque ->enqueue (2 );
237+ $ deque ->enqueue (3 );
238+ $ this ->assertSame ([1 , 2 , 3 ], $ deque ->getItems ());
239+ }
175240}
0 commit comments