11d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/* 21d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Copyright (C) 2007 The Guava Authors 31d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 41d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Licensed under the Apache License, Version 2.0 (the "License"); 51d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * you may not use this file except in compliance with the License. 61d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * You may obtain a copy of the License at 71d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 81d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * http://www.apache.org/licenses/LICENSE-2.0 91d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Unless required by applicable law or agreed to in writing, software 111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * distributed under the License is distributed on an "AS IS" BASIS, 121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * See the License for the specific language governing permissions and 141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * limitations under the License. 151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertpackage com.google.common.collect; 181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static com.google.common.base.Preconditions.checkNotNull; 201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static com.google.common.collect.testing.IteratorFeature.UNMODIFIABLE; 211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static java.util.Arrays.asList; 221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static java.util.Collections.singletonList; 231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static org.junit.contrib.truth.Truth.ASSERT; 241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.annotations.GwtCompatible; 261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.annotations.GwtIncompatible; 271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.base.Function; 281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.base.Functions; 291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.IteratorTester; 301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.ListTestSuiteBuilder; 311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.SampleElements; 321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.TestListGenerator; 331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.TestStringListGenerator; 341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.features.CollectionFeature; 351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.features.CollectionSize; 361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.features.ListFeature; 371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.testing.NullPointerTester; 381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.testing.SerializableTester; 391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport junit.framework.Test; 411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport junit.framework.TestCase; 421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport junit.framework.TestSuite; 431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport org.easymock.EasyMock; 451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.io.Serializable; 471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.ArrayList; 481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Collection; 491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Collections; 501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Iterator; 511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.LinkedList; 521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.List; 531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.ListIterator; 541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.NoSuchElementException; 551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.RandomAccess; 561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/** 581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Unit test for {@code Lists}. 591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * @author Kevin Bourrillion 611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * @author Mike Bostock 621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * @author Jared Levy 631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert@GwtCompatible(emulated = true) 651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertpublic class ListsTest extends TestCase { 661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static final Collection<Integer> SOME_COLLECTION 681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = asList(0, 1, 1); 691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static final Iterable<Integer> SOME_ITERABLE = new SomeIterable(); 711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static class SomeIterable implements Iterable<Integer>, Serializable { 731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override 741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public Iterator<Integer> iterator() { 751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return SOME_COLLECTION.iterator(); 761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static final long serialVersionUID = 0; 781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static final List<Integer> SOME_LIST 811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = Lists.newArrayList(1, 2, 3, 4); 821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static final List<Integer> SOME_SEQUENTIAL_LIST 841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = Lists.newLinkedList(asList(1, 2, 3, 4)); 851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static final List<String> SOME_STRING_LIST 871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = asList("1", "2", "3", "4"); 881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static final Function<Number, String> SOME_FUNCTION 901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = new SomeFunction(); 911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static class SomeFunction 931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert implements Function<Number, String>, Serializable { 941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override 951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public String apply(Number n) { 961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return String.valueOf(n); 971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static final long serialVersionUID = 0; 991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("suite") 1021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static Test suite() { 1031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert TestSuite suite = new TestSuite(); 1041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTestSuite(ListsTest.class); 1051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTest(ListTestSuiteBuilder.using(new TestStringListGenerator() { 1071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected List<String> create(String[] elements) { 1081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String[] rest = new String[elements.length - 1]; 1091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Platform.unsafeArrayCopy(elements, 1, rest, 0, elements.length - 1); 1101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Lists.asList(elements[0], rest); 1111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }) 1131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .named("Lists.asList, 2 parameter") 1141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .withFeatures(CollectionSize.SEVERAL, CollectionSize.ONE, 1151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionFeature.ALLOWS_NULL_VALUES) 1161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .createTestSuite()); 1171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTest(ListTestSuiteBuilder.using(new TestStringListGenerator() { 1191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected List<String> create(String[] elements) { 1201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String[] rest = new String[elements.length - 2]; 1211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Platform.unsafeArrayCopy(elements, 2, rest, 0, elements.length - 2); 1221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Lists.asList(elements[0], elements[1], rest); 1231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }) 1251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .named("Lists.asList, 3 parameter") 1261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .withFeatures(CollectionSize.SEVERAL, 1271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionFeature.ALLOWS_NULL_VALUES) 1281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .createTestSuite()); 1291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert final Function<String, String> removeFirst 1311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = new Function<String, String>() { 1321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override 1331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public String apply(String from) { 1341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return (from.length() == 0) ? from : from.substring(1); 1351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }; 1371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTest(ListTestSuiteBuilder.using(new TestStringListGenerator() { 1391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected List<String> create(String[] elements) { 1401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> fromList = Lists.newArrayList(); 1411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (String element : elements) { 1421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fromList.add("q" + checkNotNull(element)); 1431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Lists.transform(fromList, removeFirst); 1451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }) 1471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .named("Lists.transform, random access, no nulls") 1481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .withFeatures(CollectionSize.ANY, 1491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ListFeature.REMOVE_OPERATIONS, 1501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionFeature.ALLOWS_NULL_QUERIES) 1511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .createTestSuite()); 1521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTest(ListTestSuiteBuilder.using(new TestStringListGenerator() { 1541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected List<String> create(String[] elements) { 1551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> fromList = Lists.newLinkedList(); 1561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (String element : elements) { 1571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fromList.add("q" + checkNotNull(element)); 1581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Lists.transform(fromList, removeFirst); 1601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }) 1621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .named("Lists.transform, sequential access, no nulls") 1631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .withFeatures(CollectionSize.ANY, 1641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ListFeature.REMOVE_OPERATIONS, 1651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionFeature.ALLOWS_NULL_QUERIES) 1661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .createTestSuite()); 1671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTest(ListTestSuiteBuilder.using(new TestStringListGenerator() { 1691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected List<String> create(String[] elements) { 1701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> fromList = Lists.newArrayList(elements); 1711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Lists.transform(fromList, Functions.<String>identity()); 1721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }) 1741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .named("Lists.transform, random access, nulls") 1751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .withFeatures(CollectionSize.ANY, 1761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ListFeature.REMOVE_OPERATIONS, 1771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionFeature.ALLOWS_NULL_VALUES) 1781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .createTestSuite()); 1791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTest(ListTestSuiteBuilder.using(new TestStringListGenerator() { 1811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected List<String> create(String[] elements) { 1821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> fromList = 1831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Lists.newLinkedList(asList(elements)); 1841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Lists.transform(fromList, Functions.<String>identity()); 1851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }) 1871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .named("Lists.transform, sequential access, nulls") 1881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .withFeatures(CollectionSize.ANY, 1891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ListFeature.REMOVE_OPERATIONS, 1901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionFeature.ALLOWS_NULL_VALUES) 1911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .createTestSuite()); 1921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTest(ListTestSuiteBuilder.using(new TestStringListGenerator() { 1941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected List<String> create(String[] elements) { 1951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> list = Lists.newArrayList(); 1961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (int i = elements.length - 1; i >= 0; i--) 1971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert list.add(elements[i]); 1981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Lists.reverse(list); 1991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }).named("Lists.reverse[ArrayList]").withFeatures(CollectionSize.ANY, 2011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionFeature.ALLOWS_NULL_VALUES, ListFeature.GENERAL_PURPOSE) 2021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .createTestSuite()); 2031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTest(ListTestSuiteBuilder.using(new TestStringListGenerator() { 2051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected List<String> create(String[] elements) { 2061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String[] reverseElements = new String[elements.length]; 2071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (int i = elements.length - 1, j = 0; i >= 0; i--, j++) 2081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert reverseElements[j] = elements[i]; 2091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Lists.reverse(asList(reverseElements)); 2101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }).named("Lists.reverse[Arrays.asList]").withFeatures(CollectionSize.ANY, 2121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionFeature.ALLOWS_NULL_VALUES, ListFeature.SUPPORTS_SET) 2131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .createTestSuite()); 2141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTest(ListTestSuiteBuilder.using(new TestStringListGenerator() { 2161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected List<String> create(String[] elements) { 2171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> list = Lists.newLinkedList(); 2181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (int i = elements.length - 1; i >= 0; i--) 2191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert list.add(elements[i]); 2201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Lists.reverse(list); 2211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }).named("Lists.reverse[LinkedList]").withFeatures(CollectionSize.ANY, 2231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionFeature.ALLOWS_NULL_VALUES, ListFeature.GENERAL_PURPOSE) 2241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .createTestSuite()); 2251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTest(ListTestSuiteBuilder.using(new TestStringListGenerator() { 2271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected List<String> create(String[] elements) { 2281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableList.Builder<String> builder = ImmutableList.builder(); 2291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (int i = elements.length - 1; i >= 0; i--) 2301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.add(elements[i]); 2311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Lists.reverse(builder.build()); 2321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }).named("Lists.reverse[ImmutableList]").withFeatures(CollectionSize.ANY, 2341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionFeature.ALLOWS_NULL_QUERIES) 2351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .createTestSuite()); 2361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTest( 2381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ListTestSuiteBuilder.using(new TestListGenerator<Character>() { 2391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public List<Character> create(Object... elements) { 2401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert char[] chars = new char[elements.length]; 2411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (int i = 0; i < elements.length; i++) 2421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert chars[i] = (Character) elements[i]; 2431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Lists.charactersOf(String.copyValueOf(chars)); 2441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public Character[] createArray(int length) { 2471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return new Character[length]; 2481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public Iterable<Character> order( 2511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<Character> insertionOrder) { 2521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return ImmutableList.copyOf(insertionOrder); 2531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public SampleElements<Character> samples() { 2561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return new SampleElements<Character>('a', 'b', 'c', 'd', 'e'); 2571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }).named("Lists.charactersOf[String]").withFeatures( 2591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionSize.ANY, CollectionFeature.ALLOWS_NULL_QUERIES) 2601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .createTestSuite()); 2611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTest( 2631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ListTestSuiteBuilder.using(new TestListGenerator<Character>() { 2641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public List<Character> create(Object... elements) { 2651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert char[] chars = new char[elements.length]; 2661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (int i = 0; i < elements.length; i++) 2671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert chars[i] = (Character) elements[i]; 2681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert StringBuilder str = new StringBuilder(); 2691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert str.append(chars); 2701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Lists.charactersOf(str); 2711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public Character[] createArray(int length) { 2741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return new Character[length]; 2751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public Iterable<Character> order( 2781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<Character> insertionOrder) { 2791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return ImmutableList.copyOf(insertionOrder); 2801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public SampleElements<Character> samples() { 2831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return new SampleElements<Character>('a', 'b', 'c', 'd', 'e'); 2841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }).named("Lists.charactersOf[CharSequence]").withFeatures( 2861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionSize.ANY, CollectionFeature.ALLOWS_NULL_QUERIES) 2871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .createTestSuite()); 2881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return suite; 2901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCharactersOfIsView() { 2931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert StringBuilder builder = new StringBuilder("abc"); 2941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<Character> chars = Lists.charactersOf(builder); 2951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(asList('a', 'b', 'c'), chars); 2961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.append("def"); 2971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals( 2981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert asList('a', 'b', 'c', 'd', 'e', 'f'), chars); 2991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.deleteCharAt(5); 3001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals( 3011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert asList('a', 'b', 'c', 'd', 'e'), chars); 3021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testNewArrayListEmpty() { 3051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ArrayList<Integer> list = Lists.newArrayList(); 3061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Collections.emptyList(), list); 3071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testNewArrayListWithCapacity() { 3101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ArrayList<Integer> list = Lists.newArrayListWithCapacity(0); 3111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Collections.emptyList(), list); 3121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ArrayList<Integer> bigger = Lists.newArrayListWithCapacity(256); 3141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Collections.emptyList(), bigger); 3151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testNewArrayListWithCapacity_negative() { 3181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 3191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Lists.newArrayListWithCapacity(-1); 3201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 3211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IllegalArgumentException expected) { 3221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testNewArrayListWithExpectedSize() { 3261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ArrayList<Integer> list = Lists.newArrayListWithExpectedSize(0); 3271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Collections.emptyList(), list); 3281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ArrayList<Integer> bigger = Lists.newArrayListWithExpectedSize(256); 3301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Collections.emptyList(), bigger); 3311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testNewArrayListWithExpectedSize_negative() { 3341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 3351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Lists.newArrayListWithExpectedSize(-1); 3361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 3371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IllegalArgumentException expected) { 3381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testNewArrayListVarArgs() { 3421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ArrayList<Integer> list = Lists.newArrayList(0, 1, 1); 3431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(SOME_COLLECTION, list); 3441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testComputeArrayListCapacity() { 3471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(5, Lists.computeArrayListCapacity(0)); 3481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(13, Lists.computeArrayListCapacity(8)); 3491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(89, Lists.computeArrayListCapacity(77)); 3501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(22000005, Lists.computeArrayListCapacity(20000000)); 3511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Integer.MAX_VALUE, 3521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Lists.computeArrayListCapacity(Integer.MAX_VALUE - 1000)); 3531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testNewArrayListFromCollection() { 3561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ArrayList<Integer> list = Lists.newArrayList(SOME_COLLECTION); 3571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(SOME_COLLECTION, list); 3581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testNewArrayListFromIterable() { 3611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ArrayList<Integer> list = Lists.newArrayList(SOME_ITERABLE); 3621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(SOME_COLLECTION, list); 3631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testNewArrayListFromIterator() { 3661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ArrayList<Integer> list = Lists.newArrayList(SOME_COLLECTION.iterator()); 3671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(SOME_COLLECTION, list); 3681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testNewLinkedListEmpty() { 3711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert LinkedList<Integer> list = Lists.newLinkedList(); 3721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Collections.emptyList(), list); 3731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testNewLinkedListFromCollection() { 3761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert LinkedList<Integer> list = Lists.newLinkedList(SOME_COLLECTION); 3771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(SOME_COLLECTION, list); 3781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testNewLinkedListFromIterable() { 3811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert LinkedList<Integer> list = Lists.newLinkedList(SOME_ITERABLE); 3821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(SOME_COLLECTION, list); 3831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("NullPointerTester") 3861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testNullPointerExceptions() throws Exception { 3871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert NullPointerTester tester = new NullPointerTester(); 3881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert tester.testAllPublicStaticMethods(Lists.class); 3891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /** 3921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * This is just here to illustrate how {@code Arrays#asList} differs from 3931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * {@code Lists#newArrayList}. 3941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 3951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testArraysAsList() { 3961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> ourWay = Lists.newArrayList("foo", "bar", "baz"); 3971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> otherWay = asList("foo", "bar", "baz"); 3981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // They're logically equal 4001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(ourWay, otherWay); 4011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // The result of Arrays.asList() is mutable 4031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert otherWay.set(0, "FOO"); 4041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("FOO", otherWay.get(0)); 4051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // But it can't grow 4071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 4081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert otherWay.add("nope"); 4091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail("no exception thrown"); 4101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (UnsupportedOperationException expected) { 4111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // And it can't shrink 4141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 4151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert otherWay.remove(2); 4161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail("no exception thrown"); 4171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (UnsupportedOperationException expected) { 4181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("SerializableTester") 4221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testAsList1() { 4231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> list = Lists.asList("foo", new String[] { "bar", "baz" }); 4241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert checkFooBarBazList(list); 4251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SerializableTester.reserializeAndAssert(list); 4261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(list instanceof RandomAccess); 4271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new IteratorTester<String>(5, UNMODIFIABLE, 4291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert asList("foo", "bar", "baz"), 4301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert IteratorTester.KnownOrder.KNOWN_ORDER) { 4311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Iterator<String> newTargetIterator() { 4321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Lists.asList("foo", new String[] {"bar", "baz"}).iterator(); 4331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }.test(); 4351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private void checkFooBarBazList(List<String> list) { 4381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(list).hasContentsInOrder("foo", "bar", "baz"); 4391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(3, list.size()); 4401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertIndexIsOutOfBounds(list, -1); 4411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("foo", list.get(0)); 4421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("bar", list.get(1)); 4431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("baz", list.get(2)); 4441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertIndexIsOutOfBounds(list, 3); 4451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testAsList1Small() { 4481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> list = Lists.asList("foo", new String[0]); 4491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(list).hasContentsInOrder("foo"); 4501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(1, list.size()); 4511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertIndexIsOutOfBounds(list, -1); 4521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("foo", list.get(0)); 4531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertIndexIsOutOfBounds(list, 1); 4541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(list instanceof RandomAccess); 4551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new IteratorTester<String>(3, UNMODIFIABLE, singletonList("foo"), 4571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert IteratorTester.KnownOrder.KNOWN_ORDER) { 4581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Iterator<String> newTargetIterator() { 4591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Lists.asList("foo", new String[0]).iterator(); 4601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }.test(); 4621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testAsList2() { 4651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> list = Lists.asList("foo", "bar", new String[] { "baz" }); 4661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert checkFooBarBazList(list); 4671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(list instanceof RandomAccess); 4681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new IteratorTester<String>(5, UNMODIFIABLE, asList("foo", "bar", 4701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "baz"), IteratorTester.KnownOrder.KNOWN_ORDER) { 4711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Iterator<String> newTargetIterator() { 4721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Lists.asList("foo", "bar", new String[] {"baz"}).iterator(); 4731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }.test(); 4751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("SerializableTester") 4781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testAsList2Small() { 4791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> list = Lists.asList("foo", "bar", new String[0]); 4801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(list).hasContentsInOrder("foo", "bar"); 4811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(2, list.size()); 4821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertIndexIsOutOfBounds(list, -1); 4831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("foo", list.get(0)); 4841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("bar", list.get(1)); 4851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertIndexIsOutOfBounds(list, 2); 4861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SerializableTester.reserializeAndAssert(list); 4871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(list instanceof RandomAccess); 4881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new IteratorTester<String>(5, UNMODIFIABLE, asList("foo", "bar"), 4901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert IteratorTester.KnownOrder.KNOWN_ORDER) { 4911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Iterator<String> newTargetIterator() { 4921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Lists.asList("foo", "bar", new String[0]).iterator(); 4931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }.test(); 4951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static void assertIndexIsOutOfBounds(List<String> list, int index) { 4981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 4991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert list.get(index); 5001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 5011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IndexOutOfBoundsException expected) { 5021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testReverseViewRandomAccess() { 5061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<Integer> fromList = Lists.newArrayList(SOME_LIST); 5071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<Integer> toList = Lists.reverse(fromList); 5081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertReverseView(fromList, toList); 5091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testReverseViewSequential() { 5121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<Integer> fromList = Lists.newLinkedList(SOME_SEQUENTIAL_LIST); 5131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<Integer> toList = Lists.reverse(fromList); 5141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertReverseView(fromList, toList); 5151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static void assertReverseView(List<Integer> fromList, 5181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<Integer> toList) { 5191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /* fromList modifications reflected in toList */ 5201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fromList.set(0, 5); 5211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(asList(4, 3, 2, 5), toList); 5221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fromList.add(6); 5231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(asList(6, 4, 3, 2, 5), toList); 5241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fromList.add(2, 9); 5251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(asList(6, 4, 3, 9, 2, 5), toList); 5261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fromList.remove(Integer.valueOf(2)); 5271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(asList(6, 4, 3, 9, 5), toList); 5281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fromList.remove(3); 5291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(asList(6, 3, 9, 5), toList); 5301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /* toList modifications reflected in fromList */ 5321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert toList.remove(0); 5331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(asList(5, 9, 3), fromList); 5341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert toList.add(7); 5351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(asList(7, 5, 9, 3), fromList); 5361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert toList.add(5); 5371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(asList(5, 7, 5, 9, 3), fromList); 5381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert toList.remove(Integer.valueOf(5)); 5391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(asList(5, 7, 9, 3), fromList); 5401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert toList.set(1, 8); 5411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(asList(5, 7, 8, 3), fromList); 5421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert toList.clear(); 5431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Collections.emptyList(), fromList); 5441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("SerializableTester") 5471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testTransformEqualityRandomAccess() { 5481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> list = Lists.transform(SOME_LIST, SOME_FUNCTION); 5491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(SOME_STRING_LIST, list); 5501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SerializableTester.reserializeAndAssert(list); 5511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("SerializableTester") 5541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testTransformEqualitySequential() { 5551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> list = Lists.transform(SOME_SEQUENTIAL_LIST, SOME_FUNCTION); 5561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(SOME_STRING_LIST, list); 5571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SerializableTester.reserializeAndAssert(list); 5581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testTransformHashCodeRandomAccess() { 5611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> list = Lists.transform(SOME_LIST, SOME_FUNCTION); 5621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(SOME_STRING_LIST.hashCode(), list.hashCode()); 5631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testTransformHashCodeSequential() { 5661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> list = Lists.transform(SOME_SEQUENTIAL_LIST, SOME_FUNCTION); 5671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(SOME_STRING_LIST.hashCode(), list.hashCode()); 5681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testTransformModifiableRandomAccess() { 5711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<Integer> fromList = Lists.newArrayList(SOME_LIST); 5721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> list = Lists.transform(fromList, SOME_FUNCTION); 5731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTransformModifiable(list); 5741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testTransformModifiableSequential() { 5771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<Integer> fromList = Lists.newLinkedList(SOME_SEQUENTIAL_LIST); 5781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> list = Lists.transform(fromList, SOME_FUNCTION); 5791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTransformModifiable(list); 5801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static void assertTransformModifiable(List<String> list) { 5831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 5841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert list.add("5"); 5851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail("transformed list is addable"); 5861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (UnsupportedOperationException expected) {} 5871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert list.remove(0); 5881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(asList("2", "3", "4"), list); 5891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert list.remove("3"); 5901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(asList("2", "4"), list); 5911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 5921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert list.set(0, "5"); 5931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail("transformed list is setable"); 5941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (UnsupportedOperationException expected) {} 5951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert list.clear(); 5961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Collections.emptyList(), list); 5971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testTransformViewRandomAccess() { 6001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<Integer> fromList = Lists.newArrayList(SOME_LIST); 6011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> toList = Lists.transform(fromList, SOME_FUNCTION); 6021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTransformView(fromList, toList); 6031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testTransformViewSequential() { 6061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<Integer> fromList = Lists.newLinkedList(SOME_SEQUENTIAL_LIST); 6071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> toList = Lists.transform(fromList, SOME_FUNCTION); 6081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTransformView(fromList, toList); 6091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static void assertTransformView(List<Integer> fromList, 6121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> toList) { 6131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /* fromList modifications reflected in toList */ 6141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fromList.set(0, 5); 6151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(asList("5", "2", "3", "4"), toList); 6161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fromList.add(6); 6171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(asList("5", "2", "3", "4", "6"), toList); 6181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fromList.remove(Integer.valueOf(2)); 6191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(asList("5", "3", "4", "6"), toList); 6201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fromList.remove(2); 6211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(asList("5", "3", "6"), toList); 6221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /* toList modifications reflected in fromList */ 6241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert toList.remove(2); 6251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(asList(5, 3), fromList); 6261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert toList.remove("5"); 6271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(asList(3), fromList); 6281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert toList.clear(); 6291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Collections.emptyList(), fromList); 6301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testTransformRandomAccess() { 6331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> list = Lists.transform(SOME_LIST, SOME_FUNCTION); 6341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(list instanceof RandomAccess); 6351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testTransformSequential() { 6381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> list = Lists.transform(SOME_SEQUENTIAL_LIST, SOME_FUNCTION); 6391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(list instanceof RandomAccess); 6401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testTransformListIteratorRandomAccess() { 6431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<Integer> fromList = Lists.newArrayList(SOME_LIST); 6441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> list = Lists.transform(fromList, SOME_FUNCTION); 6451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTransformListIterator(list); 6461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testTransformListIteratorSequential() { 6491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<Integer> fromList = Lists.newLinkedList(SOME_SEQUENTIAL_LIST); 6501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> list = Lists.transform(fromList, SOME_FUNCTION); 6511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTransformListIterator(list); 6521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static void assertTransformListIterator(List<String> list) { 6551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ListIterator<String> iterator = list.listIterator(1); 6561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(1, iterator.nextIndex()); 6571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("2", iterator.next()); 6581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("3", iterator.next()); 6591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("4", iterator.next()); 6601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(4, iterator.nextIndex()); 6611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 6621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert iterator.next(); 6631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail("did not detect end of list"); 6641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NoSuchElementException expected) {} 6651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(3, iterator.previousIndex()); 6661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("4", iterator.previous()); 6671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("3", iterator.previous()); 6681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("2", iterator.previous()); 6691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(iterator.hasPrevious()); 6701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("1", iterator.previous()); 6711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(iterator.hasPrevious()); 6721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(-1, iterator.previousIndex()); 6731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 6741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert iterator.previous(); 6751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail("did not detect beginning of list"); 6761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NoSuchElementException expected) {} 6771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert iterator.remove(); 6781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(asList("2", "3", "4"), list); 6791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(list.isEmpty()); 6801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // An UnsupportedOperationException or IllegalStateException may occur. 6821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 6831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert iterator.add("1"); 6841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail("transformed list iterator is addable"); 6851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (UnsupportedOperationException expected) { 6861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IllegalStateException expected) {} 6871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 6881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert iterator.set("1"); 6891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail("transformed list iterator is settable"); 6901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (UnsupportedOperationException expected) { 6911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IllegalStateException expected) {} 6921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testTransformIteratorRandomAccess() { 6951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<Integer> fromList = Lists.newArrayList(SOME_LIST); 6961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> list = Lists.transform(fromList, SOME_FUNCTION); 6971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTransformIterator(list); 6981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testTransformIteratorSequential() { 7011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<Integer> fromList = Lists.newLinkedList(SOME_SEQUENTIAL_LIST); 7021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> list = Lists.transform(fromList, SOME_FUNCTION); 7031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTransformIterator(list); 7041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /** 7071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * We use this class to avoid the need to suppress generics checks with 7081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * easy mock. 7091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 7101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private interface IntegerList extends List<Integer> {} 7111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /** 7131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * This test depends on the fact that {@code AbstractSequentialList.iterator} 7141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * transforms the {@code iterator()} call into a call on {@code 7151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * listIterator(int)}. This is fine because the behavior is clearly 7161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * documented so it's not expected to change. 7171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 7181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("EsayMock") 7191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testTransformedSequentialIterationUsesBackingListIterationOnly() { 7201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<Integer> randomAccessList = Lists.newArrayList(SOME_SEQUENTIAL_LIST); 7211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ListIterator<Integer> sampleListIterator = 7221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SOME_SEQUENTIAL_LIST.listIterator(); 7231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<Integer> listMock = EasyMock.createMock(IntegerList.class); 7241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert EasyMock.expect(listMock.listIterator(0)).andReturn(sampleListIterator); 7251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert EasyMock.replay(listMock); 7261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> transform = Lists.transform(listMock, SOME_FUNCTION); 7271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(Iterables.elementsEqual( 7281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert transform, Lists.transform(randomAccessList, SOME_FUNCTION))); 7291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert EasyMock.verify(listMock); 7301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static void assertTransformIterator(List<String> list) { 7331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> iterator = list.iterator(); 7341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(iterator.hasNext()); 7351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("1", iterator.next()); 7361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(iterator.hasNext()); 7371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("2", iterator.next()); 7381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(iterator.hasNext()); 7391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("3", iterator.next()); 7401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(iterator.hasNext()); 7411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("4", iterator.next()); 7421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(iterator.hasNext()); 7431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 7441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert iterator.next(); 7451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail("did not detect end of list"); 7461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NoSuchElementException expected) {} 7471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert iterator.remove(); 7481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(asList("1", "2", "3"), list); 7491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(iterator.hasNext()); 7501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testPartition_badSize() { 7531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<Integer> source = Collections.singletonList(1); 7541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 7551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Lists.partition(source, 0); 7561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 7571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IllegalArgumentException expected) { 7581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testPartition_empty() { 7621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<Integer> source = Collections.emptyList(); 7631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<List<Integer>> partitions = Lists.partition(source, 1); 7641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(partitions.isEmpty()); 7651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0, partitions.size()); 7661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testPartition_1_1() { 7691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<Integer> source = Collections.singletonList(1); 7701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<List<Integer>> partitions = Lists.partition(source, 1); 7711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(1, partitions.size()); 7721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Collections.singletonList(1), partitions.get(0)); 7731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testPartition_1_2() { 7761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<Integer> source = Collections.singletonList(1); 7771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<List<Integer>> partitions = Lists.partition(source, 2); 7781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(1, partitions.size()); 7791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Collections.singletonList(1), partitions.get(0)); 7801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testPartition_2_1() { 7831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<Integer> source = asList(1, 2); 7841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<List<Integer>> partitions = Lists.partition(source, 1); 7851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(2, partitions.size()); 7861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Collections.singletonList(1), partitions.get(0)); 7871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Collections.singletonList(2), partitions.get(1)); 7881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testPartition_3_2() { 7911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<Integer> source = asList(1, 2, 3); 7921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<List<Integer>> partitions = Lists.partition(source, 2); 7931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(2, partitions.size()); 7941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(asList(1, 2), partitions.get(0)); 7951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(asList(3), partitions.get(1)); 7961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("ArrayList.subList doesn't implement RandomAccess in GWT.") 7991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testPartitionRandomAccessTrue() { 8001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<Integer> source = asList(1, 2, 3); 8011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<List<Integer>> partitions = Lists.partition(source, 2); 8021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue("partition should be RandomAccess, but not: " 8041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert + partitions.getClass(), 8051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert partitions instanceof RandomAccess); 8061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue("partition[0] should be RandomAccess, but not: " 8081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert + partitions.get(0).getClass(), 8091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert partitions.get(0) instanceof RandomAccess); 8101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue("partition[1] should be RandomAccess, but not: " 8121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert + partitions.get(1).getClass(), 8131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert partitions.get(1) instanceof RandomAccess); 8141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testPartitionRandomAccessFalse() { 8171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<Integer> source = Lists.newLinkedList(asList(1, 2, 3)); 8181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<List<Integer>> partitions = Lists.partition(source, 2); 8191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(partitions instanceof RandomAccess); 8201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(partitions.get(0) instanceof RandomAccess); 8211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(partitions.get(1) instanceof RandomAccess); 8221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // TODO: use the ListTestSuiteBuilder 8251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testPartition_view() { 8271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<Integer> list = asList(1, 2, 3); 8281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<List<Integer>> partitions = Lists.partition(list, 3); 8291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Changes before the partition is retrieved are reflected 8311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert list.set(0, 3); 8321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<List<Integer>> iterator = partitions.iterator(); 8341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Changes before the partition is retrieved are reflected 8361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert list.set(1, 4); 8371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<Integer> first = iterator.next(); 8391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Changes after are too (unlike Iterables.partition) 8411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert list.set(2, 5); 8421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(asList(3, 4, 5), first); 8441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Changes to a sublist also write through to the original list 8461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert first.set(1, 6); 8471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(asList(3, 6, 5), list); 8481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testPartitionSize_1() { 8511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<Integer> list = asList(1, 2, 3); 8521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(1, Lists.partition(list, Integer.MAX_VALUE).size()); 8531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(1, Lists.partition(list, Integer.MAX_VALUE - 1).size()); 8541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("cannot do such a big explicit copy") 8571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testPartitionSize_2() { 8581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(2, Lists.partition(Collections.nCopies(0x40000001, 1), 0x40000000).size()); 8591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // These tests are quick and basic and don't actually show unmodifiability... 8621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert} 863