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