@@ -121,4 +121,77 @@ void testNullValues() {
121121 assertNull (deque .pollFirst ());
122122 org .junit .jupiter .api .Assertions .assertTrue (deque .isEmpty ());
123123 }
124+
125+ @ Test
126+ void testMultipleAddFirst () {
127+ Deque <Integer > deque = new Deque <>();
128+ deque .addFirst (1 );
129+ deque .addFirst (2 );
130+ deque .addFirst (3 );
131+
132+ assertEquals (3 , deque .peekFirst (), "First element should be the last added to front" );
133+ assertEquals (1 , deque .peekLast (), "Last element should be the first added to front" );
134+ assertEquals (3 , deque .size (), "Size should reflect all additions" );
135+ }
136+
137+ @ Test
138+ void testMultipleAddLast () {
139+ Deque <Integer > deque = new Deque <>();
140+ deque .addLast (1 );
141+ deque .addLast (2 );
142+ deque .addLast (3 );
143+
144+ assertEquals (1 , deque .peekFirst (), "First element should be the first added to back" );
145+ assertEquals (3 , deque .peekLast (), "Last element should be the last added to back" );
146+ assertEquals (3 , deque .size (), "Size should reflect all additions" );
147+ }
148+
149+ @ Test
150+ void testSingleElementOperations () {
151+ Deque <Integer > deque = new Deque <>();
152+ deque .addFirst (1 );
153+
154+ assertEquals (1 , deque .peekFirst (), "Single element should be both first and last" );
155+ assertEquals (1 , deque .peekLast (), "Single element should be both first and last" );
156+ assertEquals (1 , deque .size ());
157+
158+ assertEquals (1 , deque .pollFirst (), "Should be able to poll single element from front" );
159+ org .junit .jupiter .api .Assertions .assertTrue (deque .isEmpty (), "Deque should be empty after polling single element" );
160+ }
161+
162+ @ Test
163+ void testSingleElementPollLast () {
164+ Deque <Integer > deque = new Deque <>();
165+ deque .addLast (1 );
166+
167+ assertEquals (1 , deque .pollLast (), "Should be able to poll single element from back" );
168+ org .junit .jupiter .api .Assertions .assertTrue (deque .isEmpty (), "Deque should be empty after polling single element" );
169+ }
170+
171+ @ Test
172+ void testMixedNullAndValues () {
173+ Deque <String > deque = new Deque <>();
174+ deque .addFirst ("first" );
175+ deque .addLast (null );
176+ deque .addFirst (null );
177+ deque .addLast ("last" );
178+
179+ assertEquals (4 , deque .size (), "Should handle mixed null and non-null values" );
180+ assertNull (deque .pollFirst (), "Should poll null from front" );
181+ assertEquals ("first" , deque .pollFirst (), "Should poll non-null value" );
182+ assertNull (deque .pollLast ().equals ("last" ) ? null : deque .peekLast (), "Should handle null correctly" );
183+ }
184+
185+ @ Test
186+ void testSymmetricOperations () {
187+ Deque <Integer > deque = new Deque <>();
188+
189+ // Test that addFirst/pollFirst and addLast/pollLast are symmetric
190+ deque .addFirst (1 );
191+ deque .addLast (2 );
192+
193+ assertEquals (1 , deque .pollFirst (), "addFirst/pollFirst should be symmetric" );
194+ assertEquals (2 , deque .pollLast (), "addLast/pollLast should be symmetric" );
195+ org .junit .jupiter .api .Assertions .assertTrue (deque .isEmpty (), "Deque should be empty after symmetric operations" );
196+ }
124197}
0 commit comments