diff --git a/core-java/src/test/java/org/baeldung/java/collections/ArrayListTest.java b/core-java/src/test/java/org/baeldung/java/collections/ArrayListTest.java new file mode 100644 index 0000000000..4996a1f0a2 --- /dev/null +++ b/core-java/src/test/java/org/baeldung/java/collections/ArrayListTest.java @@ -0,0 +1,148 @@ +package org.baeldung.java.collections; + +import org.junit.Before; +import org.junit.Test; + +import java.util.*; +import java.util.stream.*; + +import static org.hamcrest.CoreMatchers.equalTo; +import static org.hamcrest.core.IsNot.not; +import static org.junit.Assert.*; + +public class ArrayListTest { + + List stringsToSearch; + + @Before + public void setUp() { + List xs = LongStream.range(0, 16) + .boxed() + .map(Long::toHexString) + .collect(Collectors.toList()); + stringsToSearch = new ArrayList<>(xs); + stringsToSearch.addAll(xs); + } + + @Test + public void givenNewArrayList_whenCheckCapacity_thenDefaultValue() { + List xs = new ArrayList<>(); + assertTrue(xs.isEmpty()); + } + + @Test + public void givenCollection_whenProvideItToArrayListCtor_thenArrayListIsPopulatedWithItsElements() { + Collection numbers = + IntStream.range(0, 10).boxed().collect(Collectors.toSet()); + + List xs = new ArrayList<>(numbers); + assertEquals(10, xs.size()); + assertTrue(numbers.containsAll(xs)); + } + + @Test + public void givenElement_whenAddToArrayList_thenIsAdded() { + List xs = new ArrayList<>(); + + xs.add(1L); + xs.add(2L); + xs.add(1, 3L); + + assertThat(Arrays.asList(1L, 3L, 2L), equalTo(xs)); + } + + @Test + public void givenCollection_whenAddToArrayList_thenIsAdded() { + List xs = new ArrayList<>(Arrays.asList(1L, 2L, 3L)); + Collection ys = LongStream.range(4, 10).boxed().collect(Collectors.toList()); + xs.addAll(0, ys); + + assertThat(Arrays.asList(4L, 5L, 6L, 7L, 8L, 9L, 1L, 2L, 3L), equalTo(xs)); + } + + @Test + public void givenExistingElement_whenCallIndexOf_thenReturnCorrectIndex() { + assertEquals(10, stringsToSearch.indexOf("a")); + assertEquals(26, stringsToSearch.lastIndexOf("a")); + } + + @Test + public void givenCondition_whenIterateArrayList_thenFindAllElementsSatisfyingCondition() { + Iterator it = stringsToSearch.iterator(); + Set matchingStrings = new HashSet<>(Arrays.asList("a", "c", "9")); + + List result = new ArrayList<>(); + while (it.hasNext()) { + String s = it.next(); + if (matchingStrings.contains(s)) { + result.add(s); + } + } + + assertEquals(6, result.size()); + } + + @Test + public void givenPredicate_whenIterateArrayList_thenFindAllElementsSatisfyingPredicate() { + Set matchingStrings = new HashSet<>(Arrays.asList("a", "c", "9")); + + List result = stringsToSearch + .stream() + .filter(matchingStrings::contains) + .collect(Collectors.toList()); + + assertEquals(6, result.size()); + } + + @Test + public void givenSortedArray_whenUseBinarySearch_thenFindElement() { + List copy = new ArrayList<>(stringsToSearch); + Collections.sort(copy); + int index = Collections.binarySearch(copy, "f"); + assertThat(index, not(equalTo(-1))); + } + + @Test + public void givenIndex_whenRemove_thenCorrectElementRemoved() { + List xs = new ArrayList<>( + IntStream.range(0, 10).boxed().collect(Collectors.toList()) + ); + Collections.reverse(xs); + + xs.remove(0); + assertThat(xs.get(0), equalTo(8)); + + xs.remove(Integer.valueOf(0)); + assertFalse(xs.contains(0)); + } + + @Test + public void givenListIterator_whenReverseTraversal_thenRetrieveElementsInOppositeOrder() { + List xs = new ArrayList<>( + IntStream.range(0, 10).boxed().collect(Collectors.toList()) + ); + ListIterator it = xs.listIterator(xs.size()); + List result = new ArrayList<>(xs.size()); + while (it.hasPrevious()) { + result.add(it.previous()); + } + + Collections.reverse(xs); + assertThat(result, equalTo(xs)); + } + + @Test + public void givenCondition_whenIterateArrayList_thenRemoveAllElementsSatisfyingCondition() { + Set matchingStrings + = new HashSet<>(Arrays.asList("a", "b", "c", "d", "e", "f")); + + Iterator it = stringsToSearch.iterator(); + while (it.hasNext()) { + if (matchingStrings.contains(it.next())) { + it.remove(); + } + } + + assertEquals(20, stringsToSearch.size()); + } +}