|
@@ -19,12 +19,14 @@
|
|
|
|
|
|
package org.elasticsearch.common.util.iterable;
|
|
|
|
|
|
-import org.elasticsearch.test.ESTestCase;
|
|
|
-
|
|
|
+import java.util.ArrayList;
|
|
|
import java.util.Arrays;
|
|
|
import java.util.Iterator;
|
|
|
+import java.util.List;
|
|
|
import java.util.NoSuchElementException;
|
|
|
|
|
|
+import org.elasticsearch.test.ESTestCase;
|
|
|
+
|
|
|
import static org.hamcrest.object.HasToString.hasToString;
|
|
|
|
|
|
public class IterablesTests extends ESTestCase {
|
|
@@ -56,6 +58,34 @@ public class IterablesTests extends ESTestCase {
|
|
|
test(iterable);
|
|
|
}
|
|
|
|
|
|
+ public void testFlatten() {
|
|
|
+ List<List<Integer>> list = new ArrayList<>();
|
|
|
+ list.add(new ArrayList<>());
|
|
|
+
|
|
|
+ Iterable<Integer> allInts = Iterables.flatten(list);
|
|
|
+ int count = 0;
|
|
|
+ for(int x : allInts) {
|
|
|
+ count++;
|
|
|
+ }
|
|
|
+ assertEquals(0, count);
|
|
|
+ list.add(new ArrayList<>());
|
|
|
+ list.get(1).add(0);
|
|
|
+
|
|
|
+ // changes to the outer list are not seen since flatten pre-caches outer list on init:
|
|
|
+ count = 0;
|
|
|
+ for(int x : allInts) {
|
|
|
+ count++;
|
|
|
+ }
|
|
|
+ assertEquals(0, count);
|
|
|
+
|
|
|
+ // but changes to the original inner lists are seen:
|
|
|
+ list.get(0).add(0);
|
|
|
+ for(int x : allInts) {
|
|
|
+ count++;
|
|
|
+ }
|
|
|
+ assertEquals(1, count);
|
|
|
+ }
|
|
|
+
|
|
|
private void test(Iterable<String> iterable) {
|
|
|
try {
|
|
|
Iterables.get(iterable, -1);
|
|
@@ -73,4 +103,4 @@ public class IterablesTests extends ESTestCase {
|
|
|
assertThat(e, hasToString("java.lang.IndexOutOfBoundsException: 3"));
|
|
|
}
|
|
|
}
|
|
|
-}
|
|
|
+}
|