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 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());
111 assertEquals(Integer.valueOf(0), iter.next());
112 assertEquals(Integer.valueOf(1), iter.next());
113 assertEquals(Integer.valueOf(1), iter.next());
114 assertEquals(Integer.valueOf(2), iter.next());
115 assertEquals(Integer.valueOf(3), iter.next());
116 assertEquals(Integer.valueOf(2), iter.next());
117 assertEquals(Integer.valueOf(4), iter.next());
118 assertEquals(Integer.valueOf(5), iter.next());
119 assertEquals(Integer.valueOf(3), iter.next());
120 assertEquals(Integer.valueOf(6), iter.next());
121 assertEquals(Integer.valueOf(7), iter.next());
122 assertEquals(Integer.valueOf(5), iter.next());
123 assertEquals(Integer.valueOf(8), iter.next());
124 assertEquals(Integer.valueOf(9), iter.next());
125 assertEquals(Integer.valueOf(8), iter.next());
126 assertEquals(Integer.valueOf(10), iter.next());
127 assertEquals(Integer.valueOf(11), iter.next());
128 assertEquals(Integer.valueOf(13), iter.next());
129 assertEquals(Integer.valueOf(12), iter.next());
130 assertEquals(Integer.valueOf(13), iter.next());
131 assertEquals(Integer.valueOf(21), iter.next());
132 assertEquals(Integer.valueOf(14), iter.next());
133 assertEquals(Integer.valueOf(15), iter.next());
134 assertEquals(Integer.valueOf(16), iter.next());
135 assertEquals(Integer.valueOf(17), iter.next());
136 assertEquals(Integer.valueOf(18), iter.next());
137 assertEquals(Integer.valueOf(19), iter.next());
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