11d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/* 21d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Copyright (C) 2007 The Guava Authors 31d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 41d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Licensed under the Apache License, Version 2.0 (the "License"); 51d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * you may not use this file except in compliance with the License. 61d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * You may obtain a copy of the License at 71d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 81d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * http://www.apache.org/licenses/LICENSE-2.0 91d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Unless required by applicable law or agreed to in writing, software 111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * distributed under the License is distributed on an "AS IS" BASIS, 121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * See the License for the specific language governing permissions and 141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * limitations under the License. 151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertpackage com.google.common.collect; 181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static com.google.common.collect.Iterables.skip; 201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static com.google.common.collect.Lists.newArrayList; 211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static com.google.common.collect.Sets.newLinkedHashSet; 221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static com.google.common.collect.testing.IteratorFeature.MODIFIABLE; 231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static com.google.common.collect.testing.IteratorFeature.UNMODIFIABLE; 241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static java.util.Arrays.asList; 251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static java.util.Collections.emptyList; 261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static org.junit.contrib.truth.Truth.ASSERT; 271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.annotations.GwtCompatible; 291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.annotations.GwtIncompatible; 301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.base.Function; 311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.base.Optional; 321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.base.Predicate; 331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.base.Predicates; 341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.IteratorTester; 351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.testing.NullPointerTester; 361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport junit.framework.TestCase; 381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.ArrayList; 401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Arrays; 411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Collection; 421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Collections; 431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.ConcurrentModificationException; 441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Iterator; 451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.List; 461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.NoSuchElementException; 471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Queue; 481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.RandomAccess; 491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Set; 501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.SortedSet; 511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.TreeSet; 521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/** 541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Unit test for {@code Iterables}. 551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * @author Kevin Bourrillion 571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * @author Jared Levy 581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert@GwtCompatible(emulated = true) 601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertpublic class IterablesTest extends TestCase { 611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testSize0() { 631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> iterable = Collections.emptySet(); 641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0, Iterables.size(iterable)); 651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testSize1Collection() { 681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> iterable = Collections.singleton("a"); 691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(1, Iterables.size(iterable)); 701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testSize2NonCollection() { 731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<Integer> iterable = new Iterable<Integer>() { 741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override 751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public Iterator<Integer> iterator() { 761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return asList(0, 1).iterator(); 771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }; 791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(2, Iterables.size(iterable)); 801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @SuppressWarnings("serial") 831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testSize_collection_doesntIterate() { 841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<Integer> nums = asList(1, 2, 3, 4, 5); 851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<Integer> collection = new ArrayList<Integer>(nums) { 861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public Iterator<Integer> iterator() { 871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail("Don't iterate me!"); 881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return null; 891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }; 911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(5, Iterables.size(collection)); 921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static Iterable<String> iterable(String... elements) { 951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert final List<String> list = asList(elements); 961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return new Iterable<String>() { 971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override 981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public Iterator<String> iterator() { 991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return list.iterator(); 1001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }; 1021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void test_contains_null_set_yes() { 1051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> set = Sets.newHashSet("a", null, "b"); 1061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(Iterables.contains(set, null)); 1071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void test_contains_null_set_no() { 1101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> set = Sets.newHashSet("a", "b"); 1111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(Iterables.contains(set, null)); 1121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void test_contains_null_iterable_yes() { 1151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> set = iterable("a", null, "b"); 1161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(Iterables.contains(set, null)); 1171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void test_contains_null_iterable_no() { 1201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> set = iterable("a", "b"); 1211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(Iterables.contains(set, null)); 1221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void test_contains_nonnull_set_yes() { 1251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> set = Sets.newHashSet("a", null, "b"); 1261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(Iterables.contains(set, "b")); 1271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void test_contains_nonnull_set_no() { 1301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> set = Sets.newHashSet("a", "b"); 1311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(Iterables.contains(set, "c")); 1321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void test_contains_nonnull_iterable_yes() { 1351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> set = iterable("a", null, "b"); 1361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(Iterables.contains(set, "b")); 1371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void test_contains_nonnull_iterable_no() { 1401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> set = iterable("a", "b"); 1411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(Iterables.contains(set, "c")); 1421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testGetOnlyElement_noDefault_valid() { 1451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> iterable = Collections.singletonList("foo"); 1461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("foo", Iterables.getOnlyElement(iterable)); 1471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testGetOnlyElement_noDefault_empty() { 1501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> iterable = Collections.emptyList(); 1511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 1521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterables.getOnlyElement(iterable); 1531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 1541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NoSuchElementException expected) { 1551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testGetOnlyElement_noDefault_multiple() { 1591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> iterable = asList("foo", "bar"); 1601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 1611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterables.getOnlyElement(iterable); 1621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 1631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IllegalArgumentException expected) { 1641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testGetOnlyElement_withDefault_singleton() { 1681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> iterable = Collections.singletonList("foo"); 1691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("foo", Iterables.getOnlyElement(iterable, "bar")); 1701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testGetOnlyElement_withDefault_empty() { 1731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> iterable = Collections.emptyList(); 1741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("bar", Iterables.getOnlyElement(iterable, "bar")); 1751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testGetOnlyElement_withDefault_empty_null() { 1781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> iterable = Collections.emptyList(); 1791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertNull(Iterables.getOnlyElement(iterable, null)); 1801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testGetOnlyElement_withDefault_multiple() { 1831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> iterable = asList("foo", "bar"); 1841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 1851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterables.getOnlyElement(iterable, "x"); 1861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 1871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IllegalArgumentException expected) { 1881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("Iterables.toArray(Iterable, Class)") 1921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testToArrayEmpty() { 1931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> iterable = Collections.emptyList(); 1941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String[] array = Iterables.toArray(iterable, String.class); 1951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(Arrays.equals(new String[0], array)); 1961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("Iterables.toArray(Iterable, Class)") 1991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testToArraySingleton() { 2001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> iterable = Collections.singletonList("a"); 2011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String[] array = Iterables.toArray(iterable, String.class); 2021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(Arrays.equals(new String[] {"a"}, array)); 2031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("Iterables.toArray(Iterable, Class)") 2061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testToArray() { 2071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String[] sourceArray = new String[] {"a", "b", "c"}; 2081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> iterable = asList(sourceArray); 2091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String[] newArray = Iterables.toArray(iterable, String.class); 2101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(Arrays.equals(sourceArray, newArray)); 2111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testFilter() { 2141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> unfiltered = newArrayList("foo", "bar"); 2151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> filtered = Iterables.filter(unfiltered, 2161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Predicates.equalTo("foo")); 2171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> expected = Collections.singletonList("foo"); 2191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> actual = newArrayList(filtered); 2201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(expected, actual); 2211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertCanIterateAgain(filtered); 2221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("[foo]", filtered.toString()); 2231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testAny() { 2261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> list = newArrayList(); 2271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Predicate<String> predicate = Predicates.equalTo("pants"); 2281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(Iterables.any(list, predicate)); 2301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert list.add("cool"); 2311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(Iterables.any(list, predicate)); 2321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert list.add("pants"); 2331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(Iterables.any(list, predicate)); 2341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testAll() { 2371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> list = newArrayList(); 2381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Predicate<String> predicate = Predicates.equalTo("cool"); 2391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(Iterables.all(list, predicate)); 2411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert list.add("cool"); 2421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(Iterables.all(list, predicate)); 2431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert list.add("pants"); 2441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(Iterables.all(list, predicate)); 2451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testFind() { 2481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> list = newArrayList("cool", "pants"); 2491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("cool", Iterables.find(list, Predicates.equalTo("cool"))); 2501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("pants", Iterables.find(list, Predicates.equalTo("pants"))); 2511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 2521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterables.find(list, Predicates.alwaysFalse()); 2531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 2541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NoSuchElementException e) { 2551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("cool", Iterables.find(list, Predicates.alwaysTrue())); 2571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertCanIterateAgain(list); 2581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testFind_withDefault() { 2611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> list = Lists.newArrayList("cool", "pants"); 2621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("cool", 2631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterables.find(list, Predicates.equalTo("cool"), "woot")); 2641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("pants", 2651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterables.find(list, Predicates.equalTo("pants"), "woot")); 2661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("woot", Iterables.find(list, 2671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Predicates.alwaysFalse(), "woot")); 2681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertNull(Iterables.find(list, Predicates.alwaysFalse(), null)); 2691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("cool", 2701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterables.find(list, Predicates.alwaysTrue(), "woot")); 2711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertCanIterateAgain(list); 2721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testTryFind() { 2751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> list = newArrayList("cool", "pants"); 2761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Optional.of("cool"), 2771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterables.tryFind(list, Predicates.equalTo("cool"))); 2781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Optional.of("pants"), 2791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterables.tryFind(list, Predicates.equalTo("pants"))); 2801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Optional.of("cool"), 2811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterables.tryFind(list, Predicates.alwaysTrue())); 2821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Optional.absent(), 2831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterables.tryFind(list, Predicates.alwaysFalse())); 2841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertCanIterateAgain(list); 2851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static class TypeA {} 2881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private interface TypeB {} 2891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static class HasBoth extends TypeA implements TypeB {} 2901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("Iterables.filter(Iterable, Class)") 2921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testFilterByType() throws Exception { 2931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert HasBoth hasBoth = new HasBoth(); 2941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<TypeA> alist = Lists 2951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .newArrayList(new TypeA(), new TypeA(), hasBoth, new TypeA()); 2961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<TypeB> blist = Iterables.filter(alist, TypeB.class); 2971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(blist).hasContentsInOrder(hasBoth); 2981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testTransform() { 3011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> input = asList("1", "2", "3"); 3021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<Integer> result = Iterables.transform(input, 3031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new Function<String, Integer>() { 3041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override 3051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public Integer apply(String from) { 3061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Integer.valueOf(from); 3071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }); 3091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<Integer> actual = newArrayList(result); 3111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<Integer> expected = asList(1, 2, 3); 3121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(expected, actual); 3131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertCanIterateAgain(result); 3141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("[1, 2, 3]", result.toString()); 3151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testPoorlyBehavedTransform() { 3181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> input = asList("1", null, "3"); 3191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<Integer> result = Iterables.transform(input, 3201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new Function<String, Integer>() { 3211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override 3221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public Integer apply(String from) { 3231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Integer.valueOf(from); 3241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }); 3261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<Integer> resultIterator = result.iterator(); 3281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert resultIterator.next(); 3291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 3311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert resultIterator.next(); 3321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail("Expected NFE"); 3331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NumberFormatException nfe) { 3341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Expected to fail. 3351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testNullFriendlyTransform() { 3391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<Integer> input = asList(1, 2, null, 3); 3401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> result = Iterables.transform(input, 3411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new Function<Integer, String>() { 3421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override 3431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public String apply(Integer from) { 3441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return String.valueOf(from); 3451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }); 3471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> actual = newArrayList(result); 3491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> expected = asList("1", "2", "null", "3"); 3501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(expected, actual); 3511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Far less exhaustive than the tests in IteratorsTest 3541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCycle() { 3551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> cycle = Iterables.cycle("a", "b"); 3561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert int howManyChecked = 0; 3581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (String string : cycle) { 3591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String expected = (howManyChecked % 2 == 0) ? "a" : "b"; 3601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(expected, string); 3611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert if (howManyChecked++ == 5) { 3621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert break; 3631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // We left the last iterator pointing to "b". But a new iterator should 3671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // always point to "a". 3681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (String string : cycle) { 3691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("a", string); 3701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert break; 3711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("[a, b] (cycled)", cycle.toString()); 3741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Again, the exhaustive tests are in IteratorsTest 3771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testConcatIterable() { 3781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<Integer> list1 = newArrayList(1); 3791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<Integer> list2 = newArrayList(4); 3801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @SuppressWarnings("unchecked") 3821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<List<Integer>> input = newArrayList(list1, list2); 3831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<Integer> result = Iterables.concat(input); 3851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(asList(1, 4), newArrayList(result)); 3861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Now change the inputs and see result dynamically change as well 3881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert list1.add(2); 3901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<Integer> list3 = newArrayList(3); 3911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert input.add(1, list3); 3921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(asList(1, 2, 3, 4), newArrayList(result)); 3941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("[1, 2, 3, 4]", result.toString()); 3951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testConcatVarargs() { 3981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<Integer> list1 = newArrayList(1); 3991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<Integer> list2 = newArrayList(4); 4001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<Integer> list3 = newArrayList(7, 8); 4011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<Integer> list4 = newArrayList(9); 4021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<Integer> list5 = newArrayList(10); 4031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @SuppressWarnings("unchecked") 4041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<Integer> result = 4051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterables.concat(list1, list2, list3, list4, list5); 4061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(asList(1, 4, 7, 8, 9, 10), newArrayList(result)); 4071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("[1, 4, 7, 8, 9, 10]", result.toString()); 4081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testConcatNullPointerException() { 4111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<Integer> list1 = newArrayList(1); 4121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<Integer> list2 = newArrayList(4); 4131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 4151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterables.concat(list1, null, list2); 4161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 4171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NullPointerException expected) {} 4181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testConcatPeformingFiniteCycle() { 4211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<Integer> iterable = asList(1, 2, 3); 4221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert int n = 4; 4231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<Integer> repeated 4241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = Iterables.concat(Collections.nCopies(n, iterable)); 4251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(repeated).hasContentsInOrder( 4261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3); 4271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testPartition_badSize() { 4301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<Integer> source = Collections.singleton(1); 4311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 4321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterables.partition(source, 0); 4331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 4341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IllegalArgumentException expected) { 4351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testPartition_empty() { 4391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<Integer> source = Collections.emptySet(); 4401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<List<Integer>> partitions = Iterables.partition(source, 1); 4411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(Iterables.isEmpty(partitions)); 4421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testPartition_singleton1() { 4451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<Integer> source = Collections.singleton(1); 4461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<List<Integer>> partitions = Iterables.partition(source, 1); 4471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(1, Iterables.size(partitions)); 4481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Collections.singletonList(1), partitions.iterator().next()); 4491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testPartition_view() { 4521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<Integer> list = asList(1, 2); 4531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<List<Integer>> partitions = Iterables.partition(list, 2); 4541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Changes before the partition is retrieved are reflected 4561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert list.set(0, 3); 4571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<List<Integer>> iterator = partitions.iterator(); 4591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Changes before the partition is retrieved are reflected 4611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert list.set(1, 4); 4621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<Integer> first = iterator.next(); 4641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Changes after are not 4661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert list.set(0, 5); 4671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(ImmutableList.of(3, 4), first); 4691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("?") 4721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // TODO: Figure out why this is failing in GWT. 4731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testPartitionRandomAccessInput() { 4741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<Integer> source = asList(1, 2, 3); 4751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<List<Integer>> partitions = Iterables.partition(source, 2); 4761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<List<Integer>> iterator = partitions.iterator(); 4771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(iterator.next() instanceof RandomAccess); 4781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(iterator.next() instanceof RandomAccess); 4791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("?") 4821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // TODO: Figure out why this is failing in GWT. 4831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testPartitionNonRandomAccessInput() { 4841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<Integer> source = Lists.newLinkedList(asList(1, 2, 3)); 4851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<List<Integer>> partitions = Iterables.partition(source, 2); 4861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<List<Integer>> iterator = partitions.iterator(); 4871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Even though the input list doesn't implement RandomAccess, the output 4881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // lists do. 4891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(iterator.next() instanceof RandomAccess); 4901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(iterator.next() instanceof RandomAccess); 4911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testPaddedPartition_basic() { 4941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<Integer> list = asList(1, 2, 3, 4, 5); 4951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<List<Integer>> partitions = Iterables.paddedPartition(list, 2); 4961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(3, Iterables.size(partitions)); 4971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(asList(5, null), Iterables.getLast(partitions)); 4981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testPaddedPartitionRandomAccessInput() { 5011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<Integer> source = asList(1, 2, 3); 5021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<List<Integer>> partitions = Iterables.paddedPartition(source, 2); 5031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<List<Integer>> iterator = partitions.iterator(); 5041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(iterator.next() instanceof RandomAccess); 5051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(iterator.next() instanceof RandomAccess); 5061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testPaddedPartitionNonRandomAccessInput() { 5091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<Integer> source = Lists.newLinkedList(asList(1, 2, 3)); 5101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<List<Integer>> partitions = Iterables.paddedPartition(source, 2); 5111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<List<Integer>> iterator = partitions.iterator(); 5121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Even though the input list doesn't implement RandomAccess, the output 5131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // lists do. 5141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(iterator.next() instanceof RandomAccess); 5151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(iterator.next() instanceof RandomAccess); 5161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // More tests in IteratorsTest 5191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testAddAllToList() { 5201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> alreadyThere = newArrayList("already", "there"); 5211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> freshlyAdded = newArrayList("freshly", "added"); 5221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert boolean changed = Iterables.addAll(alreadyThere, freshlyAdded); 5241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(alreadyThere).hasContentsInOrder( 5251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "already", "there", "freshly", "added"); 5261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(changed); 5271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static void assertCanIterateAgain(Iterable<?> iterable) { 5301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (@SuppressWarnings("unused") Object obj : iterable) { 5311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("NullPointerTester") 5351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testNullPointerExceptions() throws Exception { 5361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert NullPointerTester tester = new NullPointerTester(); 5371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert tester.testAllPublicStaticMethods(Iterables.class); 5381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // More exhaustive tests are in IteratorsTest. 5411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testElementsEqual() throws Exception { 5421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<?> a; 5431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<?> b; 5441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // A few elements. 5461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert a = asList(4, 8, 15, 16, 23, 42); 5471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert b = asList(4, 8, 15, 16, 23, 42); 5481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(Iterables.elementsEqual(a, b)); 5491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // An element differs. 5511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert a = asList(4, 8, 15, 12, 23, 42); 5521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert b = asList(4, 8, 15, 16, 23, 42); 5531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(Iterables.elementsEqual(a, b)); 5541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // null versus non-null. 5561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert a = asList(4, 8, 15, null, 23, 42); 5571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert b = asList(4, 8, 15, 16, 23, 42); 5581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(Iterables.elementsEqual(a, b)); 5591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(Iterables.elementsEqual(b, a)); 5601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Different lengths. 5621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert a = asList(4, 8, 15, 16, 23); 5631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert b = asList(4, 8, 15, 16, 23, 42); 5641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(Iterables.elementsEqual(a, b)); 5651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(Iterables.elementsEqual(b, a)); 5661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("slow (~30s)") 5691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @SuppressWarnings("deprecation") // test of a deprecated method 5701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testReversePassesIteratorsTester() { 5711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new IteratorTester<Integer>(5, MODIFIABLE, newArrayList(2, 4, 6, 8), 5721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert IteratorTester.KnownOrder.KNOWN_ORDER) { 5731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Iterator<Integer> newTargetIterator() { 5741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Iterables.reverse(newArrayList(8, 6, 4, 2)).iterator(); 5751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }.test(); 5771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @SuppressWarnings("deprecation") // test of a deprecated method 5801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testReverseWorksAsExpected() { 5811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String[] testStrs = new String[] {"foo", "bar", "baz"}; 5821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String[] expected = new String[] {"baz", "bar", "foo"}; 5831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> stuff = ImmutableList.copyOf(testStrs); 5851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> reversed = Iterables.reverse(stuff); 5871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(reversed).hasContentsInOrder(expected); 5881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("[baz, bar, foo]", reversed.toString()); 5891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> removable = newArrayList("foo", "bar", "bad", "baz"); 5911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert reversed = Iterables.reverse(removable); 5931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(reversed).hasContentsInOrder("baz", "bad", "bar", "foo"); 5941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> reverseIter = reversed.iterator(); 5961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("baz", reverseIter.next()); 5971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("bad", reverseIter.next()); 5981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert reverseIter.remove(); 5991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(reversed).hasContentsInOrder(expected); 6011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(reversed).hasContentsInOrder(expected); 6021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testToString() { 6051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> list = Collections.emptyList(); 6061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("[]", Iterables.toString(list)); 6071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert list = newArrayList("yam", "bam", "jam", "ham"); 6091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("[yam, bam, jam, ham]", Iterables.toString(list)); 6101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testLimit() { 6131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> iterable = newArrayList("foo", "bar", "baz"); 6141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> limited = Iterables.limit(iterable, 2); 6151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> expected = ImmutableList.of("foo", "bar"); 6171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> actual = newArrayList(limited); 6181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(expected, actual); 6191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertCanIterateAgain(limited); 6201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("[foo, bar]", limited.toString()); 6211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testLimit_illegalArgument() { 6241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> list = newArrayList("a", "b", "c"); 6251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 6261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterables.limit(list, -1); 6271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 6281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IllegalArgumentException expected) {} 6291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testIsEmpty() { 6321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> emptyList = Collections.emptyList(); 6331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(Iterables.isEmpty(emptyList)); 6341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> singletonList = Collections.singletonList("foo"); 6361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(Iterables.isEmpty(singletonList)); 6371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testSkip_simple() { 6401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collection<String> set = ImmutableSet.of("a", "b", "c", "d", "e"); 6411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(newArrayList("c", "d", "e"), newArrayList(skip(set, 2))); 6421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("[c, d, e]", skip(set, 2).toString()); 6431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testSkip_simpleList() { 6461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collection<String> list = newArrayList("a", "b", "c", "d", "e"); 6471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(newArrayList("c", "d", "e"), newArrayList(skip(list, 2))); 6481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("[c, d, e]", skip(list, 2).toString()); 6491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testSkip_pastEnd() { 6521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collection<String> set = ImmutableSet.of("a", "b"); 6531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(emptyList(), newArrayList(skip(set, 20))); 6541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testSkip_pastEndList() { 6571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collection<String> list = newArrayList("a", "b"); 6581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(emptyList(), newArrayList(skip(list, 20))); 6591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testSkip_skipNone() { 6621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collection<String> set = ImmutableSet.of("a", "b"); 6631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(newArrayList("a", "b"), newArrayList(skip(set, 0))); 6641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testSkip_skipNoneList() { 6671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collection<String> list = newArrayList("a", "b"); 6681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(newArrayList("a", "b"), newArrayList(skip(list, 0))); 6691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("slow (~35s)") 6721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testSkip_iterator() { 6731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new IteratorTester<Integer>(5, MODIFIABLE, newArrayList(2, 3), 6741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert IteratorTester.KnownOrder.KNOWN_ORDER) { 6751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Iterator<Integer> newTargetIterator() { 6761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return skip(newLinkedHashSet(asList(1, 2, 3)), 1).iterator(); 6771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }.test(); 6791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("slow (~35s)") 6821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testSkip_iteratorList() { 6831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new IteratorTester<Integer>(5, MODIFIABLE, newArrayList(2, 3), 6841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert IteratorTester.KnownOrder.KNOWN_ORDER) { 6851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Iterator<Integer> newTargetIterator() { 6861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return skip(newArrayList(1, 2, 3), 1).iterator(); 6871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }.test(); 6891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testSkip_nonStructurallyModifiedList() throws Exception { 6921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> list = newArrayList("a", "b", "c"); 6931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> tail = skip(list, 1); 6941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> tailIterator = tail.iterator(); 6951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert list.set(2, "C"); 6961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("b", tailIterator.next()); 6971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("C", tailIterator.next()); 6981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(tailIterator.hasNext()); 6991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testSkip_structurallyModifiedSkipSome() throws Exception { 7021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collection<String> set = newLinkedHashSet(asList("a", "b", "c")); 7031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> tail = skip(set, 1); 7041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert set.remove("b"); 7051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert set.addAll(newArrayList("A", "B", "C")); 7061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(tail).hasContentsInOrder("c", "A", "B", "C"); 7071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testSkip_structurallyModifiedSkipSomeList() throws Exception { 7101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> list = newArrayList("a", "b", "c"); 7111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> tail = skip(list, 1); 7121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert list.subList(1, 3).clear(); 7131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert list.addAll(0, newArrayList("A", "B", "C")); 7141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(tail).hasContentsInOrder("B", "C", "a"); 7151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testSkip_structurallyModifiedSkipAll() throws Exception { 7181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collection<String> set = newLinkedHashSet(asList("a", "b", "c")); 7191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> tail = skip(set, 2); 7201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert set.remove("a"); 7211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert set.remove("b"); 7221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(tail.iterator().hasNext()); 7231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testSkip_structurallyModifiedSkipAllList() throws Exception { 7261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> list = newArrayList("a", "b", "c"); 7271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> tail = skip(list, 2); 7281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert list.subList(0, 2).clear(); 7291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(Iterables.isEmpty(tail)); 7301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testSkip_illegalArgument() { 7331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> list = newArrayList("a", "b", "c"); 7341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 7351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert skip(list, -1); 7361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 7371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IllegalArgumentException expected) {} 7381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private void testGetOnAbc(Iterable<String> iterable) { 7411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 7421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterables.get(iterable, -1); 7431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 7441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IndexOutOfBoundsException expected) {} 7451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("a", Iterables.get(iterable, 0)); 7461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("b", Iterables.get(iterable, 1)); 7471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("c", Iterables.get(iterable, 2)); 7481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 7491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterables.get(iterable, 3); 7501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 7511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IndexOutOfBoundsException nsee) {} 7521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 7531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterables.get(iterable, 4); 7541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 7551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IndexOutOfBoundsException nsee) {} 7561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private void testGetOnEmpty(Iterable<String> iterable) { 7591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 7601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterables.get(iterable, 0); 7611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 7621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IndexOutOfBoundsException expected) {} 7631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testGet_list() { 7661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert testGetOnAbc(newArrayList("a", "b", "c")); 7671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testGet_emptyList() { 7701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert testGetOnEmpty(Collections.<String>emptyList()); 7711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testGet_sortedSet() { 7741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert testGetOnAbc(ImmutableSortedSet.of("b", "c", "a")); 7751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testGet_emptySortedSet() { 7781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert testGetOnEmpty(ImmutableSortedSet.<String>of()); 7791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testGet_iterable() { 7821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert testGetOnAbc(ImmutableSet.of("a", "b", "c")); 7831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testGet_emptyIterable() { 7861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert testGetOnEmpty(Sets.<String>newHashSet()); 7871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testGet_withDefault_negativePosition() { 7901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 7911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterables.get(newArrayList("a", "b", "c"), -1, "d"); 7921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 7931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IndexOutOfBoundsException expected) { 7941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // pass 7951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testGet_withDefault_simple() { 7991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ArrayList<String> list = newArrayList("a", "b", "c"); 8001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("b", Iterables.get(list, 1, "d")); 8011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testGet_withDefault_iterable() { 8041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Set<String> set = ImmutableSet.of("a", "b", "c"); 8051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("b", Iterables.get(set, 1, "d")); 8061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testGet_withDefault_last() { 8091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ArrayList<String> list = newArrayList("a", "b", "c"); 8101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("c", Iterables.get(list, 2, "d")); 8111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testGet_withDefault_lastPlusOne() { 8141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ArrayList<String> list = newArrayList("a", "b", "c"); 8151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("d", Iterables.get(list, 3, "d")); 8161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testGet_withDefault_doesntIterate() { 8191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> list = new DiesOnIteratorArrayList(); 8201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert list.add("a"); 8211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("a", Iterables.get(list, 0, "b")); 8221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testGetFirst_withDefault_singleton() { 8251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> iterable = Collections.singletonList("foo"); 8261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("foo", Iterables.getFirst(iterable, "bar")); 8271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testGetFirst_withDefault_empty() { 8301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> iterable = Collections.emptyList(); 8311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("bar", Iterables.getFirst(iterable, "bar")); 8321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testGetFirst_withDefault_empty_null() { 8351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> iterable = Collections.emptyList(); 8361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertNull(Iterables.getFirst(iterable, null)); 8371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testGetFirst_withDefault_multiple() { 8401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> iterable = asList("foo", "bar"); 8411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("foo", Iterables.getFirst(iterable, "qux")); 8421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testGetLast_list() { 8451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> list = newArrayList("a", "b", "c"); 8461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("c", Iterables.getLast(list)); 8471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testGetLast_emptyList() { 8501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> list = Collections.emptyList(); 8511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 8521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterables.getLast(list); 8531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 8541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NoSuchElementException e) {} 8551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testGetLast_sortedSet() { 8581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> sortedSet = ImmutableSortedSet.of("b", "c", "a"); 8591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("c", Iterables.getLast(sortedSet)); 8601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testGetLast_withDefault_singleton() { 8631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> iterable = Collections.singletonList("foo"); 8641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("foo", Iterables.getLast(iterable, "bar")); 8651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testGetLast_withDefault_empty() { 8681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> iterable = Collections.emptyList(); 8691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("bar", Iterables.getLast(iterable, "bar")); 8701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testGetLast_withDefault_empty_null() { 8731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> iterable = Collections.emptyList(); 8741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertNull(Iterables.getLast(iterable, null)); 8751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testGetLast_withDefault_multiple() { 8781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> iterable = asList("foo", "bar"); 8791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("bar", Iterables.getLast(iterable, "qux")); 8801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /** 8831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * {@link ArrayList} extension that forbids the use of 8841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * {@link Collection#iterator} for tests that need to prove that it isn't 8851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * called. 8861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 8871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static class DiesOnIteratorArrayList extends ArrayList<String> { 8881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /** 8891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * @throws UnsupportedOperationException all the time 8901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 8911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override 8921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public Iterator<String> iterator() { 8931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert throw new UnsupportedOperationException(); 8941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testGetLast_withDefault_not_empty_list() { 8981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // TODO: verify that this is the best testing strategy. 8991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> diesOnIteratorList = new DiesOnIteratorArrayList(); 9001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert diesOnIteratorList.add("bar"); 9011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 9021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("bar", Iterables.getLast(diesOnIteratorList, "qux")); 9031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 9041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 9051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /** 9061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * {@link TreeSet} extension that forbids the use of 9071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * {@link Collection#iterator} for tests that need to prove that it isn't 9081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * called. 9091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 9101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static final class DiesOnIteratorTreeSet extends TreeSet<String> { 9111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /** 9121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * @throws UnsupportedOperationException all the time 9131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 9141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override 9151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public Iterator<String> iterator() { 9161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert throw new UnsupportedOperationException(); 9171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 9181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 9191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 9201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testGetLast_withDefault_not_empty_sortedSet() { 9211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // TODO: verify that this is the best testing strategy. 9221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> diesOnIteratorSortedSet = new DiesOnIteratorTreeSet(); 9231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert diesOnIteratorSortedSet.add("bar"); 9241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 9251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("bar", Iterables.getLast(diesOnIteratorSortedSet, "qux")); 9261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 9271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 9281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testGetLast_emptySortedSet() { 9291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> sortedSet = ImmutableSortedSet.of(); 9301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 9311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterables.getLast(sortedSet); 9321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 9331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NoSuchElementException e) {} 9341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 9351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 9361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testGetLast_iterable() { 9371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Set<String> set = ImmutableSet.of("a", "b", "c"); 9381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("c", Iterables.getLast(set)); 9391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 9401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 9411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testGetLast_emptyIterable() { 9421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Set<String> set = Sets.newHashSet(); 9431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 9441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterables.getLast(set); 9451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 9461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NoSuchElementException e) {} 9471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 9481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 9491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testUnmodifiableIterable() { 9501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> list = newArrayList("a", "b", "c"); 9511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> iterable = Iterables.unmodifiableIterable(list); 9521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> iterator = iterable.iterator(); 9531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert iterator.next(); 9541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 9551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert iterator.remove(); 9561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 9571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (UnsupportedOperationException expected) {} 9581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("[a, b, c]", iterable.toString()); 9591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 9601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 9611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @SuppressWarnings("deprecation") // test of deprecated method 9621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testUnmodifiableIterableShortCircuit() { 9631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> list = newArrayList("a", "b", "c"); 9641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> iterable = Iterables.unmodifiableIterable(list); 9651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> iterable2 = Iterables.unmodifiableIterable(iterable); 9661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(iterable, iterable2); 9671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableList<String> immutableList = ImmutableList.of("a", "b", "c"); 9681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(immutableList, Iterables.unmodifiableIterable(immutableList)); 9691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(immutableList, 9701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterables.unmodifiableIterable((List<String>) immutableList)); 9711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 9721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 9731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testFrequency_multiset() { 9741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multiset<String> multiset 9751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = ImmutableMultiset.of("a", "b", "a", "c", "b", "a"); 9761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(3, Iterables.frequency(multiset, "a")); 9771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(2, Iterables.frequency(multiset, "b")); 9781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(1, Iterables.frequency(multiset, "c")); 9791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0, Iterables.frequency(multiset, "d")); 9801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0, Iterables.frequency(multiset, 4.2)); 9811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0, Iterables.frequency(multiset, null)); 9821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 9831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 9841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testFrequency_set() { 9851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Set<String> set = Sets.newHashSet("a", "b", "c"); 9861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(1, Iterables.frequency(set, "a")); 9871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(1, Iterables.frequency(set, "b")); 9881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(1, Iterables.frequency(set, "c")); 9891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0, Iterables.frequency(set, "d")); 9901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0, Iterables.frequency(set, 4.2)); 9911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0, Iterables.frequency(set, null)); 9921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 9931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 9941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testFrequency_list() { 9951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> list = newArrayList("a", "b", "a", "c", "b", "a"); 9961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(3, Iterables.frequency(list, "a")); 9971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(2, Iterables.frequency(list, "b")); 9981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(1, Iterables.frequency(list, "c")); 9991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0, Iterables.frequency(list, "d")); 10001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0, Iterables.frequency(list, 4.2)); 10011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0, Iterables.frequency(list, null)); 10021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 10031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 10041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testRemoveAll_collection() { 10051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> list = newArrayList("a", "b", "c", "d", "e"); 10061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(Iterables.removeAll(list, newArrayList("b", "d", "f"))); 10071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(newArrayList("a", "c", "e"), list); 10081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(Iterables.removeAll(list, newArrayList("x", "y", "z"))); 10091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(newArrayList("a", "c", "e"), list); 10101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 10111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 10121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testRemoveAll_iterable() { 10131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert final List<String> list = newArrayList("a", "b", "c", "d", "e"); 10141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> iterable = new Iterable<String>() { 10151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override 10161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public Iterator<String> iterator() { 10171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return list.iterator(); 10181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 10191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }; 10201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(Iterables.removeAll(iterable, newArrayList("b", "d", "f"))); 10211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(newArrayList("a", "c", "e"), list); 10221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(Iterables.removeAll(iterable, newArrayList("x", "y", "z"))); 10231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(newArrayList("a", "c", "e"), list); 10241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 10251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 10261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testRetainAll_collection() { 10271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> list = newArrayList("a", "b", "c", "d", "e"); 10281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(Iterables.retainAll(list, newArrayList("b", "d", "f"))); 10291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(newArrayList("b", "d"), list); 10301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(Iterables.retainAll(list, newArrayList("b", "e", "d"))); 10311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(newArrayList("b", "d"), list); 10321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 10331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 10341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testRetainAll_iterable() { 10351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert final List<String> list = newArrayList("a", "b", "c", "d", "e"); 10361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> iterable = new Iterable<String>() { 10371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override 10381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public Iterator<String> iterator() { 10391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return list.iterator(); 10401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 10411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }; 10421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(Iterables.retainAll(iterable, newArrayList("b", "d", "f"))); 10431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(newArrayList("b", "d"), list); 10441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(Iterables.retainAll(iterable, newArrayList("b", "e", "d"))); 10451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(newArrayList("b", "d"), list); 10461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 10471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 10481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testRemoveIf_randomAccess() { 10491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> list = newArrayList("a", "b", "c", "d", "e"); 10501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(Iterables.removeIf(list, 10511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new Predicate<String>() { 10521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override 10531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public boolean apply(String s) { 10541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return s.equals("b") || s.equals("d") || s.equals("f"); 10551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 10561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert })); 10571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(newArrayList("a", "c", "e"), list); 10581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(Iterables.removeIf(list, 10591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new Predicate<String>() { 10601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override 10611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public boolean apply(String s) { 10621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return s.equals("x") || s.equals("y") || s.equals("z"); 10631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 10641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert })); 10651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(newArrayList("a", "c", "e"), list); 10661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 10671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 10681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testRemoveIf_transformedList() { 10691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> list = newArrayList("1", "2", "3", "4", "5"); 10701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<Integer> transformed = Lists.transform(list, 10711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new Function<String, Integer>() { 10721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override 10731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public Integer apply(String s) { 10741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Integer.valueOf(s); 10751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 10761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }); 10771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(Iterables.removeIf(transformed, 10781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new Predicate<Integer>() { 10791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override 10801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public boolean apply(Integer n) { 10811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return (n & 1) == 0; // isEven() 10821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 10831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert })); 10841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(newArrayList("1", "3", "5"), list); 10851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(Iterables.removeIf(transformed, 10861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new Predicate<Integer>() { 10871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override 10881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public boolean apply(Integer n) { 10891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return (n & 1) == 0; // isEven() 10901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 10911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert })); 10921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(newArrayList("1", "3", "5"), list); 10931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 10941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 10951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testRemoveIf_noRandomAccess() { 10961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> list = Lists.newLinkedList(asList("a", "b", "c", "d", "e")); 10971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(Iterables.removeIf(list, 10981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new Predicate<String>() { 10991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override 11001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public boolean apply(String s) { 11011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return s.equals("b") || s.equals("d") || s.equals("f"); 11021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 11031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert })); 11041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(newArrayList("a", "c", "e"), list); 11051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(Iterables.removeIf(list, 11061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new Predicate<String>() { 11071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override 11081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public boolean apply(String s) { 11091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return s.equals("x") || s.equals("y") || s.equals("z"); 11101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 11111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert })); 11121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(newArrayList("a", "c", "e"), list); 11131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 11141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 11151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // The Maps returned by Maps.filterEntries(), Maps.filterKeys(), and 11161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Maps.filterValues() are not tested with removeIf() since Maps are not 11171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Iterable. Those returned by Iterators.filter() and Iterables.filter() 11181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // are not tested because they are unmodifiable. 11191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 11201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testIterableWithToString() { 11211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("[]", create().toString()); 11221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("[a]", create("a").toString()); 11231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("[a, b, c]", create("a", "b", "c").toString()); 11241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("[c, a, a]", create("c", "a", "a").toString()); 11251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 11261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 11271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testIterableWithToStringNull() { 11281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("[null]", create((String) null).toString()); 11291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("[null, null]", create(null, null).toString()); 11301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("[, null, a]", create("", null, "a").toString()); 11311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 11321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 11331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /** Returns a new iterable over the specified strings. */ 11341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static Iterable<String> create(String... strings) { 11351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert final List<String> list = asList(strings); 11361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return new Iterables.IterableWithToString<String>() { 11371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override 11381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public Iterator<String> iterator() { 11391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return list.iterator(); 11401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 11411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }; 11421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 11431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 11441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testConsumingIterable() { 11451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Test data 11461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> list = Lists.newArrayList(asList("a", "b")); 11471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 11481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Test & Verify 11491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> consumingIterable = Iterables.consumingIterable(list); 11501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> consumingIterator = consumingIterable.iterator(); 11511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 11521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(list).hasContentsInOrder("a", "b"); 11531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 11541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(consumingIterator.hasNext()); 11551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(list).hasContentsInOrder("a", "b"); 11561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("a", consumingIterator.next()); 11571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(list).hasContentsInOrder("b"); 11581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 11591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(consumingIterator.hasNext()); 11601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("b", consumingIterator.next()); 11611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(list).isEmpty(); 11621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 11631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(consumingIterator.hasNext()); 11641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 11651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 11661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("?") 11671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // TODO: Figure out why this is failing in GWT. 11681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testConsumingIterable_duelingIterators() { 11691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Test data 11701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> list = Lists.newArrayList(asList("a", "b")); 11711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 11721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Test & Verify 11731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> i1 = Iterables.consumingIterable(list).iterator(); 11741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> i2 = Iterables.consumingIterable(list).iterator(); 11751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 11761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert i1.next(); 11771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 11781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert i2.next(); 11791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail("Concurrent modification should throw an exception."); 11801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (ConcurrentModificationException cme) { 11811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Pass 11821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 11831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 11841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 11851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testConsumingIterable_queue_iterator() { 11861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert final List<Integer> items = ImmutableList.of(4, 8, 15, 16, 23, 42); 11871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new IteratorTester<Integer>( 11881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3, 11891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert UNMODIFIABLE, 11901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert items, 11911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert IteratorTester.KnownOrder.KNOWN_ORDER) { 11921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Iterator<Integer> newTargetIterator() { 11931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Iterables.consumingIterable(Lists.newLinkedList(items)) 11941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .iterator(); 11951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 11961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }.test(); 11971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 11981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 11991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testConsumingIterable_queue_removesFromQueue() { 12001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Queue<Integer> queue = Lists.newLinkedList(asList(5, 14)); 12011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 12021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<Integer> consumingIterator = 12031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterables.consumingIterable(queue).iterator(); 12041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 12051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(5, queue.peek().intValue()); 12061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(5, consumingIterator.next().intValue()); 12071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 12081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(14, queue.peek().intValue()); 12091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(consumingIterator.hasNext()); 12101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(queue.isEmpty()); 12111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 12121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 12131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testConsumingIterable_noIteratorCall() { 12141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Queue<Integer> queue = 12151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new UnIterableQueue<Integer>(Lists.newLinkedList(asList(5, 14))); 12161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 12171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<Integer> consumingIterator = 12181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterables.consumingIterable(queue).iterator(); 12191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /* 12201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Make sure that we can get an element off without calling 12211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * UnIterableQueue.iterator(). 12221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 12231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(5, consumingIterator.next().intValue()); 12241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 12251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 12261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static class UnIterableQueue<T> extends ForwardingQueue<T> { 12271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private Queue<T> queue; 12281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 12291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert UnIterableQueue(Queue<T> queue) { 12301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert this.queue = queue; 12311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 12321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 12331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public Iterator<T> iterator() { 12341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert throw new UnsupportedOperationException(); 12351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 12361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 12371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Queue<T> delegate() { 12381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return queue; 12391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 12401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 12411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 12421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testIndexOf_empty() { 12431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> list = new ArrayList<String>(); 12441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(-1, Iterables.indexOf(list, Predicates.equalTo(""))); 12451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 12461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 12471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testIndexOf_oneElement() { 12481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> list = Lists.newArrayList("bob"); 12491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0, Iterables.indexOf(list, Predicates.equalTo("bob"))); 12501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(-1, Iterables.indexOf(list, Predicates.equalTo("jack"))); 12511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 12521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 12531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testIndexOf_twoElements() { 12541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> list = Lists.newArrayList("mary", "bob"); 12551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0, Iterables.indexOf(list, Predicates.equalTo("mary"))); 12561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(1, Iterables.indexOf(list, Predicates.equalTo("bob"))); 12571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(-1, Iterables.indexOf(list, Predicates.equalTo("jack"))); 12581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 12591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 12601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testIndexOf_withDuplicates() { 12611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> list = 12621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Lists.newArrayList("mary", "bob", "bob", "bob", "sam"); 12631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0, Iterables.indexOf(list, Predicates.equalTo("mary"))); 12641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(1, Iterables.indexOf(list, Predicates.equalTo("bob"))); 12651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(4, Iterables.indexOf(list, Predicates.equalTo("sam"))); 12661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(-1, Iterables.indexOf(list, Predicates.equalTo("jack"))); 12671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 12681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 12691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static final Predicate<CharSequence> STARTSWITH_A = 12701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new Predicate<CharSequence>() { 12711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public boolean apply(CharSequence input) { 12721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return (input.length() > 0) && (input.charAt(0) == 'a'); 12731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 12741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }; 12751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 12761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testIndexOf_genericPredicate() { 12771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<CharSequence> sequences = Lists.newArrayList(); 12781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert sequences.add("bob"); 12791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert sequences.add(new StringBuilder("charlie")); 12801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert sequences.add(new StringBuffer("henry")); 12811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert sequences.add(new StringBuilder("apple")); 12821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert sequences.add("lemon"); 12831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 12841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(3, Iterables.indexOf(sequences, STARTSWITH_A)); 12851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 12861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 12871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testIndexOf_genericPredicate2() { 12881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> sequences = 12891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Lists.newArrayList("bob", "charlie", "henry", "apple", "lemon"); 12901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(3, Iterables.indexOf(sequences, STARTSWITH_A)); 12911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 12921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 12931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testMergeSorted_empty() { 12941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Setup 12951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<Iterable<Integer>> elements = ImmutableList.of(); 12961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 12971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Test 12981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<Integer> iterable = 12991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterables.mergeSorted(elements, Ordering.natural()); 13001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 13011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Verify 13021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<Integer> iterator = iterable.iterator(); 13031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(iterator.hasNext()); 13041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 13051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert iterator.next(); 13061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail("next() on empty iterator should throw NoSuchElementException"); 13071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NoSuchElementException e) { 13081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Huzzah! 13091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 13101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 13111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 13121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testMergeSorted_single_empty() { 13131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Setup 13141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<Integer> iterable0 = ImmutableList.of(); 13151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<Iterable<Integer>> iterables = ImmutableList.of(iterable0); 13161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 13171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Test & Verify 13181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert verifyMergeSorted(iterables, ImmutableList.<Integer>of()); 13191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 13201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 13211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testMergeSorted_single() { 13221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Setup 13231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<Integer> iterable0 = ImmutableList.of(1, 2, 3); 13241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<Iterable<Integer>> iterables = ImmutableList.of(iterable0); 13251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 13261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Test & Verify 13271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert verifyMergeSorted(iterables, iterable0); 13281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 13291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 13301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testMergeSorted_pyramid() { 13311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<Iterable<Integer>> iterables = Lists.newLinkedList(); 13321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<Integer> allIntegers = Lists.newArrayList(); 13331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 13341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Creates iterators like: {{}, {0}, {0, 1}, {0, 1, 2}, ...} 13351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (int i = 0; i < 10; i++) { 13361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<Integer> list = Lists.newLinkedList(); 13371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (int j = 0; j < i; j++) { 13381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert list.add(j); 13391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert allIntegers.add(j); 13401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 13411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert iterables.add(Ordering.natural().sortedCopy(list)); 13421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 13431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 13441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert verifyMergeSorted(iterables, allIntegers); 13451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 13461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 13471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Like the pyramid, but creates more unique values, along with repeated ones. 13481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testMergeSorted_skipping_pyramid() { 13491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<Iterable<Integer>> iterables = Lists.newLinkedList(); 13501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<Integer> allIntegers = Lists.newArrayList(); 13511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 13521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (int i = 0; i < 20; i++) { 13531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<Integer> list = Lists.newLinkedList(); 13541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (int j = 0; j < i; j++) { 13551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert list.add(j * i); 13561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert allIntegers.add(j * i); 13571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 13581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert iterables.add(Ordering.natural().sortedCopy(list)); 13591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 13601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 13611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert verifyMergeSorted(iterables, allIntegers); 13621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 13631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 13641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private void verifyMergeSorted(Iterable<Iterable<Integer>> iterables, 13651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<Integer> unsortedExpected) { 13661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<Integer> expected = 13671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Ordering.natural().sortedCopy(unsortedExpected); 13681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 13691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<Integer> mergedIterator = 13701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterables.mergeSorted(iterables, Ordering.natural()); 13711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 13721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Lists.newLinkedList(expected), 13731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Lists.newLinkedList(mergedIterator)); 13741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 13751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert} 1376