View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one or more
3    * contributor license agreements.  See the NOTICE file distributed with
4    * this work for additional information regarding copyright ownership.
5    * The ASF licenses this file to You under the Apache License, Version 2.0
6    * (the "License"); you may not use this file except in compliance with
7    * the License.  You may obtain a copy of the License at
8    *
9    *      http://www.apache.org/licenses/LICENSE-2.0
10   *
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
16   */
17  package org.apache.commons.collections4.iterators;
18  
19  import static org.junit.jupiter.api.Assertions.assertEquals;
20  import static org.junit.jupiter.api.Assertions.assertFalse;
21  import static org.junit.jupiter.api.Assertions.assertTrue;
22  
23  import java.util.ArrayList;
24  
25  import org.apache.commons.collections4.IteratorUtils;
26  import org.junit.jupiter.api.BeforeEach;
27  import org.junit.jupiter.api.Test;
28  
29  /**
30   * Unit test suite for {@link ZippingIterator}.
31   */
32  @SuppressWarnings("boxing")
33  public class ZippingIteratorTest extends AbstractIteratorTest<Integer> {
34  
35      //------------------------------------------------------------ Conventional
36  
37      private ArrayList<Integer> evens;
38  
39      //--------------------------------------------------------------- Lifecycle
40  
41      private ArrayList<Integer> odds;
42      private ArrayList<Integer> fib;
43      public ZippingIteratorTest() {
44          super(ZippingIteratorTest.class.getSimpleName());
45      }
46  
47      @Override
48      @SuppressWarnings("unchecked")
49      public ZippingIterator<Integer> makeEmptyIterator() {
50          return new ZippingIterator<>(IteratorUtils.<Integer>emptyIterator());
51      }
52  
53      //---------------------------------------------------- TestIterator Methods
54  
55      @Override
56      public ZippingIterator<Integer> makeObject() {
57          return new ZippingIterator<>(evens.iterator(), odds.iterator(), fib.iterator());
58      }
59  
60      @BeforeEach
61      public void setUp() throws Exception {
62          evens = new ArrayList<>();
63          odds = new ArrayList<>();
64          for (int i = 0; i < 20; i++) {
65              if (0 == i % 2) {
66                  evens.add(i);
67              } else {
68                  odds.add(i);
69              }
70          }
71          fib = new ArrayList<>();
72          fib.add(1);
73          fib.add(1);
74          fib.add(2);
75          fib.add(3);
76          fib.add(5);
77          fib.add(8);
78          fib.add(13);
79          fib.add(21);
80      }
81  
82      //------------------------------------------------------------------- Tests
83  
84      @Test
85      public void testIterateEven() {
86          @SuppressWarnings("unchecked")
87          final ZippingIterator<Integer> iter = new ZippingIterator<>(evens.iterator());
88          for (final Integer even : evens) {
89              assertTrue(iter.hasNext());
90              assertEquals(even, iter.next());
91          }
92          assertFalse(iter.hasNext());
93      }
94  
95      @Test
96      public void testIterateEvenEven() {
97          final ZippingIterator<Integer> iter = new ZippingIterator<>(evens.iterator(), evens.iterator());
98          for (final Integer even : evens) {
99              assertTrue(iter.hasNext());
100             assertEquals(even, iter.next());
101             assertTrue(iter.hasNext());
102             assertEquals(even, iter.next());
103         }
104         assertFalse(iter.hasNext());
105     }
106 
107     @Test
108     public void testIterateEvenOdd() {
109         final ZippingIterator<Integer> iter = new ZippingIterator<>(evens.iterator(), odds.iterator());
110         for (int i = 0; i < 20; i++) {
111             assertTrue(iter.hasNext());
112             assertEquals(Integer.valueOf(i), iter.next());
113         }
114         assertFalse(iter.hasNext());
115     }
116 
117     @Test
118     public void testIterateFibEvenOdd() {
119         final ZippingIterator<Integer> iter = new ZippingIterator<>(fib.iterator(), evens.iterator(), odds.iterator());
120 
121         assertEquals(Integer.valueOf(1), iter.next());  // fib    1
122         assertEquals(Integer.valueOf(0), iter.next());  // even   0
123         assertEquals(Integer.valueOf(1), iter.next());  // odd    1
124         assertEquals(Integer.valueOf(1), iter.next());  // fib    1
125         assertEquals(Integer.valueOf(2), iter.next());  // even   2
126         assertEquals(Integer.valueOf(3), iter.next());  // odd    3
127         assertEquals(Integer.valueOf(2), iter.next());  // fib    2
128         assertEquals(Integer.valueOf(4), iter.next());  // even   4
129         assertEquals(Integer.valueOf(5), iter.next());  // odd    5
130         assertEquals(Integer.valueOf(3), iter.next());  // fib    3
131         assertEquals(Integer.valueOf(6), iter.next());  // even   6
132         assertEquals(Integer.valueOf(7), iter.next());  // odd    7
133         assertEquals(Integer.valueOf(5), iter.next());  // fib    5
134         assertEquals(Integer.valueOf(8), iter.next());  // even   8
135         assertEquals(Integer.valueOf(9), iter.next());  // odd    9
136         assertEquals(Integer.valueOf(8), iter.next());  // fib    8
137         assertEquals(Integer.valueOf(10), iter.next()); // even  10
138         assertEquals(Integer.valueOf(11), iter.next()); // odd   11
139         assertEquals(Integer.valueOf(13), iter.next()); // fib   13
140         assertEquals(Integer.valueOf(12), iter.next()); // even  12
141         assertEquals(Integer.valueOf(13), iter.next()); // odd   13
142         assertEquals(Integer.valueOf(21), iter.next()); // fib   21
143         assertEquals(Integer.valueOf(14), iter.next()); // even  14
144         assertEquals(Integer.valueOf(15), iter.next()); // odd   15
145         assertEquals(Integer.valueOf(16), iter.next()); // even  16
146         assertEquals(Integer.valueOf(17), iter.next()); // odd   17
147         assertEquals(Integer.valueOf(18), iter.next()); // even  18
148         assertEquals(Integer.valueOf(19), iter.next()); // odd   19
149 
150         assertFalse(iter.hasNext());
151     }
152 
153     @Test
154     public void testIterateOddEven() {
155         final ZippingIterator<Integer> iter = new ZippingIterator<>(odds.iterator(), evens.iterator());
156         for (int i = 0, j = 0; i < 20; i++) {
157             assertTrue(iter.hasNext());
158             final int val = iter.next();
159             if (i % 2 == 0) {
160                 assertEquals(odds.get(j).intValue(), val);
161             } else {
162                 assertEquals(evens.get(j).intValue(), val);
163                 j++;
164             }
165         }
166         assertFalse(iter.hasNext());
167     }
168 
169     @Test
170     public void testRemoveFromDouble() {
171         final ZippingIterator<Integer> iter = new ZippingIterator<>(evens.iterator(), odds.iterator());
172         int expectedSize = evens.size() + odds.size();
173         while (iter.hasNext()) {
174             final Object o = iter.next();
175             final Integer val = (Integer) o;
176             if (val.intValue() % 4 == 0 || val.intValue() % 3 == 0) {
177                 expectedSize--;
178                 iter.remove();
179             }
180         }
181         assertEquals(expectedSize, evens.size() + odds.size());
182     }
183 
184     @Test
185     public void testRemoveFromSingle() {
186         @SuppressWarnings("unchecked")
187         final ZippingIterator<Integer> iter = new ZippingIterator<>(evens.iterator());
188         int expectedSize = evens.size();
189         while (iter.hasNext()) {
190             final Object o = iter.next();
191             final Integer val = (Integer) o;
192             if (val.intValue() % 4 == 0) {
193                 expectedSize--;
194                 iter.remove();
195             }
196         }
197         assertEquals(expectedSize, evens.size());
198     }
199 
200 }
201