11d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/* 21d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Copyright (C) 2008 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 Bringert 211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.annotations.GwtCompatible; 221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.annotations.GwtIncompatible; 231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.base.Function; 241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.base.Functions; 251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.Table.Cell; 261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.CollectionTestSuiteBuilder; 271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.MapInterfaceTest; 281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.SampleElements; 291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.SetTestSuiteBuilder; 300888a09821a98ac0680fad765217302858e70fa4Paul Duffinimport com.google.common.collect.testing.SortedSetTestSuiteBuilder; 311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.TestSetGenerator; 321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.TestStringCollectionGenerator; 331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.TestStringSetGenerator; 340888a09821a98ac0680fad765217302858e70fa4Paul Duffinimport com.google.common.collect.testing.TestStringSortedSetGenerator; 351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.features.CollectionFeature; 361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.features.CollectionSize; 371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.features.Feature; 381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 390888a09821a98ac0680fad765217302858e70fa4Paul Duffinimport junit.framework.Test; 400888a09821a98ac0680fad765217302858e70fa4Paul Duffinimport junit.framework.TestCase; 410888a09821a98ac0680fad765217302858e70fa4Paul Duffinimport junit.framework.TestSuite; 420888a09821a98ac0680fad765217302858e70fa4Paul Duffin 431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Arrays; 441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Collection; 451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Collections; 461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.List; 471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Map; 481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Set; 491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.SortedMap; 500888a09821a98ac0680fad765217302858e70fa4Paul Duffinimport java.util.SortedSet; 517dd252788645e940eada959bdde927426e2531c9Paul Duffin 521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/** 531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Collection tests for {@link Table} implementations. 541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * @author Jared Levy 561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * @author Louis Wasserman 571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert@GwtCompatible(emulated = true) 591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertpublic class TableCollectionTest extends TestCase { 601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static final Feature<?>[] COLLECTION_FEATURES = { 621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionSize.ANY, 631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionFeature.ALLOWS_NULL_QUERIES 641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }; 651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static final Feature<?>[] COLLECTION_FEATURES_ORDER = { 671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionSize.ANY, 681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionFeature.KNOWN_ORDER, 691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionFeature.ALLOWS_NULL_QUERIES 701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }; 711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static final Feature<?>[] COLLECTION_FEATURES_REMOVE = { 731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionSize.ANY, 747dd252788645e940eada959bdde927426e2531c9Paul Duffin CollectionFeature.SUPPORTS_REMOVE, 751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionFeature.ALLOWS_NULL_QUERIES 761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }; 771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static final Feature<?>[] COLLECTION_FEATURES_REMOVE_ORDER = { 791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionSize.ANY, 801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionFeature.KNOWN_ORDER, 817dd252788645e940eada959bdde927426e2531c9Paul Duffin CollectionFeature.SUPPORTS_REMOVE, 821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionFeature.ALLOWS_NULL_QUERIES 831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }; 841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("suite") 861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static Test suite() { 871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert TestSuite suite = new TestSuite(); 881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTestSuite(ArrayRowTests.class); 891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTestSuite(HashRowTests.class); 901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTestSuite(TreeRowTests.class); 911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTestSuite(TransposeRowTests.class); 921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTestSuite(TransformValueRowTests.class); 931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTestSuite(UnmodifiableHashRowTests.class); 941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTestSuite(UnmodifiableTreeRowTests.class); 951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTestSuite(ArrayColumnTests.class); 961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTestSuite(HashColumnTests.class); 971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTestSuite(TreeColumnTests.class); 981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTestSuite(TransposeColumnTests.class); 991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTestSuite(TransformValueColumnTests.class); 1001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTestSuite(UnmodifiableHashColumnTests.class); 1011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTestSuite(UnmodifiableTreeColumnTests.class); 1021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTestSuite(ArrayRowMapTests.class); 1031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTestSuite(HashRowMapTests.class); 1041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTestSuite(TreeRowMapTests.class); 1051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTestSuite(TreeRowMapHeadMapTests.class); 1061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTestSuite(TreeRowMapTailMapTests.class); 1071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTestSuite(TreeRowMapSubMapTests.class); 1081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTestSuite(TransformValueRowMapTests.class); 1091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTestSuite(UnmodifiableHashRowMapTests.class); 1101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTestSuite(UnmodifiableTreeRowMapTests.class); 1111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTestSuite(ArrayColumnMapTests.class); 1121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTestSuite(HashColumnMapTests.class); 1131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTestSuite(TreeColumnMapTests.class); 1141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTestSuite(TransformValueColumnMapTests.class); 1151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTestSuite(UnmodifiableHashColumnMapTests.class); 1161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTestSuite(UnmodifiableTreeColumnMapTests.class); 1171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Not testing rowKeySet() or columnKeySet() of Table.transformValues() 1191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // since the transformation doesn't affect the row and column key sets. 1201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() { 1221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Set<String> create(String[] elements) { 1231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<String, Integer, Character> table 1241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = ArrayTable.create( 1251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableList.copyOf(elements), ImmutableList.of(1, 2)); 1261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert populateForRowKeySet(table, elements); 1271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return table.rowKeySet(); 1281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }) 1301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .named("ArrayTable.rowKeySet") 1311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .withFeatures(CollectionSize.ONE, CollectionSize.SEVERAL, 1321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionFeature.KNOWN_ORDER, 1331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionFeature.REJECTS_DUPLICATES_AT_CREATION, 1341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionFeature.ALLOWS_NULL_QUERIES) 1351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .createTestSuite()); 1361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() { 1381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Set<String> create(String[] elements) { 1391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<String, Integer, Character> table = HashBasedTable.create(); 1401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert populateForRowKeySet(table, elements); 1411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return table.rowKeySet(); 1421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }) 1441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .named("HashBasedTable.rowKeySet") 1451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .withFeatures(COLLECTION_FEATURES_REMOVE) 1460888a09821a98ac0680fad765217302858e70fa4Paul Duffin .withFeatures(CollectionFeature.SUPPORTS_ITERATOR_REMOVE) 1471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .createTestSuite()); 1481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1490888a09821a98ac0680fad765217302858e70fa4Paul Duffin suite.addTest(SortedSetTestSuiteBuilder.using(new TestStringSortedSetGenerator() { 1500888a09821a98ac0680fad765217302858e70fa4Paul Duffin @Override protected SortedSet<String> create(String[] elements) { 1510888a09821a98ac0680fad765217302858e70fa4Paul Duffin TreeBasedTable<String, Integer, Character> table = TreeBasedTable.create(); 1521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert populateForRowKeySet(table, elements); 1531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return table.rowKeySet(); 1541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public List<String> order(List<String> insertionOrder) { 1571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collections.sort(insertionOrder); 1581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return insertionOrder; 1591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }) 1611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .named("TreeBasedTable.rowKeySet") 1621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .withFeatures(COLLECTION_FEATURES_REMOVE_ORDER) 1630888a09821a98ac0680fad765217302858e70fa4Paul Duffin .withFeatures(CollectionFeature.SUPPORTS_ITERATOR_REMOVE) 1641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .createTestSuite()); 1657dd252788645e940eada959bdde927426e2531c9Paul Duffin 1661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() { 1671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Set<String> create(String[] elements) { 1681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<String, Integer, Character> table = HashBasedTable.create(); 1691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert populateForRowKeySet(table, elements); 1701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Tables.unmodifiableTable(table).rowKeySet(); 1711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }) 1731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .named("unmodifiableTable[HashBasedTable].rowKeySet") 1741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .withFeatures(COLLECTION_FEATURES) 1751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .createTestSuite()); 1761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() { 1781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Set<String> create(String[] elements) { 1791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert RowSortedTable<String, Integer, Character> table = TreeBasedTable.create(); 1801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert populateForRowKeySet(table, elements); 1811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Tables.unmodifiableRowSortedTable(table).rowKeySet(); 1821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public List<String> order(List<String> insertionOrder) { 1851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collections.sort(insertionOrder); 1861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return insertionOrder; 1871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }) 1891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .named("unmodifiableRowSortedTable[TreeBasedTable].rowKeySet") 1901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .withFeatures(COLLECTION_FEATURES_ORDER) 1911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .createTestSuite()); 1921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() { 1941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Set<String> create(String[] elements) { 1951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<Integer, String, Character> table 1961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = ArrayTable.create( 1971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableList.of(1, 2), ImmutableList.copyOf(elements)); 1981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert populateForColumnKeySet(table, elements); 1991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return table.columnKeySet(); 2001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }) 2021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .named("ArrayTable.columnKeySet") 2031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .withFeatures(CollectionSize.ONE, CollectionSize.SEVERAL, 2041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionFeature.KNOWN_ORDER, 2051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionFeature.REJECTS_DUPLICATES_AT_CREATION, 2061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionFeature.ALLOWS_NULL_QUERIES) 2071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .createTestSuite()); 2081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() { 2101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Set<String> create(String[] elements) { 2111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<Integer, String, Character> table = HashBasedTable.create(); 2121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert populateForColumnKeySet(table, elements); 2131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return table.columnKeySet(); 2141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }) 2161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .named("HashBasedTable.columnKeySet") 2171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .withFeatures(COLLECTION_FEATURES_REMOVE) 2181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .createTestSuite()); 2191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() { 2211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Set<String> create(String[] elements) { 2221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<Integer, String, Character> table = TreeBasedTable.create(); 2231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert populateForColumnKeySet(table, elements); 2241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return table.columnKeySet(); 2251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public List<String> order(List<String> insertionOrder) { 2281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collections.sort(insertionOrder); 2291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return insertionOrder; 2301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }) 2321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .named("TreeBasedTable.columnKeySet") 2331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .withFeatures(COLLECTION_FEATURES_REMOVE_ORDER) 2341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .createTestSuite()); 2351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() { 2371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Set<String> create(String[] elements) { 2381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<Integer, String, Character> table = HashBasedTable.create(); 2391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert populateForColumnKeySet(table, elements); 2401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Tables.unmodifiableTable(table).columnKeySet(); 2411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }) 2431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .named("unmodifiableTable[HashBasedTable].columnKeySet") 2441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .withFeatures(COLLECTION_FEATURES) 2451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .createTestSuite()); 2461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() { 2481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Set<String> create(String[] elements) { 2491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert RowSortedTable<Integer, String, Character> table = TreeBasedTable.create(); 2501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert populateForColumnKeySet(table, elements); 2511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Tables.unmodifiableRowSortedTable(table).columnKeySet(); 2521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public List<String> order(List<String> insertionOrder) { 2551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collections.sort(insertionOrder); 2561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return insertionOrder; 2571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }) 2591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .named("unmodifiableRowSortedTable[TreeBasedTable].columnKeySet") 2601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .withFeatures(COLLECTION_FEATURES_ORDER) 2611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .createTestSuite()); 2621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTest(CollectionTestSuiteBuilder.using( 2641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new TestStringCollectionGenerator() { 2651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Collection<String> create(String[] elements) { 2661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<Integer> rowKeys = Lists.newArrayList(); 2671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (int i = 0; i < elements.length; i++) { 2681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert rowKeys.add(i); 2691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<Integer, Character, String> table 2711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = ArrayTable.create(rowKeys, ImmutableList.of('a')); 2721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert populateForValues(table, elements); 2731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return table.values(); 2741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }) 2761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .named("ArrayTable.values") 2771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .withFeatures(CollectionSize.ONE, CollectionSize.SEVERAL, 2781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionFeature.ALLOWS_NULL_VALUES, 2791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionFeature.KNOWN_ORDER) 2801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .createTestSuite()); 2811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTest(CollectionTestSuiteBuilder.using( 2831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new TestStringCollectionGenerator() { 2841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Collection<String> create(String[] elements) { 2851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<Integer, Character, String> table = HashBasedTable.create(); 2861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put(1, 'a', "foo"); 2871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.clear(); 2881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert populateForValues(table, elements); 2891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return table.values(); 2901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }) 2921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .named("HashBasedTable.values") 2931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .withFeatures(COLLECTION_FEATURES_REMOVE) 2940888a09821a98ac0680fad765217302858e70fa4Paul Duffin .withFeatures(CollectionFeature.SUPPORTS_ITERATOR_REMOVE) 2951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .createTestSuite()); 2961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTest(CollectionTestSuiteBuilder.using( 2981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new TestStringCollectionGenerator() { 2991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Collection<String> create(String[] elements) { 3001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<Integer, Character, String> table = TreeBasedTable.create(); 3011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put(1, 'a', "foo"); 3021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.clear(); 3031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert populateForValues(table, elements); 3041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return table.values(); 3051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }) 3071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .named("TreeBasedTable.values") 3081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .withFeatures(COLLECTION_FEATURES_REMOVE_ORDER) 3090888a09821a98ac0680fad765217302858e70fa4Paul Duffin .withFeatures(CollectionFeature.SUPPORTS_ITERATOR_REMOVE) 3101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .createTestSuite()); 3111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert final Function<String, String> removeFirstCharacter 3131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = new Function<String, String>() { 3141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public String apply(String input) { 3151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return input.substring(1); 3161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }; 3181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTest(CollectionTestSuiteBuilder.using( 3201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new TestStringCollectionGenerator() { 3211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Collection<String> create(String[] elements) { 3221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<Integer, Character, String> table = HashBasedTable.create(); 3231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (int i = 0; i < elements.length; i++) { 3241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put(i, 'a', "x" + checkNotNull(elements[i])); 3251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Tables.transformValues(table, removeFirstCharacter).values(); 3271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }) 3291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .named("TransformValues.values") 3301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .withFeatures(COLLECTION_FEATURES_REMOVE) 3310888a09821a98ac0680fad765217302858e70fa4Paul Duffin .withFeatures(CollectionFeature.SUPPORTS_ITERATOR_REMOVE) 3321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .createTestSuite()); 3331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTest(CollectionTestSuiteBuilder.using( 3351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new TestStringCollectionGenerator() { 3361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Collection<String> create(String[] elements) { 3371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<Integer, Character, String> table = HashBasedTable.create(); 3381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put(1, 'a', "foo"); 3391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.clear(); 3401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert populateForValues(table, elements); 3411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Tables.unmodifiableTable(table).values(); 3421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }) 3441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .named("unmodifiableTable[HashBasedTable].values") 3451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .withFeatures(COLLECTION_FEATURES) 3461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .createTestSuite()); 3471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTest(CollectionTestSuiteBuilder.using( 3491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new TestStringCollectionGenerator() { 3501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Collection<String> create(String[] elements) { 3511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert RowSortedTable<Integer, Character, String> table = TreeBasedTable.create(); 3521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put(1, 'a', "foo"); 3531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.clear(); 3541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert populateForValues(table, elements); 3551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Tables.unmodifiableRowSortedTable(table).values(); 3561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }) 3581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .named("unmodifiableTable[TreeBasedTable].values") 3591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .withFeatures(COLLECTION_FEATURES_ORDER) 3601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .createTestSuite()); 3611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTest(SetTestSuiteBuilder.using(new TestCellSetGenerator() { 3631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public SampleElements<Cell<String, Integer, Character>> 3641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert samples() { 3651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return new SampleElements<Cell<String, Integer, Character>>( 3661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Tables.immutableCell("bar", 1, 'a'), 3671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Tables.immutableCell("bar", 2, 'b'), 3681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Tables.immutableCell("bar", 3, (Character) null), 3691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Tables.immutableCell("bar", 4, 'b'), 3701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Tables.immutableCell("bar", 5, 'b')); 3711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public Set<Cell<String, Integer, Character>> create( 3731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Object... elements) { 3741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<Integer> columnKeys = Lists.newArrayList(); 3751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (Object element : elements) { 3761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @SuppressWarnings("unchecked") 3771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Cell<String, Integer, Character> cell 3781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = (Cell<String, Integer, Character>) element; 3791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert columnKeys.add(cell.getColumnKey()); 3801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<String, Integer, Character> table 3821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = ArrayTable.create(ImmutableList.of("bar"), columnKeys); 3831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (Object element : elements) { 3841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @SuppressWarnings("unchecked") 3851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Cell<String, Integer, Character> cell 3861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = (Cell<String, Integer, Character>) element; 3871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put(cell.getRowKey(), cell.getColumnKey(), cell.getValue()); 3881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return table.cellSet(); 3901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override Table<String, Integer, Character> createTable() { 3921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert throw new UnsupportedOperationException(); 3931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }) 3951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .named("ArrayTable.cellSet") 3961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .withFeatures(CollectionSize.ONE, CollectionSize.SEVERAL, 3971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionFeature.KNOWN_ORDER, 3981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionFeature.REJECTS_DUPLICATES_AT_CREATION, 3991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionFeature.ALLOWS_NULL_QUERIES) 4001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .createTestSuite()); 4011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTest(SetTestSuiteBuilder.using(new TestCellSetGenerator() { 4031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override Table<String, Integer, Character> createTable() { 4041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return HashBasedTable.create(); 4051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }) 4071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .named("HashBasedTable.cellSet") 4080888a09821a98ac0680fad765217302858e70fa4Paul Duffin .withFeatures(CollectionSize.ANY, CollectionFeature.REMOVE_OPERATIONS, 4091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionFeature.ALLOWS_NULL_QUERIES) 4101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .createTestSuite()); 4111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTest(SetTestSuiteBuilder.using(new TestCellSetGenerator() { 4131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override Table<String, Integer, Character> createTable() { 4141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return TreeBasedTable.create(); 4151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }) 4171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .named("TreeBasedTable.cellSet") 4180888a09821a98ac0680fad765217302858e70fa4Paul Duffin .withFeatures(CollectionSize.ANY, CollectionFeature.REMOVE_OPERATIONS, 4191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionFeature.ALLOWS_NULL_QUERIES) 4201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .createTestSuite()); 4211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTest(SetTestSuiteBuilder.using(new TestCellSetGenerator() { 4231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override Table<String, Integer, Character> createTable() { 4241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<Integer, String, Character> original 4251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = TreeBasedTable.create(); 4261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Tables.transpose(original); 4271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }) 4291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .named("TransposedTable.cellSet") 4300888a09821a98ac0680fad765217302858e70fa4Paul Duffin .withFeatures(CollectionSize.ANY, CollectionFeature.REMOVE_OPERATIONS, 4311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionFeature.ALLOWS_NULL_QUERIES) 4321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .createTestSuite()); 4331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTest(SetTestSuiteBuilder.using(new TestCellSetGenerator() { 4351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override Table<String, Integer, Character> createTable() { 4361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return HashBasedTable.create(); 4371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override 4391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public Set<Cell<String, Integer, Character>> create( 4401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Object... elements) { 4411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<String, Integer, Character> table = createTable(); 4421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (Object element : elements) { 4431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @SuppressWarnings("unchecked") 4441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Cell<String, Integer, Character> cell 4451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = (Cell<String, Integer, Character>) element; 4461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put(cell.getRowKey(), cell.getColumnKey(), cell.getValue()); 4471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Tables.transformValues(table, Functions.<Character>identity()).cellSet(); 4491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }) 4511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .named("TransformValues.cellSet") 4527dd252788645e940eada959bdde927426e2531c9Paul Duffin .withFeatures(CollectionSize.ANY, CollectionFeature.ALLOWS_NULL_QUERIES, 4530888a09821a98ac0680fad765217302858e70fa4Paul Duffin CollectionFeature.REMOVE_OPERATIONS) 4541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .createTestSuite()); 4551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTest(SetTestSuiteBuilder.using(new TestCellSetGenerator() { 4571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override Table<String, Integer, Character> createTable() { 4581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Tables.unmodifiableTable(HashBasedTable.<String, Integer, Character> create()); 4591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override 4611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public Set<Cell<String, Integer, Character>> create( 4621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Object... elements) { 4631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<String, Integer, Character> table = HashBasedTable.create(); 4641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (Object element : elements) { 4651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @SuppressWarnings("unchecked") 4661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Cell<String, Integer, Character> cell 4671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = (Cell<String, Integer, Character>) element; 4681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put(cell.getRowKey(), cell.getColumnKey(), cell.getValue()); 4691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Tables.unmodifiableTable(table).cellSet(); 4711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }) 4731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .named("unmodifiableTable[HashBasedTable].cellSet") 4741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .withFeatures(CollectionSize.ANY, CollectionFeature.ALLOWS_NULL_QUERIES) 4751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .createTestSuite()); 4761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTest(SetTestSuiteBuilder.using(new TestCellSetGenerator() { 4781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override RowSortedTable<String, Integer, Character> createTable() { 4791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Tables.unmodifiableRowSortedTable(TreeBasedTable 4801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .<String, Integer, Character> create()); 4811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override 4831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public Set<Cell<String, Integer, Character>> create( 4841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Object... elements) { 4851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert RowSortedTable<String, Integer, Character> table = TreeBasedTable.create(); 4861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (Object element : elements) { 4871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @SuppressWarnings("unchecked") 4881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Cell<String, Integer, Character> cell 4891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = (Cell<String, Integer, Character>) element; 4901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put(cell.getRowKey(), cell.getColumnKey(), cell.getValue()); 4911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Tables.unmodifiableRowSortedTable(table).cellSet(); 4931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }) 4951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .named("unmodifiableRowSortedTable[TreeBasedTable].cellSet") 4961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .withFeatures(CollectionSize.ANY, CollectionFeature.ALLOWS_NULL_QUERIES) 4971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .createTestSuite()); 4981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() { 5001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Set<String> create(String[] elements) { 5011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> rowKeys = ImmutableSet.copyOf(elements); 5021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<Integer> columnKeys = ImmutableList.of(1, 2, 3); 5031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<String, Integer, Character> table 5041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = ArrayTable.create(rowKeys, columnKeys); 5051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert populateForRowKeySet(table, elements); 5061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return table.column(1).keySet(); 5071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }) 5091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .named("ArrayTable.column.keySet") 5101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .withFeatures(CollectionSize.ONE, CollectionSize.SEVERAL, 5111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionFeature.KNOWN_ORDER, 5121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionFeature.ALLOWS_NULL_QUERIES) 5131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .createTestSuite()); 5141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() { 5161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Set<String> create(String[] elements) { 5171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<String, Integer, Character> table = HashBasedTable.create(); 5181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert populateForRowKeySet(table, elements); 5191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return table.column(1).keySet(); 5201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }) 5221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .named("HashBasedTable.column.keySet") 5231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .withFeatures(COLLECTION_FEATURES_REMOVE) 5241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .createTestSuite()); 5251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() { 5271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Set<String> create(String[] elements) { 5281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<String, Integer, Character> table = TreeBasedTable.create(); 5291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert populateForRowKeySet(table, elements); 5301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return table.column(1).keySet(); 5311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public List<String> order(List<String> insertionOrder) { 5331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collections.sort(insertionOrder); 5341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return insertionOrder; 5351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }) 5371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .named("TreeBasedTable.column.keySet") 5381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .withFeatures(COLLECTION_FEATURES_REMOVE_ORDER) 5391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .createTestSuite()); 5401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() { 5421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Set<String> create(String[] elements) { 5431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<String, Integer, Character> table = HashBasedTable.create(); 5441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert populateForRowKeySet(table, elements); 5451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Tables.transformValues(table, Functions.toStringFunction()).column(1).keySet(); 5461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }) 5481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .named("TransformValues.column.keySet") 5491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .withFeatures(COLLECTION_FEATURES_REMOVE) 5501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .createTestSuite()); 5511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() { 5531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Set<String> create(String[] elements) { 5541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<String, Integer, Character> table = HashBasedTable.create(); 5551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert populateForRowKeySet(table, elements); 5561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Tables.unmodifiableTable(table).column(1).keySet(); 5571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }) 5591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .named("unmodifiableTable[HashBasedTable].column.keySet") 5601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .withFeatures(COLLECTION_FEATURES) 5611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .createTestSuite()); 5621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() { 5641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Set<String> create(String[] elements) { 5651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert RowSortedTable<String, Integer, Character> table = TreeBasedTable.create(); 5661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert populateForRowKeySet(table, elements); 5671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Tables.unmodifiableRowSortedTable(table).column(1).keySet(); 5681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public List<String> order(List<String> insertionOrder) { 5701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collections.sort(insertionOrder); 5711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return insertionOrder; 5721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }) 5741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .named("unmodifiableRowSortedTable[TreeBasedTable].column.keySet") 5751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .withFeatures(COLLECTION_FEATURES_ORDER) 5761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .createTestSuite()); 5771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return suite; 5791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static void populateForRowKeySet( 5821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<String, Integer, Character> table, String[] elements) { 5831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (String row : elements) { 5841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put(row, 1, 'a'); 5851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put(row, 2, 'b'); 5861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static void populateForColumnKeySet( 5901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<Integer, String, Character> table, String[] elements) { 5911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (String column : elements) { 5921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put(1, column, 'a'); 5931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put(2, column, 'b'); 5941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static void populateForValues( 5981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<Integer, Character, String> table, String[] elements) { 5991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (int i = 0; i < elements.length; i++) { 6001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put(i, 'a', elements[i]); 6011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static abstract class TestCellSetGenerator 6051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert implements TestSetGenerator<Cell<String, Integer, Character>> { 6061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override 6071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public SampleElements<Cell<String, Integer, Character>> samples() { 6081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return new SampleElements<Cell<String, Integer, Character>>( 6091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Tables.immutableCell("bar", 1, 'a'), 6101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Tables.immutableCell("bar", 2, 'b'), 6111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Tables.immutableCell("foo", 3, 'c'), 6121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Tables.immutableCell("bar", 1, 'b'), 6131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Tables.immutableCell("cat", 2, 'b')); 6141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override 6171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public Set<Cell<String, Integer, Character>> create( 6181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Object... elements) { 6191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<String, Integer, Character> table = createTable(); 6201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (Object element : elements) { 6211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @SuppressWarnings("unchecked") 6221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Cell<String, Integer, Character> cell 6231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = (Cell<String, Integer, Character>) element; 6241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put(cell.getRowKey(), cell.getColumnKey(), cell.getValue()); 6251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return table.cellSet(); 6271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert abstract Table<String, Integer, Character> createTable(); 6301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override 6321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @SuppressWarnings("unchecked") 6331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public Cell<String, Integer, Character>[] createArray(int length) { 6341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return (Cell<String, Integer, Character>[]) new Cell<?, ?, ?>[length]; 6351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override 6381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public List<Cell<String, Integer, Character>> order( 6391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<Cell<String, Integer, Character>> insertionOrder) { 6401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return insertionOrder; 6411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static abstract class MapTests 6451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert extends MapInterfaceTest<String, Integer> { 6461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert MapTests(boolean allowsNullValues, boolean supportsPut, boolean supportsRemove, 6481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert boolean supportsClear, boolean supportsIteratorRemove) { 6491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert super(false, allowsNullValues, supportsPut, supportsRemove, supportsClear, 6501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert supportsIteratorRemove); 6511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected String getKeyNotInPopulatedMap() { 6541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return "four"; 6551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Integer getValueNotInPopulatedMap() { 6581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return 4; 6591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static abstract class RowTests extends MapTests { 6631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert RowTests(boolean allowsNullValues, boolean supportsPut, boolean supportsRemove, 6641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert boolean supportsClear, boolean supportsIteratorRemove) { 6651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert super(allowsNullValues, supportsPut, supportsRemove, supportsClear, 6661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert supportsIteratorRemove); 6671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert abstract Table<Character, String, Integer> makeTable(); 6701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Map<String, Integer> makeEmptyMap() { 6721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return makeTable().row('a'); 6731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Map<String, Integer> makePopulatedMap() { 6761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<Character, String, Integer> table = makeTable(); 6771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put('a', "one", 1); 6781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put('a', "two", 2); 6791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put('a', "three", 3); 6801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put('b', "four", 4); 6811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return table.row('a'); 6821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("TODO(hhchan): ArrayTable") 6861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static class ArrayRowTests extends RowTests { 6871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public ArrayRowTests() { 6881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert super(true, true, false, false, false); 6891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected String getKeyNotInPopulatedMap() { 6921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert throw new UnsupportedOperationException(); 6931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Map<String, Integer> makeEmptyMap() { 6961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert throw new UnsupportedOperationException(); 6971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Table<Character, String, Integer> makeTable() { 7001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return ArrayTable.create(Arrays.asList('a', 'b', 'c'), 7011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Arrays.asList("one", "two", "three", "four")); 7021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static class HashRowTests extends RowTests { 7061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public HashRowTests() { 7071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert super(false, true, true, true, true); 7081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override Table<Character, String, Integer> makeTable() { 7111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return HashBasedTable.create(); 7121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static class TreeRowTests extends RowTests { 7161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public TreeRowTests() { 7171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert super(false, true, true, true, true); 7181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override Table<Character, String, Integer> makeTable() { 7211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return TreeBasedTable.create(); 7221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static class TransposeRowTests extends RowTests { 7261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public TransposeRowTests() { 7271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert super(false, true, true, true, false); 7281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override Table<Character, String, Integer> makeTable() { 7311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<String, Character, Integer> original = TreeBasedTable.create(); 7321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Tables.transpose(original); 7331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static final Function<Integer, Integer> DIVIDE_BY_2 7371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = new Function<Integer, Integer>() { 7381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public Integer apply(Integer input) { 7391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return (input == null) ? null : input / 2; 7401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }; 7421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static class TransformValueRowTests extends RowTests { 7441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public TransformValueRowTests() { 7451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert super(false, false, true, true, true); 7461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override Table<Character, String, Integer> makeTable() { 7491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<Character, String, Integer> table = HashBasedTable.create(); 7501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Tables.transformValues(table, DIVIDE_BY_2); 7511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Map<String, Integer> makePopulatedMap() { 7541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<Character, String, Integer> table = HashBasedTable.create(); 7551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put('a', "one", 2); 7561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put('a', "two", 4); 7571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put('a', "three", 6); 7581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put('b', "four", 8); 7591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Tables.transformValues(table, DIVIDE_BY_2).row('a'); 7601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static class UnmodifiableHashRowTests extends RowTests { 7641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public UnmodifiableHashRowTests() { 7651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert super(false, false, false, false, false); 7661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override Table<Character, String, Integer> makeTable() { 7691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<Character, String, Integer> table = HashBasedTable.create(); 7701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Tables.unmodifiableTable(table); 7711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Map<String, Integer> makePopulatedMap() { 7741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<Character, String, Integer> table = HashBasedTable.create(); 7751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put('a', "one", 1); 7761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put('a', "two", 2); 7771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put('a', "three", 3); 7781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put('b', "four", 4); 7791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Tables.unmodifiableTable(table).row('a'); 7801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static class UnmodifiableTreeRowTests extends RowTests { 7841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public UnmodifiableTreeRowTests() { 7851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert super(false, false, false, false, false); 7861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override Table<Character, String, Integer> makeTable() { 7891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert RowSortedTable<Character, String, Integer> table = TreeBasedTable.create(); 7901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Tables.unmodifiableRowSortedTable(table); 7911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Map<String, Integer> makePopulatedMap() { 7941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert RowSortedTable<Character, String, Integer> table = TreeBasedTable.create(); 7951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put('a', "one", 1); 7961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put('a', "two", 2); 7971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put('a', "three", 3); 7981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put('b', "four", 4); 7991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Tables.unmodifiableRowSortedTable(table).row('a'); 8001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static abstract class ColumnTests extends MapTests { 8041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ColumnTests(boolean allowsNullValues, boolean supportsPut, boolean supportsRemove, 8051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert boolean supportsClear, boolean supportsIteratorRemove) { 8061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert super(allowsNullValues, supportsPut, supportsRemove, supportsClear, 8071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert supportsIteratorRemove); 8081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert abstract Table<String, Character, Integer> makeTable(); 8111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Map<String, Integer> makeEmptyMap() { 8131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return makeTable().column('a'); 8141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Map<String, Integer> makePopulatedMap() { 8171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<String, Character, Integer> table = makeTable(); 8181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put("one", 'a', 1); 8191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put("two", 'a', 2); 8201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put("three", 'a', 3); 8211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put("four", 'b', 4); 8221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return table.column('a'); 8231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("TODO(hhchan): ArrayTable") 8271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static class ArrayColumnTests extends ColumnTests { 8281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public ArrayColumnTests() { 8291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert super(true, true, false, false, false); 8301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected String getKeyNotInPopulatedMap() { 8331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert throw new UnsupportedOperationException(); 8341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Map<String, Integer> makeEmptyMap() { 8371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert throw new UnsupportedOperationException(); 8381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override Table<String, Character, Integer> makeTable() { 8411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return ArrayTable.create(Arrays.asList("one", "two", "three", "four"), 8421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Arrays.asList('a', 'b', 'c')); 8431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static class HashColumnTests extends ColumnTests { 8471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public HashColumnTests() { 8481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert super(false, true, true, true, false); 8491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override Table<String, Character, Integer> makeTable() { 8521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return HashBasedTable.create(); 8531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static class TreeColumnTests extends ColumnTests { 8571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public TreeColumnTests() { 8581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert super(false, true, true, true, false); 8591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override Table<String, Character, Integer> makeTable() { 8621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return TreeBasedTable.create(); 8631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static class TransposeColumnTests extends ColumnTests { 8671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public TransposeColumnTests() { 8681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert super(false, true, true, true, true); 8691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override Table<String, Character, Integer> makeTable() { 8721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<Character, String, Integer> original = TreeBasedTable.create(); 8731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Tables.transpose(original); 8741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static class TransformValueColumnTests extends ColumnTests { 8781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public TransformValueColumnTests() { 8791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert super(false, false, true, true, false); 8801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override Table<String, Character, Integer> makeTable() { 8831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<String, Character, Integer> table = HashBasedTable.create(); 8841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Tables.transformValues(table, DIVIDE_BY_2); 8851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Map<String, Integer> makePopulatedMap() { 8881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<String, Character, Integer> table = HashBasedTable.create(); 8891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put("one", 'a', 1); 8901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put("two", 'a', 2); 8911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put("three", 'a', 3); 8921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put("four", 'b', 4); 8931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Tables.transformValues(table, DIVIDE_BY_2).column('a'); 8941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static class UnmodifiableHashColumnTests extends ColumnTests { 8981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public UnmodifiableHashColumnTests() { 8991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert super(false, false, false, false, false); 9001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 9011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 9021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override Table<String, Character, Integer> makeTable() { 9031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<String, Character, Integer> table = HashBasedTable.create(); 9041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Tables.unmodifiableTable(table); 9051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 9061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 9071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Map<String, Integer> makePopulatedMap() { 9081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<String, Character, Integer> table = HashBasedTable.create(); 9091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put("one", 'a', 1); 9101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put("two", 'a', 2); 9111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put("three", 'a', 3); 9121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put("four", 'b', 4); 9131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Tables.unmodifiableTable(table).column('a'); 9141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 9151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 9161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 9171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static class UnmodifiableTreeColumnTests extends ColumnTests { 9181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public UnmodifiableTreeColumnTests() { 9191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert super(false, false, false, false, false); 9201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 9211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 9221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override Table<String, Character, Integer> makeTable() { 9231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert RowSortedTable<String, Character, Integer> table = TreeBasedTable.create(); 9241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Tables.unmodifiableRowSortedTable(table); 9251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 9261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 9271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Map<String, Integer> makePopulatedMap() { 9281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert RowSortedTable<String, Character, Integer> table = TreeBasedTable.create(); 9291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put("one", 'a', 1); 9301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put("two", 'a', 2); 9311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put("three", 'a', 3); 9321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put("four", 'b', 4); 9331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Tables.unmodifiableRowSortedTable(table).column('a'); 9341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 9351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 9361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 9371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static abstract class MapMapTests 9381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert extends MapInterfaceTest<String, Map<Integer, Character>> { 9391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 9401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert MapMapTests(boolean allowsNullValues, boolean supportsRemove, 9411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert boolean supportsClear, boolean supportsIteratorRemove) { 9421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert super(false, allowsNullValues, false, supportsRemove, supportsClear, 9431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert supportsIteratorRemove); 9441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 9451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 9461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected String getKeyNotInPopulatedMap() { 9471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return "cat"; 9481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 9491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 9501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Map<Integer, Character> getValueNotInPopulatedMap() { 9511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return ImmutableMap.of(); 9521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 9531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 9541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /** 9551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * The version of this test supplied by {@link MapInterfaceTest} fails for 9561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * this particular map implementation, because {@code map.get()} returns a 9571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * view collection that changes in the course of a call to {@code remove()}. 9581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Thus, the expectation doesn't hold that {@code map.remove(x)} returns the 9591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * same value which {@code map.get(x)} did immediately beforehand. 9601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 9611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public void testRemove() { 9621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert final Map<String, Map<Integer, Character>> map; 9631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert final String keyToRemove; 9641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 9651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert map = makePopulatedMap(); 9661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (UnsupportedOperationException e) { 9671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return; 9681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 9691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert keyToRemove = map.keySet().iterator().next(); 9701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert if (supportsRemove) { 9711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert int initialSize = map.size(); 9721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert map.get(keyToRemove); 9731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert map.remove(keyToRemove); 9741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // This line doesn't hold - see the Javadoc comments above. 9751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // assertEquals(expectedValue, oldValue); 9761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(map.containsKey(keyToRemove)); 9771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(initialSize - 1, map.size()); 9781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } else { 9791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 9801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert map.remove(keyToRemove); 9811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail("Expected UnsupportedOperationException."); 9821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (UnsupportedOperationException e) { 9831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Expected. 9841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 9851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 9861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertInvariants(map); 9871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 9881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 9891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 9901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static abstract class RowMapTests extends MapMapTests { 9911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert RowMapTests(boolean allowsNullValues, boolean supportsRemove, 9921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert boolean supportsClear, boolean supportsIteratorRemove) { 9931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert super(allowsNullValues, supportsRemove, supportsClear, 9941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert supportsIteratorRemove); 9951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 9961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 9971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert abstract Table<String, Integer, Character> makeTable(); 9981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 9991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Map<String, Map<Integer, Character>> 10001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert makePopulatedMap() { 10011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<String, Integer, Character> table = makeTable(); 10021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert populateTable(table); 10031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return table.rowMap(); 10041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 10051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 10061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert void populateTable(Table<String, Integer, Character> table) { 10071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put("foo", 1, 'a'); 10081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put("bar", 1, 'b'); 10091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put("foo", 3, 'c'); 10101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 10111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 10121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Map<String, Map<Integer, Character>> makeEmptyMap() { 10131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return makeTable().rowMap(); 10141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 10151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 10161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 10171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("TODO(hhchan): ArrayTable") 10181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static class ArrayRowMapTests extends RowMapTests { 10191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public ArrayRowMapTests() { 10201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert super(true, false, false, false); 10211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 10221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 10231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override Table<String, Integer, Character> makeTable() { 10241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return ArrayTable.create(Arrays.asList("foo", "bar", "dog"), 10251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Arrays.asList(1, 2, 3)); 10261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 10271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 10281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Map<String, Map<Integer, Character>> makeEmptyMap() { 10291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert throw new UnsupportedOperationException(); 10301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 10311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 10321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 10331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static class HashRowMapTests extends RowMapTests { 10341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public HashRowMapTests() { 10351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert super(false, true, true, true); 10361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 10371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 10381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override Table<String, Integer, Character> makeTable() { 10391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return HashBasedTable.create(); 10401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 10411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 10421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 10431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static class TreeRowMapTests extends RowMapTests { 10441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public TreeRowMapTests() { 10451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert super(false, true, true, true); 10461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 10471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 10481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override Table<String, Integer, Character> makeTable() { 10491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return TreeBasedTable.create(); 10501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 10511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 10521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 10531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static class TreeRowMapHeadMapTests extends RowMapTests { 10541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public TreeRowMapHeadMapTests() { 10551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert super(false, true, true, true); 10561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 10571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 10581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override TreeBasedTable<String, Integer, Character> makeTable() { 10591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert TreeBasedTable<String, Integer, Character> table = 10601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert TreeBasedTable.create(); 10611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put("z", 1, 'a'); 10621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return table; 10631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 10641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 10651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Map<String, Map<Integer, Character>> 10661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert makePopulatedMap() { 10671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert TreeBasedTable<String, Integer, Character> table = makeTable(); 10681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert populateTable(table); 10691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return table.rowMap().headMap("x"); 10701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 10711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 10721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Map<String, Map<Integer, Character>> makeEmptyMap() { 10731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return makeTable().rowMap().headMap("x"); 10741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 10751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 10761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected String getKeyNotInPopulatedMap() { 10771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return "z"; 10781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 10791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 10801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 10811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static class TreeRowMapTailMapTests extends RowMapTests { 10821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public TreeRowMapTailMapTests() { 10831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert super(false, true, true, true); 10841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 10851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 10861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override TreeBasedTable<String, Integer, Character> makeTable() { 10871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert TreeBasedTable<String, Integer, Character> table = 10881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert TreeBasedTable.create(); 10891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put("a", 1, 'a'); 10901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return table; 10911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 10921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 10931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Map<String, Map<Integer, Character>> 10941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert makePopulatedMap() { 10951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert TreeBasedTable<String, Integer, Character> table = makeTable(); 10961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert populateTable(table); 10971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return table.rowMap().tailMap("b"); 10981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 10991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 11001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Map<String, Map<Integer, Character>> makeEmptyMap() { 11011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return makeTable().rowMap().tailMap("b"); 11021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 11031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 11041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected String getKeyNotInPopulatedMap() { 11051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return "a"; 11061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 11071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 11081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 11091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static class TreeRowMapSubMapTests extends RowMapTests { 11101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public TreeRowMapSubMapTests() { 11111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert super(false, true, true, true); 11121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 11131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 11141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override TreeBasedTable<String, Integer, Character> makeTable() { 11151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert TreeBasedTable<String, Integer, Character> table = 11161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert TreeBasedTable.create(); 11171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put("a", 1, 'a'); 11181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put("z", 1, 'a'); 11191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return table; 11201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 11211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 11221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Map<String, Map<Integer, Character>> 11231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert makePopulatedMap() { 11241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert TreeBasedTable<String, Integer, Character> table = makeTable(); 11251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert populateTable(table); 11261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return table.rowMap().subMap("b", "x"); 11271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 11281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 11291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Map<String, Map<Integer, Character>> makeEmptyMap() { 11301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return makeTable().rowMap().subMap("b", "x"); 11311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 11321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 11331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected String getKeyNotInPopulatedMap() { 11341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return "z"; 11351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 11361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 11371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 11381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static final Function<String, Character> FIRST_CHARACTER = 11391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new Function<String, Character>() { 11401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override 11411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public Character apply(String input) { 11421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return input == null ? null : input.charAt(0); 11431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 11441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }; 11451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 11461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static class TransformValueRowMapTests extends RowMapTests { 11471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public TransformValueRowMapTests() { 11481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert super(false, true, true, true); 11491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 11501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 11511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override Table<String, Integer, Character> makeTable() { 11521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<String, Integer, String> original = HashBasedTable.create(); 11531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Tables.transformValues(original, FIRST_CHARACTER); 11541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 11551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 11561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override 11571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert protected Map<String, Map<Integer, Character>> makePopulatedMap() { 11581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<String, Integer, String> table = HashBasedTable.create(); 11591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put("foo", 1, "apple"); 11601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put("bar", 1, "banana"); 11611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put("foo", 3, "cat"); 11621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Tables.transformValues(table, FIRST_CHARACTER).rowMap(); 11631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 11641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 11651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 11661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static class UnmodifiableHashRowMapTests extends RowMapTests { 11671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public UnmodifiableHashRowMapTests() { 11681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert super(false, false, false, false); 11691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 11701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 11711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override Table<String, Integer, Character> makeTable() { 11721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<String, Integer, Character> original = HashBasedTable.create(); 11731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Tables.unmodifiableTable(original); 11741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 11751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 11761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override 11771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert protected Map<String, Map<Integer, Character>> makePopulatedMap() { 11781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<String, Integer, Character> table = HashBasedTable.create(); 11791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put("foo", 1, 'a'); 11801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put("bar", 1, 'b'); 11811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put("foo", 3, 'c'); 11821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Tables.unmodifiableTable(table).rowMap(); 11831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 11841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 11851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 11861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static class UnmodifiableTreeRowMapTests extends RowMapTests { 11871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public UnmodifiableTreeRowMapTests() { 11881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert super(false, false, false, false); 11891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 11901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 11911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override RowSortedTable<String, Integer, Character> makeTable() { 11921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert RowSortedTable<String, Integer, Character> original = TreeBasedTable.create(); 11931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Tables.unmodifiableRowSortedTable(original); 11941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 11951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 11961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override 11971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert protected SortedMap<String, Map<Integer, Character>> makePopulatedMap() { 11981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert RowSortedTable<String, Integer, Character> table = TreeBasedTable.create(); 11991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put("foo", 1, 'a'); 12001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put("bar", 1, 'b'); 12011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put("foo", 3, 'c'); 12021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Tables.unmodifiableRowSortedTable(table).rowMap(); 12031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 12041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 12051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 12061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static abstract class ColumnMapTests extends MapMapTests { 12071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ColumnMapTests(boolean allowsNullValues, boolean supportsRemove, 12081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert boolean supportsClear, boolean supportsIteratorRemove) { 12091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert super(allowsNullValues, supportsRemove, supportsClear, 12101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert supportsIteratorRemove); 12111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 12121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 12131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert abstract Table<Integer, String, Character> makeTable(); 12141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 12151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Map<String, Map<Integer, Character>> 12161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert makePopulatedMap() { 12171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<Integer, String, Character> table = makeTable(); 12181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put(1, "foo", 'a'); 12191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put(1, "bar", 'b'); 12201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put(3, "foo", 'c'); 12211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return table.columnMap(); 12221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 12231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 12241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Map<String, Map<Integer, Character>> makeEmptyMap() { 12251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return makeTable().columnMap(); 12261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 12271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 12281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 12291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("TODO(hhchan): ArrayTable") 12301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static class ArrayColumnMapTests extends ColumnMapTests { 12311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public ArrayColumnMapTests() { 12321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert super(true, false, false, false); 12331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 12341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 12351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override Table<Integer, String, Character> makeTable() { 12361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return ArrayTable.create(Arrays.asList(1, 2, 3), 12371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Arrays.asList("foo", "bar", "dog")); 12381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 12391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 12401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Map<String, Map<Integer, Character>> makeEmptyMap() { 12411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert throw new UnsupportedOperationException(); 12421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 12431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 12441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 12451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static class HashColumnMapTests extends ColumnMapTests { 12461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public HashColumnMapTests() { 12471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert super(false, true, true, false); 12481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 12491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 12501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override Table<Integer, String, Character> makeTable() { 12511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return HashBasedTable.create(); 12521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 12531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 12541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 12551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static class TreeColumnMapTests extends ColumnMapTests { 12561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public TreeColumnMapTests() { 12571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert super(false, true, true, false); 12581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 12591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 12601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override Table<Integer, String, Character> makeTable() { 12611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return TreeBasedTable.create(); 12621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 12631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 12641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 12651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static class TransformValueColumnMapTests extends ColumnMapTests { 12661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public TransformValueColumnMapTests() { 12671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert super(false, true, true, false); 12681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 12691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 12701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override Table<Integer, String, Character> makeTable() { 12711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<Integer, String, String> original = HashBasedTable.create(); 12721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Tables.transformValues(original, FIRST_CHARACTER); 12731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 12741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 12751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override 12761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert protected Map<String, Map<Integer, Character>> makePopulatedMap() { 12771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<Integer, String, String> table = HashBasedTable.create(); 12781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put(1, "foo", "apple"); 12791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put(1, "bar", "banana"); 12801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put(3, "foo", "cat"); 12811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Tables.transformValues(table, FIRST_CHARACTER).columnMap(); 12821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 12831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 12841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 12851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static class UnmodifiableHashColumnMapTests extends ColumnMapTests { 12861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public UnmodifiableHashColumnMapTests() { 12871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert super(false, false, false, false); 12881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 12891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 12901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override Table<Integer, String, Character> makeTable() { 12911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<Integer, String, Character> original = HashBasedTable.create(); 12921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Tables.unmodifiableTable(original); 12931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 12941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 12951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override 12961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert protected Map<String, Map<Integer, Character>> makePopulatedMap() { 12971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<Integer, String, Character> table = HashBasedTable.create(); 12981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put(1, "foo", 'a'); 12991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put(1, "bar", 'b'); 13001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put(3, "foo", 'c'); 13011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Tables.unmodifiableTable(table).columnMap(); 13021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 13031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 13041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 13051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static class UnmodifiableTreeColumnMapTests extends ColumnMapTests { 13061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public UnmodifiableTreeColumnMapTests() { 13071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert super(false, false, false, false); 13081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 13091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 13101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override Table<Integer, String, Character> makeTable() { 13111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert RowSortedTable<Integer, String, Character> original = TreeBasedTable.create(); 13121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Tables.unmodifiableRowSortedTable(original); 13131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 13141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 13151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override 13161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert protected Map<String, Map<Integer, Character>> makePopulatedMap() { 13171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert RowSortedTable<Integer, String, Character> table = TreeBasedTable.create(); 13181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put(1, "foo", 'a'); 13191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put(1, "bar", 'b'); 13201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put(3, "foo", 'c'); 13211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Tables.unmodifiableRowSortedTable(table).columnMap(); 13221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 13231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 13241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert} 1325