Skip to content

Commit 040d385

Browse files
authored
testing: improve BagTest (#6435)
* testing: improve BagTest * style: fix checkstyle for BagTest * testing: redundant test
1 parent edb8167 commit 040d385

File tree

1 file changed

+115
-0
lines changed
  • src/test/java/com/thealgorithms/datastructures/bag

1 file changed

+115
-0
lines changed

src/test/java/com/thealgorithms/datastructures/bag/BagTest.java

Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,10 @@
66
import static org.junit.jupiter.api.Assertions.assertTrue;
77

88
import com.thealgorithms.datastructures.bags.Bag;
9+
import java.util.ArrayList;
910
import java.util.Iterator;
11+
import java.util.List;
12+
import java.util.NoSuchElementException;
1013
import org.junit.jupiter.api.Test;
1114

1215
class BagTest {
@@ -156,4 +159,116 @@ void testIteratorWithDuplicates() {
156159
}
157160
assertEquals(3, count, "Iterator should traverse all 3 items including duplicates");
158161
}
162+
163+
@Test
164+
void testCollectionElements() {
165+
Bag<List<String>> bag = new Bag<>();
166+
List<String> list1 = new ArrayList<>();
167+
list1.add("a");
168+
list1.add("b");
169+
170+
List<String> list2 = new ArrayList<>();
171+
list2.add("c");
172+
173+
List<String> emptyList = new ArrayList<>();
174+
175+
bag.add(list1);
176+
bag.add(list2);
177+
bag.add(emptyList);
178+
bag.add(list1); // Duplicate
179+
180+
assertEquals(4, bag.size(), "Bag should contain 4 list elements");
181+
assertTrue(bag.contains(list1), "Bag should contain list1");
182+
assertTrue(bag.contains(list2), "Bag should contain list2");
183+
assertTrue(bag.contains(emptyList), "Bag should contain empty list");
184+
}
185+
186+
@Test
187+
void testIteratorConsistency() {
188+
Bag<String> bag = new Bag<>();
189+
bag.add("first");
190+
bag.add("second");
191+
bag.add("third");
192+
193+
// Multiple iterations should return same elements
194+
List<String> firstIteration = new ArrayList<>();
195+
for (String item : bag) {
196+
firstIteration.add(item);
197+
}
198+
199+
List<String> secondIteration = new ArrayList<>();
200+
for (String item : bag) {
201+
secondIteration.add(item);
202+
}
203+
204+
assertEquals(firstIteration.size(), secondIteration.size(), "Both iterations should have same size");
205+
assertEquals(3, firstIteration.size(), "First iteration should have 3 elements");
206+
assertEquals(3, secondIteration.size(), "Second iteration should have 3 elements");
207+
}
208+
209+
@Test
210+
void testMultipleIterators() {
211+
Bag<String> bag = new Bag<>();
212+
bag.add("item1");
213+
bag.add("item2");
214+
215+
Iterator<String> iter1 = bag.iterator();
216+
Iterator<String> iter2 = bag.iterator();
217+
218+
assertTrue(iter1.hasNext(), "First iterator should have next element");
219+
assertTrue(iter2.hasNext(), "Second iterator should have next element");
220+
221+
String first1 = iter1.next();
222+
String first2 = iter2.next();
223+
224+
org.junit.jupiter.api.Assertions.assertNotNull(first1, "First iterator should return non-null element");
225+
org.junit.jupiter.api.Assertions.assertNotNull(first2, "Second iterator should return non-null element");
226+
}
227+
228+
@Test
229+
void testIteratorHasNextConsistency() {
230+
Bag<String> bag = new Bag<>();
231+
bag.add("single");
232+
233+
Iterator<String> iter = bag.iterator();
234+
assertTrue(iter.hasNext(), "hasNext should return true");
235+
assertTrue(iter.hasNext(), "hasNext should still return true after multiple calls");
236+
237+
String item = iter.next();
238+
assertEquals("single", item, "Next should return the single item");
239+
240+
assertFalse(iter.hasNext(), "hasNext should return false after consuming element");
241+
assertFalse(iter.hasNext(), "hasNext should still return false");
242+
}
243+
244+
@Test
245+
void testIteratorNextOnEmptyBag() {
246+
Bag<String> bag = new Bag<>();
247+
Iterator<String> iter = bag.iterator();
248+
249+
assertFalse(iter.hasNext(), "hasNext should return false for empty bag");
250+
assertThrows(NoSuchElementException.class, iter::next, "next() should throw NoSuchElementException on empty bag");
251+
}
252+
253+
@Test
254+
void testBagOrderIndependence() {
255+
Bag<String> bag1 = new Bag<>();
256+
Bag<String> bag2 = new Bag<>();
257+
258+
// Add same elements in different order
259+
bag1.add("first");
260+
bag1.add("second");
261+
bag1.add("third");
262+
263+
bag2.add("third");
264+
bag2.add("first");
265+
bag2.add("second");
266+
267+
assertEquals(bag1.size(), bag2.size(), "Bags should have same size");
268+
269+
// Both bags should contain all elements
270+
assertTrue(bag1.contains("first") && bag2.contains("first"));
271+
assertTrue(bag1.contains("second") && bag2.contains("second"));
272+
assertTrue(bag1.contains("third") && bag2.contains("third"));
273+
}
159274
}

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy