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