1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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
31
32 @SuppressWarnings("boxing")
33 public class ZippingIteratorTest extends AbstractIteratorTest<Integer> {
34
35
36
37 private ArrayList<Integer> evens;
38
39
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
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
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());
122 assertEquals(Integer.valueOf(0), iter.next());
123 assertEquals(Integer.valueOf(1), iter.next());
124 assertEquals(Integer.valueOf(1), iter.next());
125 assertEquals(Integer.valueOf(2), iter.next());
126 assertEquals(Integer.valueOf(3), iter.next());
127 assertEquals(Integer.valueOf(2), iter.next());
128 assertEquals(Integer.valueOf(4), iter.next());
129 assertEquals(Integer.valueOf(5), iter.next());
130 assertEquals(Integer.valueOf(3), iter.next());
131 assertEquals(Integer.valueOf(6), iter.next());
132 assertEquals(Integer.valueOf(7), iter.next());
133 assertEquals(Integer.valueOf(5), iter.next());
134 assertEquals(Integer.valueOf(8), iter.next());
135 assertEquals(Integer.valueOf(9), iter.next());
136 assertEquals(Integer.valueOf(8), iter.next());
137 assertEquals(Integer.valueOf(10), iter.next());
138 assertEquals(Integer.valueOf(11), iter.next());
139 assertEquals(Integer.valueOf(13), iter.next());
140 assertEquals(Integer.valueOf(12), iter.next());
141 assertEquals(Integer.valueOf(13), iter.next());
142 assertEquals(Integer.valueOf(21), iter.next());
143 assertEquals(Integer.valueOf(14), iter.next());
144 assertEquals(Integer.valueOf(15), iter.next());
145 assertEquals(Integer.valueOf(16), iter.next());
146 assertEquals(Integer.valueOf(17), iter.next());
147 assertEquals(Integer.valueOf(18), iter.next());
148 assertEquals(Integer.valueOf(19), iter.next());
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