@@ -121,4 +121,77 @@ void testNullValues() {
121
121
assertNull (deque .pollFirst ());
122
122
org .junit .jupiter .api .Assertions .assertTrue (deque .isEmpty ());
123
123
}
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
+ }
124
197
}
0 commit comments