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      private ArrayList<Integer> evens;
36  
37      private ArrayList<Integer> odds;
38      private ArrayList<Integer> fib;
39  
40      @Override
41      @SuppressWarnings("unchecked")
42      public ZippingIterator<Integer> makeEmptyIterator() {
43          return new ZippingIterator<>(IteratorUtils.<Integer>emptyIterator());
44      }
45  
46      @Override
47      public ZippingIterator<Integer> makeObject() {
48          return new ZippingIterator<>(evens.iterator(), odds.iterator(), fib.iterator());
49      }
50  
51      @BeforeEach
52      public void setUp() throws Exception {
53          evens = new ArrayList<>();
54          odds = new ArrayList<>();
55          for (int i = 0; i < 20; i++) {
56              if (0 == i % 2) {
57                  evens.add(i);
58              } else {
59                  odds.add(i);
60              }
61          }
62          fib = new ArrayList<>();
63          fib.add(1);
64          fib.add(1);
65          fib.add(2);
66          fib.add(3);
67          fib.add(5);
68          fib.add(8);
69          fib.add(13);
70          fib.add(21);
71      }
72  
73      @Test
74      public void testIterateEven() {
75          @SuppressWarnings("unchecked")
76          final ZippingIterator<Integer> iter = new ZippingIterator<>(evens.iterator());
77          for (final Integer even : evens) {
78              assertTrue(iter.hasNext());
79              assertEquals(even, iter.next());
80          }
81          assertFalse(iter.hasNext());
82      }
83  
84      @Test
85      public void testIterateEvenEven() {
86          final ZippingIterator<Integer> iter = new ZippingIterator<>(evens.iterator(), evens.iterator());
87          for (final Integer even : evens) {
88              assertTrue(iter.hasNext());
89              assertEquals(even, iter.next());
90              assertTrue(iter.hasNext());
91              assertEquals(even, iter.next());
92          }
93          assertFalse(iter.hasNext());
94      }
95  
96      @Test
97      public void testIterateEvenOdd() {
98          final ZippingIterator<Integer> iter = new ZippingIterator<>(evens.iterator(), odds.iterator());
99          for (int i = 0; i < 20; i++) {
100             assertTrue(iter.hasNext());
101             assertEquals(Integer.valueOf(i), iter.next());
102         }
103         assertFalse(iter.hasNext());
104     }
105 
106     @Test
107     public void testIterateFibEvenOdd() {
108         final ZippingIterator<Integer> iter = new ZippingIterator<>(fib.iterator(), evens.iterator(), odds.iterator());
109 
110         assertEquals(Integer.valueOf(1), iter.next());  // fib    1
111         assertEquals(Integer.valueOf(0), iter.next());  // even   0
112         assertEquals(Integer.valueOf(1), iter.next());  // odd    1
113         assertEquals(Integer.valueOf(1), iter.next());  // fib    1
114         assertEquals(Integer.valueOf(2), iter.next());  // even   2
115         assertEquals(Integer.valueOf(3), iter.next());  // odd    3
116         assertEquals(Integer.valueOf(2), iter.next());  // fib    2
117         assertEquals(Integer.valueOf(4), iter.next());  // even   4
118         assertEquals(Integer.valueOf(5), iter.next());  // odd    5
119         assertEquals(Integer.valueOf(3), iter.next());  // fib    3
120         assertEquals(Integer.valueOf(6), iter.next());  // even   6
121         assertEquals(Integer.valueOf(7), iter.next());  // odd    7
122         assertEquals(Integer.valueOf(5), iter.next());  // fib    5
123         assertEquals(Integer.valueOf(8), iter.next());  // even   8
124         assertEquals(Integer.valueOf(9), iter.next());  // odd    9
125         assertEquals(Integer.valueOf(8), iter.next());  // fib    8
126         assertEquals(Integer.valueOf(10), iter.next()); // even  10
127         assertEquals(Integer.valueOf(11), iter.next()); // odd   11
128         assertEquals(Integer.valueOf(13), iter.next()); // fib   13
129         assertEquals(Integer.valueOf(12), iter.next()); // even  12
130         assertEquals(Integer.valueOf(13), iter.next()); // odd   13
131         assertEquals(Integer.valueOf(21), iter.next()); // fib   21
132         assertEquals(Integer.valueOf(14), iter.next()); // even  14
133         assertEquals(Integer.valueOf(15), iter.next()); // odd   15
134         assertEquals(Integer.valueOf(16), iter.next()); // even  16
135         assertEquals(Integer.valueOf(17), iter.next()); // odd   17
136         assertEquals(Integer.valueOf(18), iter.next()); // even  18
137         assertEquals(Integer.valueOf(19), iter.next()); // odd   19
138 
139         assertFalse(iter.hasNext());
140     }
141 
142     @Test
143     public void testIterateOddEven() {
144         final ZippingIterator<Integer> iter = new ZippingIterator<>(odds.iterator(), evens.iterator());
145         for (int i = 0, j = 0; i < 20; i++) {
146             assertTrue(iter.hasNext());
147             final int val = iter.next();
148             if (i % 2 == 0) {
149                 assertEquals(odds.get(j).intValue(), val);
150             } else {
151                 assertEquals(evens.get(j).intValue(), val);
152                 j++;
153             }
154         }
155         assertFalse(iter.hasNext());
156     }
157 
158     @Test
159     public void testRemoveFromDouble() {
160         final ZippingIterator<Integer> iter = new ZippingIterator<>(evens.iterator(), odds.iterator());
161         int expectedSize = evens.size() + odds.size();
162         while (iter.hasNext()) {
163             final Object o = iter.next();
164             final Integer val = (Integer) o;
165             if (val.intValue() % 4 == 0 || val.intValue() % 3 == 0) {
166                 expectedSize--;
167                 iter.remove();
168             }
169         }
170         assertEquals(expectedSize, evens.size() + odds.size());
171     }
172 
173     @Test
174     public void testRemoveFromSingle() {
175         @SuppressWarnings("unchecked")
176         final ZippingIterator<Integer> iter = new ZippingIterator<>(evens.iterator());
177         int expectedSize = evens.size();
178         while (iter.hasNext()) {
179             final Object o = iter.next();
180             final Integer val = (Integer) o;
181             if (val.intValue() % 4 == 0) {
182                 expectedSize--;
183                 iter.remove();
184             }
185         }
186         assertEquals(expectedSize, evens.size());
187     }
188 
189 }
190