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.Iterators.get; 201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static com.google.common.collect.Iterators.getLast; 211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static com.google.common.collect.Iterators.skip; 221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static com.google.common.collect.Lists.newArrayList; 231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static com.google.common.collect.testing.IteratorFeature.MODIFIABLE; 241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static com.google.common.collect.testing.IteratorFeature.UNMODIFIABLE; 251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static java.util.Arrays.asList; 261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static java.util.Collections.singleton; 271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static org.junit.contrib.truth.Truth.ASSERT; 281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.annotations.GwtCompatible; 301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.annotations.GwtIncompatible; 311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.base.Function; 321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.base.Predicate; 331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.base.Predicates; 341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.IteratorFeature; 351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.IteratorTester; 361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.ListTestSuiteBuilder; 371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.TestStringListGenerator; 381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.features.CollectionFeature; 391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.features.CollectionSize; 401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.features.ListFeature; 411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.testing.NullPointerTester; 421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport junit.framework.Test; 441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport junit.framework.TestCase; 451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport junit.framework.TestSuite; 461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.ArrayList; 481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Arrays; 491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Collection; 501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Collections; 511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.ConcurrentModificationException; 521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Enumeration; 531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Iterator; 541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.List; 551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.NoSuchElementException; 561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.RandomAccess; 571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Set; 581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Vector; 591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/** 611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Unit test for {@code Iterators}. 621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * @author Kevin Bourrillion 641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert@GwtCompatible(emulated = true) 661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertpublic class IteratorsTest extends TestCase { 671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("suite") 691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static Test suite() { 701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert TestSuite suite = new TestSuite(IteratorsTest.class.getSimpleName()); 711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTest(testsForRemoveAllAndRetainAll()); 721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTestSuite(IteratorsTest.class); 731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return suite; 741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testEmptyIterator() { 771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> iterator = Iterators.emptyIterator(); 781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(iterator.hasNext()); 791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert iterator.next(); 811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail("no exception thrown"); 821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NoSuchElementException expected) { 831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert iterator.remove(); 861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail("no exception thrown"); 871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (UnsupportedOperationException expected) { 881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testSize0() { 921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> iterator = Iterators.emptyIterator(); 931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0, Iterators.size(iterator)); 941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testSize1() { 971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<Integer> iterator = Collections.singleton(0).iterator(); 981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(1, Iterators.size(iterator)); 991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testSize_partiallyConsumed() { 1021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<Integer> iterator = asList(1, 2, 3, 4, 5).iterator(); 1031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert iterator.next(); 1041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert iterator.next(); 1051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(3, Iterators.size(iterator)); 1061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void test_contains_nonnull_yes() { 1091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> set = asList("a", null, "b").iterator(); 1101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(Iterators.contains(set, "b")); 1111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void test_contains_nonnull_no() { 1141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> set = asList("a", "b").iterator(); 1151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(Iterators.contains(set, "c")); 1161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void test_contains_null_yes() { 1191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> set = asList("a", null, "b").iterator(); 1201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(Iterators.contains(set, null)); 1211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void test_contains_null_no() { 1241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> set = asList("a", "b").iterator(); 1251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(Iterators.contains(set, null)); 1261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testGetOnlyElement_noDefault_valid() { 1291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> iterator = Collections.singletonList("foo").iterator(); 1301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("foo", Iterators.getOnlyElement(iterator)); 1311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testGetOnlyElement_noDefault_empty() { 1341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> iterator = Iterators.emptyIterator(); 1351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 1361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterators.getOnlyElement(iterator); 1371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 1381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NoSuchElementException expected) { 1391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testGetOnlyElement_noDefault_moreThanOneLessThanFiveElements() { 1431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> iterator = asList("one", "two").iterator(); 1441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 1451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterators.getOnlyElement(iterator); 1461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 1471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IllegalArgumentException expected) { 1481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("expected one element but was: <one, two>", 1491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expected.getMessage()); 1501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testGetOnlyElement_noDefault_fiveElements() { 1541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> iterator = 1551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert asList("one", "two", "three", "four", "five").iterator(); 1561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 1571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterators.getOnlyElement(iterator); 1581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 1591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IllegalArgumentException expected) { 1601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("expected one element but was: " 1611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert + "<one, two, three, four, five>", 1621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expected.getMessage()); 1631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testGetOnlyElement_noDefault_moreThanFiveElements() { 1671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> iterator = 1681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert asList("one", "two", "three", "four", "five", "six").iterator(); 1691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 1701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterators.getOnlyElement(iterator); 1711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 1721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IllegalArgumentException expected) { 1731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("expected one element but was: " 1741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert + "<one, two, three, four, five, ...>", 1751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expected.getMessage()); 1761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testGetOnlyElement_withDefault_singleton() { 1801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> iterator = Collections.singletonList("foo").iterator(); 1811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("foo", Iterators.getOnlyElement(iterator, "bar")); 1821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testGetOnlyElement_withDefault_empty() { 1851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> iterator = Iterators.emptyIterator(); 1861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("bar", Iterators.getOnlyElement(iterator, "bar")); 1871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testGetOnlyElement_withDefault_empty_null() { 1901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> iterator = Iterators.emptyIterator(); 1911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertNull(Iterators.getOnlyElement(iterator, null)); 1921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testGetOnlyElement_withDefault_two() { 1951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> iterator = asList("foo", "bar").iterator(); 1961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 1971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterators.getOnlyElement(iterator, "x"); 1981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 1991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IllegalArgumentException expected) { 2001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("expected one element but was: <foo, bar>", 2011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expected.getMessage()); 2021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("Iterators.toArray(Iterator, Class)") 2061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testToArrayEmpty() { 2071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> iterator = Collections.<String>emptyList().iterator(); 2081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String[] array = Iterators.toArray(iterator, String.class); 2091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(Arrays.equals(new String[0], array)); 2101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("Iterators.toArray(Iterator, Class)") 2131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testToArraySingleton() { 2141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> iterator = Collections.singletonList("a").iterator(); 2151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String[] array = Iterators.toArray(iterator, String.class); 2161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(Arrays.equals(new String[] { "a" }, array)); 2171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("Iterators.toArray(Iterator, Class)") 2201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testToArray() { 2211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String[] sourceArray = new String[] {"a", "b", "c"}; 2221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> iterator = asList(sourceArray).iterator(); 2231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String[] newArray = Iterators.toArray(iterator, String.class); 2241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(Arrays.equals(sourceArray, newArray)); 2251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testFilterSimple() { 2281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> unfiltered = Lists.newArrayList("foo", "bar").iterator(); 2291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> filtered = Iterators.filter(unfiltered, 2301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Predicates.equalTo("foo")); 2311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> expected = Collections.singletonList("foo"); 2321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> actual = Lists.newArrayList(filtered); 2331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(expected, actual); 2341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testFilterNoMatch() { 2371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> unfiltered = Lists.newArrayList("foo", "bar").iterator(); 2381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> filtered = Iterators.filter(unfiltered, 2391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Predicates.alwaysFalse()); 2401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> expected = Collections.emptyList(); 2411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> actual = Lists.newArrayList(filtered); 2421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(expected, actual); 2431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testFilterMatchAll() { 2461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> unfiltered = Lists.newArrayList("foo", "bar").iterator(); 2471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> filtered = Iterators.filter(unfiltered, 2481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Predicates.alwaysTrue()); 2491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> expected = Lists.newArrayList("foo", "bar"); 2501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> actual = Lists.newArrayList(filtered); 2511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(expected, actual); 2521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testFilterNothing() { 2551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> unfiltered = Collections.<String>emptyList().iterator(); 2561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> filtered = Iterators.filter(unfiltered, 2571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new Predicate<String>() { 2581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override 2591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public boolean apply(String s) { 2601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail("Should never be evaluated"); 2611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return false; 2621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }); 2641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> expected = Collections.emptyList(); 2661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> actual = Lists.newArrayList(filtered); 2671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(expected, actual); 2681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("unreasonable slow") 2711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testFilterUsingIteratorTester() { 2721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert final List<Integer> list = asList(1, 2, 3, 4, 5); 2731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert final Predicate<Integer> isEven = new Predicate<Integer>() { 2741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override 2751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public boolean apply(Integer integer) { 2761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return integer % 2 == 0; 2771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }; 2791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new IteratorTester<Integer>(5, UNMODIFIABLE, asList(2, 4), 2801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert IteratorTester.KnownOrder.KNOWN_ORDER) { 2811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Iterator<Integer> newTargetIterator() { 2821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Iterators.filter(list.iterator(), isEven); 2831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }.test(); 2851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testAny() { 2881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> list = Lists.newArrayList(); 2891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Predicate<String> predicate = Predicates.equalTo("pants"); 2901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(Iterators.any(list.iterator(), predicate)); 2921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert list.add("cool"); 2931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(Iterators.any(list.iterator(), predicate)); 2941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert list.add("pants"); 2951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(Iterators.any(list.iterator(), predicate)); 2961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testAll() { 2991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> list = Lists.newArrayList(); 3001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Predicate<String> predicate = Predicates.equalTo("cool"); 3011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(Iterators.all(list.iterator(), predicate)); 3031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert list.add("cool"); 3041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(Iterators.all(list.iterator(), predicate)); 3051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert list.add("pants"); 3061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(Iterators.all(list.iterator(), predicate)); 3071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testFind_firstElement() { 3101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> list = Lists.newArrayList("cool", "pants"); 3111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> iterator = list.iterator(); 3121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("cool", Iterators.find(iterator, Predicates.equalTo("cool"))); 3131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("pants", iterator.next()); 3141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testFind_lastElement() { 3171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> list = Lists.newArrayList("cool", "pants"); 3181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> iterator = list.iterator(); 3191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("pants", Iterators.find(iterator, 3201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Predicates.equalTo("pants"))); 3211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(iterator.hasNext()); 3221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testFind_notPresent() { 3251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> list = Lists.newArrayList("cool", "pants"); 3261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> iterator = list.iterator(); 3271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 3281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterators.find(iterator, Predicates.alwaysFalse()); 3291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 3301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NoSuchElementException e) { 3311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(iterator.hasNext()); 3331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testFind_matchAlways() { 3361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> list = Lists.newArrayList("cool", "pants"); 3371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> iterator = list.iterator(); 3381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("cool", Iterators.find(iterator, Predicates.alwaysTrue())); 3391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testFind_withDefault_first() { 3421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> list = Lists.newArrayList("cool", "pants"); 3431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> iterator = list.iterator(); 3441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("cool", 3451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterators.find(iterator, Predicates.equalTo("cool"), "woot")); 3461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("pants", iterator.next()); 3471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testFind_withDefault_last() { 3501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> list = Lists.newArrayList("cool", "pants"); 3511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> iterator = list.iterator(); 3521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("pants", 3531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterators.find(iterator, Predicates.equalTo("pants"), "woot")); 3541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(iterator.hasNext()); 3551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testFind_withDefault_notPresent() { 3581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> list = Lists.newArrayList("cool", "pants"); 3591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> iterator = list.iterator(); 3601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("woot", 3611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterators.find(iterator, Predicates.alwaysFalse(), "woot")); 3621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(iterator.hasNext()); 3631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testFind_withDefault_notPresent_nullReturn() { 3661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> list = Lists.newArrayList("cool", "pants"); 3671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> iterator = list.iterator(); 3681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertNull( 3691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterators.find(iterator, Predicates.alwaysFalse(), null)); 3701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(iterator.hasNext()); 3711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testFind_withDefault_matchAlways() { 3741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> list = Lists.newArrayList("cool", "pants"); 3751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> iterator = list.iterator(); 3761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("cool", 3771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterators.find(iterator, Predicates.alwaysTrue(), "woot")); 3781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("pants", iterator.next()); 3791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testTryFind_firstElement() { 3821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> list = Lists.newArrayList("cool", "pants"); 3831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> iterator = list.iterator(); 3841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("cool", 3851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterators.tryFind(iterator, Predicates.equalTo("cool")).get()); 3861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testTryFind_lastElement() { 3891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> list = Lists.newArrayList("cool", "pants"); 3901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> iterator = list.iterator(); 3911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("pants", 3921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterators.tryFind(iterator, Predicates.equalTo("pants")).get()); 3931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testTryFind_alwaysTrue() { 3961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> list = Lists.newArrayList("cool", "pants"); 3971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> iterator = list.iterator(); 3981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("cool", 3991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterators.tryFind(iterator, Predicates.alwaysTrue()).get()); 4001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testTryFind_alwaysFalse_orDefault() { 4031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> list = Lists.newArrayList("cool", "pants"); 4041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> iterator = list.iterator(); 4051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("woot", 4061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterators.tryFind(iterator, Predicates.alwaysFalse()).or("woot")); 4071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(iterator.hasNext()); 4081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testTryFind_alwaysFalse_isPresent() { 4111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> list = Lists.newArrayList("cool", "pants"); 4121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> iterator = list.iterator(); 4131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse( 4141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterators.tryFind(iterator, Predicates.alwaysFalse()).isPresent()); 4151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(iterator.hasNext()); 4161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testTransform() { 4191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> input = asList("1", "2", "3").iterator(); 4201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<Integer> result = Iterators.transform(input, 4211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new Function<String, Integer>() { 4221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override 4231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public Integer apply(String from) { 4241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Integer.valueOf(from); 4251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }); 4271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<Integer> actual = Lists.newArrayList(result); 4291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<Integer> expected = asList(1, 2, 3); 4301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(expected, actual); 4311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testTransformRemove() { 4341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> list = Lists.newArrayList("1", "2", "3"); 4351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> input = list.iterator(); 4361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<Integer> iterator = Iterators.transform(input, 4371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new Function<String, Integer>() { 4381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override 4391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public Integer apply(String from) { 4401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Integer.valueOf(from); 4411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }); 4431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Integer.valueOf(1), iterator.next()); 4451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Integer.valueOf(2), iterator.next()); 4461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert iterator.remove(); 4471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(asList("1", "3"), list); 4481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testPoorlyBehavedTransform() { 4511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> input = asList("1", null, "3").iterator(); 4521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<Integer> result = Iterators.transform(input, 4531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new Function<String, Integer>() { 4541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override 4551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public Integer apply(String from) { 4561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Integer.valueOf(from); 4571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }); 4591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert result.next(); 4611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 4621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert result.next(); 4631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail("Expected NFE"); 4641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NumberFormatException nfe) { 4651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Expected to fail. 4661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testNullFriendlyTransform() { 4701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<Integer> input = asList(1, 2, null, 3).iterator(); 4711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> result = Iterators.transform(input, 4721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new Function<Integer, String>() { 4731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override 4741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public String apply(Integer from) { 4751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return String.valueOf(from); 4761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }); 4781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> actual = Lists.newArrayList(result); 4801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> expected = asList("1", "2", "null", "3"); 4811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(expected, actual); 4821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCycleOfEmpty() { 4851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // "<String>" for javac 1.5. 4861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> cycle = Iterators.<String>cycle(); 4871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(cycle.hasNext()); 4881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCycleOfOne() { 4911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> cycle = Iterators.cycle("a"); 4921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (int i = 0; i < 3; i++) { 4931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(cycle.hasNext()); 4941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("a", cycle.next()); 4951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCycleOfOneWithRemove() { 4991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> iterable = Lists.newArrayList("a"); 5001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> cycle = Iterators.cycle(iterable); 5011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(cycle.hasNext()); 5021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("a", cycle.next()); 5031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert cycle.remove(); 5041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Collections.emptyList(), iterable); 5051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(cycle.hasNext()); 5061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCycleOfTwo() { 5091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> cycle = Iterators.cycle("a", "b"); 5101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (int i = 0; i < 3; i++) { 5111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(cycle.hasNext()); 5121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("a", cycle.next()); 5131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(cycle.hasNext()); 5141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("b", cycle.next()); 5151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCycleOfTwoWithRemove() { 5191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> iterable = Lists.newArrayList("a", "b"); 5201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> cycle = Iterators.cycle(iterable); 5211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(cycle.hasNext()); 5221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("a", cycle.next()); 5231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(cycle.hasNext()); 5241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("b", cycle.next()); 5251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(cycle.hasNext()); 5261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("a", cycle.next()); 5271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert cycle.remove(); 5281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Collections.singletonList("b"), iterable); 5291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(cycle.hasNext()); 5301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("b", cycle.next()); 5311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(cycle.hasNext()); 5321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("b", cycle.next()); 5331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert cycle.remove(); 5341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Collections.emptyList(), iterable); 5351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(cycle.hasNext()); 5361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCycleRemoveWithoutNext() { 5391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> cycle = Iterators.cycle("a", "b"); 5401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(cycle.hasNext()); 5411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 5421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert cycle.remove(); 5431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail("no exception thrown"); 5441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IllegalStateException expected) { 5451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCycleRemoveSameElementTwice() { 5491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> cycle = Iterators.cycle("a", "b"); 5501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert cycle.next(); 5511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert cycle.remove(); 5521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 5531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert cycle.remove(); 5541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail("no exception thrown"); 5551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IllegalStateException expected) { 5561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCycleWhenRemoveIsNotSupported() { 5601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> iterable = asList("a", "b"); 5611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> cycle = Iterators.cycle(iterable); 5621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert cycle.next(); 5631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 5641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert cycle.remove(); 5651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail("no exception thrown"); 5661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (UnsupportedOperationException expected) { 5671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCycleRemoveAfterHasNext() { 5711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> iterable = Lists.newArrayList("a"); 5721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> cycle = Iterators.cycle(iterable); 5731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(cycle.hasNext()); 5741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("a", cycle.next()); 5751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(cycle.hasNext()); 5761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert cycle.remove(); 5771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Collections.emptyList(), iterable); 5781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(cycle.hasNext()); 5791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCycleNoSuchElementException() { 5821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> iterable = Lists.newArrayList("a"); 5831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> cycle = Iterators.cycle(iterable); 5841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(cycle.hasNext()); 5851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("a", cycle.next()); 5861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert cycle.remove(); 5871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(cycle.hasNext()); 5881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 5891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert cycle.next(); 5901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 5911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NoSuchElementException expected) {} 5921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("unreasonable slow") 5951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCycleUsingIteratorTester() { 5961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new IteratorTester<Integer>(5, UNMODIFIABLE, asList(1, 2, 1, 2, 1, 5971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2, 1, 2, 1, 2, 1, 2), IteratorTester.KnownOrder.KNOWN_ORDER) { 5981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Iterator<Integer> newTargetIterator() { 5991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Iterators.cycle(asList(1, 2)); 6001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }.test(); 6021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("slow (~5s)") 6051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testConcatNoIteratorsYieldsEmpty() { 6061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new EmptyIteratorTester() { 6071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @SuppressWarnings("unchecked") 6081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Iterator<Integer> newTargetIterator() { 6091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Iterators.concat(); 6101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }.test(); 6121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("slow (~5s)") 6151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testConcatOneEmptyIteratorYieldsEmpty() { 6161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new EmptyIteratorTester() { 6171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @SuppressWarnings("unchecked") 6181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Iterator<Integer> newTargetIterator() { 6191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Iterators.concat(iterateOver()); 6201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }.test(); 6221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("slow (~5s)") 6251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testConcatMultipleEmptyIteratorsYieldsEmpty() { 6261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new EmptyIteratorTester() { 6271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Iterator<Integer> newTargetIterator() { 6281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Iterators.concat(iterateOver(), iterateOver()); 6291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }.test(); 6311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("slow (~3s)") 6341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testConcatSingletonYieldsSingleton() { 6351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new SingletonIteratorTester() { 6361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @SuppressWarnings("unchecked") 6371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Iterator<Integer> newTargetIterator() { 6381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Iterators.concat(iterateOver(1)); 6391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }.test(); 6411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("slow (~5s)") 6441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testConcatEmptyAndSingletonAndEmptyYieldsSingleton() { 6451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new SingletonIteratorTester() { 6461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Iterator<Integer> newTargetIterator() { 6471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Iterators.concat(iterateOver(), iterateOver(1), iterateOver()); 6481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }.test(); 6501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("fairly slow (~40s)") 6531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testConcatSingletonAndSingletonYieldsDoubleton() { 6541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new DoubletonIteratorTester() { 6551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Iterator<Integer> newTargetIterator() { 6561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Iterators.concat(iterateOver(1), iterateOver(2)); 6571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }.test(); 6591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("fairly slow (~40s)") 6621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testConcatSingletonAndSingletonWithEmptiesYieldsDoubleton() { 6631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new DoubletonIteratorTester() { 6641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Iterator<Integer> newTargetIterator() { 6651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Iterators.concat( 6661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert iterateOver(1), iterateOver(), iterateOver(), iterateOver(2)); 6671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }.test(); 6691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("fairly slow (~50s)") 6721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testConcatUnmodifiable() { 6731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new IteratorTester<Integer>(5, UNMODIFIABLE, asList(1, 2), 6741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert IteratorTester.KnownOrder.KNOWN_ORDER) { 6751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Iterator<Integer> newTargetIterator() { 6761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Iterators.concat(asList(1).iterator(), 6771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Arrays.<Integer>asList().iterator(), asList(2).iterator()); 6781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }.test(); 6801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /** 6831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Illustrates the somewhat bizarre behavior when a null is passed in. 6841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 6851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testConcatContainingNull() { 6861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @SuppressWarnings("unchecked") 6871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<Iterator<Integer>> input 6881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = asList(iterateOver(1, 2), null, iterateOver(3)).iterator(); 6891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<Integer> result = Iterators.concat(input); 6901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(1, (int) result.next()); 6911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(2, (int) result.next()); 6921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 6931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert result.hasNext(); 6941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail("no exception thrown"); 6951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NullPointerException e) { 6961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 6981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert result.next(); 6991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail("no exception thrown"); 7001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NullPointerException e) { 7011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // There is no way to get "through" to the 3. Buh-bye 7031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @SuppressWarnings("unchecked") 7061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testConcatVarArgsContainingNull() { 7071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 7081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterators.concat(iterateOver(1, 2), null, iterateOver(3), iterateOver(4), 7091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert iterateOver(5)); 7101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail("no exception thrown"); 7111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NullPointerException e) { 7121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testAddAllWithEmptyIterator() { 7161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> alreadyThere = Lists.newArrayList("already", "there"); 7171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert boolean changed = Iterators.addAll(alreadyThere, 7191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterators.<String>emptyIterator()); 7201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(alreadyThere).hasContentsInOrder("already", "there"); 7211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(changed); 7221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testAddAllToList() { 7251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> alreadyThere = Lists.newArrayList("already", "there"); 7261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> freshlyAdded = Lists.newArrayList("freshly", "added"); 7271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert boolean changed = Iterators.addAll(alreadyThere, freshlyAdded.iterator()); 7291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(alreadyThere).hasContentsInOrder("already", "there", "freshly", "added"); 7311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(changed); 7321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testAddAllToSet() { 7351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Set<String> alreadyThere 7361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = Sets.newLinkedHashSet(asList("already", "there")); 7371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> oneMore = Lists.newArrayList("there"); 7381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert boolean changed = Iterators.addAll(alreadyThere, oneMore.iterator()); 7401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(alreadyThere).hasContentsInOrder("already", "there"); 7411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(changed); 7421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("NullPointerTester") 7451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testNullPointerExceptions() throws Exception { 7461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert NullPointerTester tester = new NullPointerTester(); 7471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert tester.testAllPublicStaticMethods(Iterators.class); 7481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("Only used by @GwtIncompatible code") 7511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static abstract class EmptyIteratorTester 7521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert extends IteratorTester<Integer> { 7531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert protected EmptyIteratorTester() { 7541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert super(3, MODIFIABLE, Collections.<Integer>emptySet(), 7551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert IteratorTester.KnownOrder.KNOWN_ORDER); 7561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("Only used by @GwtIncompatible code") 7601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static abstract class SingletonIteratorTester 7611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert extends IteratorTester<Integer> { 7621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert protected SingletonIteratorTester() { 7631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert super(3, MODIFIABLE, singleton(1), IteratorTester.KnownOrder.KNOWN_ORDER); 7641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("Only used by @GwtIncompatible code") 7681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static abstract class DoubletonIteratorTester 7691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert extends IteratorTester<Integer> { 7701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert protected DoubletonIteratorTester() { 7711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert super(5, MODIFIABLE, newArrayList(1, 2), 7721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert IteratorTester.KnownOrder.KNOWN_ORDER); 7731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static Iterator<Integer> iterateOver(final Integer... values) { 7771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return newArrayList(values).iterator(); 7781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testElementsEqual() { 7811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<?> a; 7821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<?> b; 7831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Base case. 7851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert a = Lists.newArrayList(); 7861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert b = Collections.emptySet(); 7871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(Iterators.elementsEqual(a.iterator(), b.iterator())); 7881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // A few elements. 7901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert a = asList(4, 8, 15, 16, 23, 42); 7911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert b = asList(4, 8, 15, 16, 23, 42); 7921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(Iterators.elementsEqual(a.iterator(), b.iterator())); 7931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // The same, but with nulls. 7951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert a = asList(4, 8, null, 16, 23, 42); 7961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert b = asList(4, 8, null, 16, 23, 42); 7971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(Iterators.elementsEqual(a.iterator(), b.iterator())); 7981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Different Iterable types (still equal elements, though). 8001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert a = ImmutableList.of(4, 8, 15, 16, 23, 42); 8011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert b = asList(4, 8, 15, 16, 23, 42); 8021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(Iterators.elementsEqual(a.iterator(), b.iterator())); 8031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // An element differs. 8051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert a = asList(4, 8, 15, 12, 23, 42); 8061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert b = asList(4, 8, 15, 16, 23, 42); 8071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(Iterators.elementsEqual(a.iterator(), b.iterator())); 8081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // null versus non-null. 8101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert a = asList(4, 8, 15, null, 23, 42); 8111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert b = asList(4, 8, 15, 16, 23, 42); 8121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(Iterators.elementsEqual(a.iterator(), b.iterator())); 8131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(Iterators.elementsEqual(b.iterator(), a.iterator())); 8141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Different lengths. 8161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert a = asList(4, 8, 15, 16, 23); 8171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert b = asList(4, 8, 15, 16, 23, 42); 8181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(Iterators.elementsEqual(a.iterator(), b.iterator())); 8191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(Iterators.elementsEqual(b.iterator(), a.iterator())); 8201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Different lengths, one is empty. 8221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert a = Collections.emptySet(); 8231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert b = asList(4, 8, 15, 16, 23, 42); 8241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(Iterators.elementsEqual(a.iterator(), b.iterator())); 8251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(Iterators.elementsEqual(b.iterator(), a.iterator())); 8261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testPartition_badSize() { 8291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<Integer> source = Iterators.singletonIterator(1); 8301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 8311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterators.partition(source, 0); 8321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 8331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IllegalArgumentException expected) { 8341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testPartition_empty() { 8381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<Integer> source = Iterators.emptyIterator(); 8391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<List<Integer>> partitions = Iterators.partition(source, 1); 8401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(partitions.hasNext()); 8411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testPartition_singleton1() { 8441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<Integer> source = Iterators.singletonIterator(1); 8451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<List<Integer>> partitions = Iterators.partition(source, 1); 8461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(partitions.hasNext()); 8471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(partitions.hasNext()); 8481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(ImmutableList.of(1), partitions.next()); 8491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(partitions.hasNext()); 8501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testPartition_singleton2() { 8531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<Integer> source = Iterators.singletonIterator(1); 8541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<List<Integer>> partitions = Iterators.partition(source, 2); 8551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(partitions.hasNext()); 8561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(partitions.hasNext()); 8571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(ImmutableList.of(1), partitions.next()); 8581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(partitions.hasNext()); 8591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("fairly slow (~50s)") 8621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testPartition_general() { 8631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new IteratorTester<List<Integer>>(5, 8641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert IteratorFeature.UNMODIFIABLE, 8651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableList.of( 8661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert asList(1, 2, 3), 8671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert asList(4, 5, 6), 8681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert asList(7)), 8691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert IteratorTester.KnownOrder.KNOWN_ORDER) { 8701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Iterator<List<Integer>> newTargetIterator() { 8711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<Integer> source = Iterators.forArray(1, 2, 3, 4, 5, 6, 7); 8721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Iterators.partition(source, 3); 8731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }.test(); 8751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testPartition_view() { 8781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<Integer> list = asList(1, 2); 8791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<List<Integer>> partitions 8801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = Iterators.partition(list.iterator(), 1); 8811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Changes before the partition is retrieved are reflected 8831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert list.set(0, 3); 8841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<Integer> first = partitions.next(); 8851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Changes after are not 8871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert list.set(0, 4); 8881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(ImmutableList.of(3), first); 8901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("?") 8931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // TODO: Figure out why this is failing in GWT. 8941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testPartitionRandomAccess() { 8951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<Integer> source = asList(1, 2, 3).iterator(); 8961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<List<Integer>> partitions = Iterators.partition(source, 2); 8971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(partitions.next() instanceof RandomAccess); 8981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(partitions.next() instanceof RandomAccess); 8991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 9001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 9011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testPaddedPartition_badSize() { 9021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<Integer> source = Iterators.singletonIterator(1); 9031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 9041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterators.paddedPartition(source, 0); 9051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 9061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IllegalArgumentException expected) { 9071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 9081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 9091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 9101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testPaddedPartition_empty() { 9111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<Integer> source = Iterators.emptyIterator(); 9121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<List<Integer>> partitions = Iterators.paddedPartition(source, 1); 9131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(partitions.hasNext()); 9141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 9151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 9161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testPaddedPartition_singleton1() { 9171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<Integer> source = Iterators.singletonIterator(1); 9181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<List<Integer>> partitions = Iterators.paddedPartition(source, 1); 9191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(partitions.hasNext()); 9201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(partitions.hasNext()); 9211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(ImmutableList.of(1), partitions.next()); 9221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(partitions.hasNext()); 9231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 9241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 9251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testPaddedPartition_singleton2() { 9261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<Integer> source = Iterators.singletonIterator(1); 9271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<List<Integer>> partitions = Iterators.paddedPartition(source, 2); 9281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(partitions.hasNext()); 9291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(partitions.hasNext()); 9301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(asList(1, null), partitions.next()); 9311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(partitions.hasNext()); 9321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 9331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 9341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("fairly slow (~50s)") 9351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testPaddedPartition_general() { 9361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new IteratorTester<List<Integer>>(5, 9371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert IteratorFeature.UNMODIFIABLE, 9381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableList.of( 9391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert asList(1, 2, 3), 9401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert asList(4, 5, 6), 9411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert asList(7, null, null)), 9421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert IteratorTester.KnownOrder.KNOWN_ORDER) { 9431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Iterator<List<Integer>> newTargetIterator() { 9441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<Integer> source = Iterators.forArray(1, 2, 3, 4, 5, 6, 7); 9451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Iterators.paddedPartition(source, 3); 9461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 9471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }.test(); 9481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 9491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 9501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testPaddedPartition_view() { 9511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<Integer> list = asList(1, 2); 9521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<List<Integer>> partitions 9531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = Iterators.paddedPartition(list.iterator(), 1); 9541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 9551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Changes before the PaddedPartition is retrieved are reflected 9561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert list.set(0, 3); 9571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<Integer> first = partitions.next(); 9581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 9591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Changes after are not 9601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert list.set(0, 4); 9611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 9621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(ImmutableList.of(3), first); 9631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 9641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 9651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testPaddedPartitionRandomAccess() { 9661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<Integer> source = asList(1, 2, 3).iterator(); 9671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<List<Integer>> partitions = Iterators.paddedPartition(source, 2); 9681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(partitions.next() instanceof RandomAccess); 9691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(partitions.next() instanceof RandomAccess); 9701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 9711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 9721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testForArrayEmpty() { 9731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String[] array = new String[0]; 9741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> iterator = Iterators.forArray(array); 9751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(iterator.hasNext()); 9761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 9771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert iterator.next(); 9781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 9791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NoSuchElementException expected) {} 9801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 9811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 9821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testForArrayTypical() { 9831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String[] array = {"foo", "bar"}; 9841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> iterator = Iterators.forArray(array); 9851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(iterator.hasNext()); 9861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("foo", iterator.next()); 9871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(iterator.hasNext()); 9881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 9891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert iterator.remove(); 9901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 9911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (UnsupportedOperationException expected) {} 9921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("bar", iterator.next()); 9931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(iterator.hasNext()); 9941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 9951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert iterator.next(); 9961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 9971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NoSuchElementException expected) {} 9981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 9991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 10001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testForArrayOffset() { 10011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String[] array = {"foo", "bar", "cat", "dog"}; 10021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> iterator = Iterators.forArray(array, 1, 2); 10031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(iterator.hasNext()); 10041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("bar", iterator.next()); 10051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(iterator.hasNext()); 10061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("cat", iterator.next()); 10071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(iterator.hasNext()); 10081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 10091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterators.forArray(array, 2, 3); 10101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 10111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IndexOutOfBoundsException expected) {} 10121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 10131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 10141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testForArrayLength0() { 10151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String[] array = {"foo", "bar"}; 10161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(Iterators.forArray(array, 0, 0).hasNext()); 10171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(Iterators.forArray(array, 1, 0).hasNext()); 10181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(Iterators.forArray(array, 2, 0).hasNext()); 10191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 10201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterators.forArray(array, -1, 0); 10211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 10221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IndexOutOfBoundsException expected) {} 10231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 10241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterators.forArray(array, 3, 0); 10251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 10261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IndexOutOfBoundsException expected) {} 10271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 10281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 10291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("unreasonable slow") 10301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testForArrayUsingTester() { 10311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new IteratorTester<Integer>(6, UNMODIFIABLE, asList(1, 2, 3), 10321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert IteratorTester.KnownOrder.KNOWN_ORDER) { 10331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Iterator<Integer> newTargetIterator() { 10341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Iterators.forArray(1, 2, 3); 10351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 10361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }.test(); 10371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 10381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 10391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("unreasonable slow") 10401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testForArrayWithOffsetUsingTester() { 10411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new IteratorTester<Integer>(6, UNMODIFIABLE, asList(1, 2, 3), 10421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert IteratorTester.KnownOrder.KNOWN_ORDER) { 10431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Iterator<Integer> newTargetIterator() { 10441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Iterators.forArray(new Integer[] { 0, 1, 2, 3, 4 }, 1, 3); 10451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 10461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }.test(); 10471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 10481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 10491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testForEnumerationEmpty() { 10501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Enumeration<Integer> enumer = enumerate(); 10511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<Integer> iter = Iterators.forEnumeration(enumer); 10521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 10531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(iter.hasNext()); 10541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 10551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert iter.next(); 10561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 10571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NoSuchElementException expected) { 10581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 10591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 10601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 10611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testForEnumerationSingleton() { 10621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Enumeration<Integer> enumer = enumerate(1); 10631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<Integer> iter = Iterators.forEnumeration(enumer); 10641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 10651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(iter.hasNext()); 10661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(iter.hasNext()); 10671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(1, (int) iter.next()); 10681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 10691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert iter.remove(); 10701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 10711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (UnsupportedOperationException expected) { 10721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 10731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(iter.hasNext()); 10741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 10751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert iter.next(); 10761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 10771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NoSuchElementException expected) { 10781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 10791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 10801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 10811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testForEnumerationTypical() { 10821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Enumeration<Integer> enumer = enumerate(1, 2, 3); 10831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<Integer> iter = Iterators.forEnumeration(enumer); 10841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 10851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(iter.hasNext()); 10861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(1, (int) iter.next()); 10871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(iter.hasNext()); 10881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(2, (int) iter.next()); 10891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(iter.hasNext()); 10901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(3, (int) iter.next()); 10911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(iter.hasNext()); 10921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 10931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 10941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testAsEnumerationEmpty() { 10951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<Integer> iter = Iterators.emptyIterator(); 10961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Enumeration<Integer> enumer = Iterators.asEnumeration(iter); 10971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 10981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(enumer.hasMoreElements()); 10991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 11001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert enumer.nextElement(); 11011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 11021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NoSuchElementException expected) { 11031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 11041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 11051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 11061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testAsEnumerationSingleton() { 11071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<Integer> iter = ImmutableList.of(1).iterator(); 11081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Enumeration<Integer> enumer = Iterators.asEnumeration(iter); 11091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 11101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(enumer.hasMoreElements()); 11111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(enumer.hasMoreElements()); 11121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(1, (int) enumer.nextElement()); 11131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(enumer.hasMoreElements()); 11141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 11151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert enumer.nextElement(); 11161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 11171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NoSuchElementException expected) { 11181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 11191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 11201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 11211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testAsEnumerationTypical() { 11221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<Integer> iter = ImmutableList.of(1, 2, 3).iterator(); 11231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Enumeration<Integer> enumer = Iterators.asEnumeration(iter); 11241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 11251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(enumer.hasMoreElements()); 11261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(1, (int) enumer.nextElement()); 11271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(enumer.hasMoreElements()); 11281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(2, (int) enumer.nextElement()); 11291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(enumer.hasMoreElements()); 11301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(3, (int) enumer.nextElement()); 11311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(enumer.hasMoreElements()); 11321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 11331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 11341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static Enumeration<Integer> enumerate(Integer... ints) { 11351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Vector<Integer> vector = new Vector<Integer>(); 11361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert vector.addAll(asList(ints)); 11371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return vector.elements(); 11381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 11391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 11401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testToString() { 11411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> list = Collections.emptyList(); 11421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("[]", Iterators.toString(list.iterator())); 11431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 11441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert list = Lists.newArrayList("yam", "bam", "jam", "ham"); 11451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("[yam, bam, jam, ham]", Iterators.toString(list.iterator())); 11461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 11471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 11481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testLimit() { 11491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> list = newArrayList(); 11501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 11511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterators.limit(list.iterator(), -1); 11521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail("expected exception"); 11531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IllegalArgumentException expected) { 11541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // expected 11551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 11561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 11571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(Iterators.limit(list.iterator(), 0).hasNext()); 11581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(Iterators.limit(list.iterator(), 1).hasNext()); 11591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 11601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert list.add("cool"); 11611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(Iterators.limit(list.iterator(), 0).hasNext()); 11621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(list, newArrayList(Iterators.limit(list.iterator(), 1))); 11631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(list, newArrayList(Iterators.limit(list.iterator(), 2))); 11641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 11651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert list.add("pants"); 11661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(Iterators.limit(list.iterator(), 0).hasNext()); 11671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(ImmutableList.of("cool"), 11681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert newArrayList(Iterators.limit(list.iterator(), 1))); 11691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(list, newArrayList(Iterators.limit(list.iterator(), 2))); 11701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(list, newArrayList(Iterators.limit(list.iterator(), 3))); 11711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 11721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 11731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testLimitRemove() { 11741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> list = newArrayList(); 11751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert list.add("cool"); 11761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert list.add("pants"); 11771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> iterator = Iterators.limit(list.iterator(), 1); 11781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert iterator.next(); 11791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert iterator.remove(); 11801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(iterator.hasNext()); 11811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(1, list.size()); 11821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("pants", list.get(0)); 11831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 11841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 11851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("fairly slow (~30s)") 11861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testLimitUsingIteratorTester() { 11871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert final List<Integer> list = Lists.newArrayList(1, 2, 3, 4, 5); 11881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new IteratorTester<Integer>(5, MODIFIABLE, newArrayList(1, 2, 3), 11891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert IteratorTester.KnownOrder.KNOWN_ORDER) { 11901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Iterator<Integer> newTargetIterator() { 11911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Iterators.limit(Lists.newArrayList(list).iterator(), 3); 11921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 11931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }.test(); 11941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 11951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 11961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testGetNext_withDefault_singleton() { 11971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> iterator = Collections.singletonList("foo").iterator(); 11981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("foo", Iterators.getNext(iterator, "bar")); 11991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 12001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 12011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testGetNext_withDefault_empty() { 12021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> iterator = Iterators.emptyIterator(); 12031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("bar", Iterators.getNext(iterator, "bar")); 12041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 12051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 12061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testGetNext_withDefault_empty_null() { 12071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> iterator = Iterators.emptyIterator(); 12081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertNull(Iterators.getNext(iterator, null)); 12091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 12101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 12111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testGetNext_withDefault_two() { 12121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> iterator = asList("foo", "bar").iterator(); 12131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("foo", Iterators.getNext(iterator, "x")); 12141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 12151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 12161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testGetLast_basic() { 12171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> list = newArrayList(); 12181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert list.add("a"); 12191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert list.add("b"); 12201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("b", getLast(list.iterator())); 12211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 12221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 12231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testGetLast_exception() { 12241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> list = newArrayList(); 12251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 12261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert getLast(list.iterator()); 12271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 12281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NoSuchElementException expected) { 12291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 12301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 12311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 12321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testGetLast_withDefault_singleton() { 12331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> iterator = Collections.singletonList("foo").iterator(); 12341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("foo", Iterators.getLast(iterator, "bar")); 12351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 12361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 12371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testGetLast_withDefault_empty() { 12381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> iterator = Iterators.emptyIterator(); 12391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("bar", Iterators.getLast(iterator, "bar")); 12401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 12411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 12421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testGetLast_withDefault_empty_null() { 12431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> iterator = Iterators.emptyIterator(); 12441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertNull(Iterators.getLast(iterator, null)); 12451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 12461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 12471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testGetLast_withDefault_two() { 12481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> iterator = asList("foo", "bar").iterator(); 12491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("bar", Iterators.getLast(iterator, "x")); 12501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 12511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 12521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testGet_basic() { 12531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> list = newArrayList(); 12541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert list.add("a"); 12551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert list.add("b"); 12561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> iterator = list.iterator(); 12571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("b", get(iterator, 1)); 12581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(iterator.hasNext()); 12591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 12601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 12611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testGet_atSize() { 12621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> list = newArrayList(); 12631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert list.add("a"); 12641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert list.add("b"); 12651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> iterator = list.iterator(); 12661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 12671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert get(iterator, 2); 12681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 12691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IndexOutOfBoundsException expected) {} 12701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(iterator.hasNext()); 12711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 12721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 12731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testGet_pastEnd() { 12741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> list = newArrayList(); 12751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert list.add("a"); 12761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert list.add("b"); 12771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> iterator = list.iterator(); 12781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 12791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert get(iterator, 5); 12801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 12811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IndexOutOfBoundsException expected) {} 12821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(iterator.hasNext()); 12831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 12841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 12851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testGet_empty() { 12861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> list = newArrayList(); 12871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> iterator = list.iterator(); 12881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 12891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert get(iterator, 0); 12901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 12911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IndexOutOfBoundsException expected) {} 12921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(iterator.hasNext()); 12931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 12941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 12951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testGet_negativeIndex() { 12961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> list = newArrayList("a", "b", "c"); 12971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> iterator = list.iterator(); 12981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 12991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert get(iterator, -1); 13001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 13011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IndexOutOfBoundsException expected) {} 13021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 13031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 13041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testGet_withDefault_basic() { 13051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> list = newArrayList(); 13061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert list.add("a"); 13071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert list.add("b"); 13081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> iterator = list.iterator(); 13091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("a", get(iterator, 0, "c")); 13101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(iterator.hasNext()); 13111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 13121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 13131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testGet_withDefault_atSize() { 13141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> list = newArrayList(); 13151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert list.add("a"); 13161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert list.add("b"); 13171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> iterator = list.iterator(); 13181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("c", get(iterator, 2, "c")); 13191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(iterator.hasNext()); 13201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 13211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 13221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testGet_withDefault_pastEnd() { 13231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> list = newArrayList(); 13241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert list.add("a"); 13251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert list.add("b"); 13261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> iterator = list.iterator(); 13271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("c", get(iterator, 3, "c")); 13281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(iterator.hasNext()); 13291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 13301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 13311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testGet_withDefault_negativeIndex() { 13321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> list = newArrayList(); 13331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert list.add("a"); 13341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert list.add("b"); 13351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> iterator = list.iterator(); 13361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 13371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert get(iterator, -1, "c"); 13381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 13391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IndexOutOfBoundsException expected) { 13401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // pass 13411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 13421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(iterator.hasNext()); 13431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 13441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 13451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testSkip_basic() { 13461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> list = newArrayList(); 13471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert list.add("a"); 13481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert list.add("b"); 13491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> iterator = list.iterator(); 13501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert skip(iterator, 1); 13511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("b", iterator.next()); 13521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 13531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 13541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testSkip_pastEnd() { 13551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> list = newArrayList(); 13561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert list.add("a"); 13571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert list.add("b"); 13581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> iterator = list.iterator(); 13591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert skip(iterator, 5); 13601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(iterator.hasNext()); 13611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 13621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 13631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testSkip_illegalArgument() { 13641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> list = newArrayList("a", "b", "c"); 13651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> iterator = list.iterator(); 13661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 13671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert skip(iterator, -1); 13681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 13691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IllegalArgumentException expected) {} 13701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 13711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 13721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testFrequency() { 13731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> list = newArrayList("a", null, "b", null, "a", null); 13741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(2, Iterators.frequency(list.iterator(), "a")); 13751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(1, Iterators.frequency(list.iterator(), "b")); 13761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0, Iterators.frequency(list.iterator(), "c")); 13771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0, Iterators.frequency(list.iterator(), 4.2)); 13781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(3, Iterators.frequency(list.iterator(), null)); 13791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 13801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 13811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("slow (~4s)") 13821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testSingletonIterator() { 13831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new IteratorTester<Integer>( 13841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3, UNMODIFIABLE, singleton(1), IteratorTester.KnownOrder.KNOWN_ORDER) { 13851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Iterator<Integer> newTargetIterator() { 13861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Iterators.singletonIterator(1); 13871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 13881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }.test(); 13891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 13901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 13911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testRemoveAll() { 13921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> list = newArrayList("a", "b", "c", "d", "e"); 13931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(Iterators.removeAll( 13941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert list.iterator(), newArrayList("b", "d", "f"))); 13951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(newArrayList("a", "c", "e"), list); 13961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(Iterators.removeAll( 13971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert list.iterator(), newArrayList("x", "y", "z"))); 13981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(newArrayList("a", "c", "e"), list); 13991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 14001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 14011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testRemoveIf() { 14021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> list = newArrayList("a", "b", "c", "d", "e"); 14031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(Iterators.removeIf( 14041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert list.iterator(), 14051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new Predicate<String>() { 14061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override 14071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public boolean apply(String s) { 14081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return s.equals("b") || s.equals("d") || s.equals("f"); 14091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 14101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert })); 14111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(newArrayList("a", "c", "e"), list); 14121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(Iterators.removeIf( 14131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert list.iterator(), 14141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new Predicate<String>() { 14151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override 14161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public boolean apply(String s) { 14171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return s.equals("x") || s.equals("y") || s.equals("z"); 14181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 14191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert })); 14201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(newArrayList("a", "c", "e"), list); 14211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 14221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 14231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testRetainAll() { 14241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> list = newArrayList("a", "b", "c", "d", "e"); 14251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(Iterators.retainAll( 14261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert list.iterator(), newArrayList("b", "d", "f"))); 14271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(newArrayList("b", "d"), list); 14281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(Iterators.retainAll( 14291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert list.iterator(), newArrayList("b", "e", "d"))); 14301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(newArrayList("b", "d"), list); 14311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 14321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 14331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("ListTestSuiteBuilder") 14341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static Test testsForRemoveAllAndRetainAll() { 14351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return ListTestSuiteBuilder.using(new TestStringListGenerator() { 14361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public List<String> create(final String[] elements) { 14371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert final List<String> delegate = newArrayList(elements); 14381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return new ForwardingList<String>() { 14391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected List<String> delegate() { 14401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return delegate; 14411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 14421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 14431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public boolean removeAll(Collection<?> c) { 14441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Iterators.removeAll(iterator(), c); 14451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 14461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 14471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public boolean retainAll(Collection<?> c) { 14481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Iterators.retainAll(iterator(), c); 14491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 14501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }; 14511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 14521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }) 14531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .named("ArrayList with Iterators.removeAll and retainAll") 14541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .withFeatures( 14551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ListFeature.GENERAL_PURPOSE, 14561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionFeature.ALLOWS_NULL_VALUES, 14571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionSize.ANY) 14581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .createTestSuite(); 14591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 14601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 14611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testConsumingIterator() { 14621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Test data 14631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> list = Lists.newArrayList("a", "b"); 14641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 14651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Test & Verify 14661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> consumingIterator = 14671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterators.consumingIterator(list.iterator()); 14681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 14691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(list).hasContentsInOrder("a", "b"); 14701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 14711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(consumingIterator.hasNext()); 14721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(list).hasContentsInOrder("a", "b"); 14731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("a", consumingIterator.next()); 14741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(list).hasContentsInOrder("b"); 14751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 14761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(consumingIterator.hasNext()); 14771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("b", consumingIterator.next()); 14781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(list).isEmpty(); 14791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 14801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(consumingIterator.hasNext()); 14811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 14821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 14831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("?") 14841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // TODO: Figure out why this is failing in GWT. 14851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testConsumingIterator_duelingIterators() { 14861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Test data 14871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> list = Lists.newArrayList("a", "b"); 14881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 14891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Test & Verify 14901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> i1 = Iterators.consumingIterator(list.iterator()); 14911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> i2 = Iterators.consumingIterator(list.iterator()); 14921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 14931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert i1.next(); 14941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 14951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert i2.next(); 14961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail("Concurrent modification should throw an exception."); 14971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (ConcurrentModificationException cme) { 14981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Pass 14991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 15001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 15011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 15021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testIndexOf_consumedData() { 15031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> iterator = 15041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Lists.newArrayList("manny", "mo", "jack").iterator(); 15051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(1, Iterators.indexOf(iterator, Predicates.equalTo("mo"))); 15061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("jack", iterator.next()); 15071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(iterator.hasNext()); 15081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 15091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 15101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testIndexOf_consumedDataWithDuplicates() { 15111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> iterator = 15121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Lists.newArrayList("manny", "mo", "mo", "jack").iterator(); 15131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(1, Iterators.indexOf(iterator, Predicates.equalTo("mo"))); 15141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("mo", iterator.next()); 15151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("jack", iterator.next()); 15161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(iterator.hasNext()); 15171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 15181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 15191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testIndexOf_consumedDataNoMatch() { 15201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> iterator = 15211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Lists.newArrayList("manny", "mo", "mo", "jack").iterator(); 15221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(-1, Iterators.indexOf(iterator, Predicates.equalTo("bob"))); 15231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(iterator.hasNext()); 15241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 15251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 15261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @SuppressWarnings("deprecation") 15271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testUnmodifiableIteratorShortCircuit() { 15281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> mod = Lists.newArrayList("a", "b", "c").iterator(); 15291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert UnmodifiableIterator<String> unmod = Iterators.unmodifiableIterator(mod); 15301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertNotSame(mod, unmod); 15311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(unmod, Iterators.unmodifiableIterator(unmod)); 15321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(unmod, Iterators.unmodifiableIterator((Iterator<String>) unmod)); 15331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 15341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 15351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @SuppressWarnings("deprecation") 15361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testPeekingIteratorShortCircuit() { 15371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> nonpeek = Lists.newArrayList("a", "b", "c").iterator(); 15381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert PeekingIterator<String> peek = Iterators.peekingIterator(nonpeek); 15391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertNotSame(peek, nonpeek); 15401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(peek, Iterators.peekingIterator(peek)); 15411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(peek, Iterators.peekingIterator((Iterator<String>) peek)); 15421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 15431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert} 1544