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 junit.framework.Test; 401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport junit.framework.TestCase; 411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport junit.framework.TestSuite; 421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Arrays; 441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Collection; 451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Collections; 461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.List; 471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Map; 481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Set; 491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.SortedMap; 501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 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, 731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionFeature.REMOVE_OPERATIONS, 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, 801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionFeature.REMOVE_OPERATIONS, 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()); 2171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 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") 4611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .withFeatures(CollectionSize.ANY, CollectionFeature.REMOVE_OPERATIONS, 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") 4711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .withFeatures(CollectionSize.ANY, CollectionFeature.REMOVE_OPERATIONS, 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") 4831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .withFeatures(CollectionSize.ANY, CollectionFeature.REMOVE_OPERATIONS, 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") 5051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .withFeatures(CollectionSize.ANY, CollectionFeature.ALLOWS_NULL_QUERIES) 5061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .createTestSuite()); 5071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTest(SetTestSuiteBuilder.using(new TestCellSetGenerator() { 5091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override Table<String, Integer, Character> createTable() { 5101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Tables.unmodifiableTable(HashBasedTable.<String, Integer, Character> create()); 5111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override 5131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public Set<Cell<String, Integer, Character>> create( 5141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Object... elements) { 5151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<String, Integer, Character> table = HashBasedTable.create(); 5161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (Object element : elements) { 5171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @SuppressWarnings("unchecked") 5181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Cell<String, Integer, Character> cell 5191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = (Cell<String, Integer, Character>) element; 5201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put(cell.getRowKey(), cell.getColumnKey(), cell.getValue()); 5211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Tables.unmodifiableTable(table).cellSet(); 5231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }) 5251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .named("unmodifiableTable[HashBasedTable].cellSet") 5261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .withFeatures(CollectionSize.ANY, CollectionFeature.ALLOWS_NULL_QUERIES) 5271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .createTestSuite()); 5281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTest(SetTestSuiteBuilder.using(new TestCellSetGenerator() { 5301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override RowSortedTable<String, Integer, Character> createTable() { 5311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Tables.unmodifiableRowSortedTable(TreeBasedTable 5321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .<String, Integer, Character> create()); 5331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override 5351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public Set<Cell<String, Integer, Character>> create( 5361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Object... elements) { 5371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert RowSortedTable<String, Integer, Character> table = TreeBasedTable.create(); 5381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (Object element : elements) { 5391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @SuppressWarnings("unchecked") 5401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Cell<String, Integer, Character> cell 5411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = (Cell<String, Integer, Character>) element; 5421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put(cell.getRowKey(), cell.getColumnKey(), cell.getValue()); 5431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Tables.unmodifiableRowSortedTable(table).cellSet(); 5451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }) 5471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .named("unmodifiableRowSortedTable[TreeBasedTable].cellSet") 5481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .withFeatures(CollectionSize.ANY, CollectionFeature.ALLOWS_NULL_QUERIES) 5491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .createTestSuite()); 5501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() { 5521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Set<String> create(String[] elements) { 5531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> rowKeys = ImmutableSet.copyOf(elements); 5541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<Integer> columnKeys = ImmutableList.of(1, 2, 3); 5551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<String, Integer, Character> table 5561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = ArrayTable.create(rowKeys, columnKeys); 5571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert populateForRowKeySet(table, elements); 5581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return table.column(1).keySet(); 5591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }) 5611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .named("ArrayTable.column.keySet") 5621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .withFeatures(CollectionSize.ONE, CollectionSize.SEVERAL, 5631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionFeature.KNOWN_ORDER, 5641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionFeature.ALLOWS_NULL_QUERIES) 5651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .createTestSuite()); 5661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() { 5681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Set<String> create(String[] elements) { 5691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<String, Integer, Character> table = HashBasedTable.create(); 5701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert populateForRowKeySet(table, elements); 5711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return table.column(1).keySet(); 5721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }) 5741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .named("HashBasedTable.column.keySet") 5751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .withFeatures(COLLECTION_FEATURES_REMOVE) 5761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .suppressing(getIteratorUnknownOrderRemoveSupportedMethod()) 5771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .createTestSuite()); 5781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() { 5801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Set<String> create(String[] elements) { 5811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<String, Integer, Character> table = TreeBasedTable.create(); 5821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert populateForRowKeySet(table, elements); 5831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return table.column(1).keySet(); 5841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public List<String> order(List<String> insertionOrder) { 5861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collections.sort(insertionOrder); 5871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return insertionOrder; 5881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }) 5901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .named("TreeBasedTable.column.keySet") 5911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .withFeatures(COLLECTION_FEATURES_REMOVE_ORDER) 5921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .suppressing(getIteratorKnownOrderRemoveSupportedMethod()) 5931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .createTestSuite()); 5941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() { 5961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Set<String> create(String[] elements) { 5971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<String, Integer, Character> table = HashBasedTable.create(); 5981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert populateForRowKeySet(table, elements); 5991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Tables.transformValues(table, Functions.toStringFunction()).column(1).keySet(); 6001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }) 6021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .named("TransformValues.column.keySet") 6031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .withFeatures(COLLECTION_FEATURES_REMOVE) 6041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .suppressing(getIteratorUnknownOrderRemoveSupportedMethod()) 6051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .createTestSuite()); 6061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() { 6081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Set<String> create(String[] elements) { 6091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<String, Integer, Character> table = HashBasedTable.create(); 6101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert populateForRowKeySet(table, elements); 6111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Tables.unmodifiableTable(table).column(1).keySet(); 6121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }) 6141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .named("unmodifiableTable[HashBasedTable].column.keySet") 6151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .withFeatures(COLLECTION_FEATURES) 6161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .suppressing(getIteratorUnknownOrderRemoveSupportedMethod()) 6171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .createTestSuite()); 6181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() { 6201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Set<String> create(String[] elements) { 6211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert RowSortedTable<String, Integer, Character> table = TreeBasedTable.create(); 6221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert populateForRowKeySet(table, elements); 6231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Tables.unmodifiableRowSortedTable(table).column(1).keySet(); 6241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public List<String> order(List<String> insertionOrder) { 6261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collections.sort(insertionOrder); 6271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return insertionOrder; 6281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }) 6301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .named("unmodifiableRowSortedTable[TreeBasedTable].column.keySet") 6311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .withFeatures(COLLECTION_FEATURES_ORDER) 6321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .suppressing(getIteratorKnownOrderRemoveSupportedMethod()) 6331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .createTestSuite()); 6341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return suite; 6361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static void populateForRowKeySet( 6391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<String, Integer, Character> table, String[] elements) { 6401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (String row : elements) { 6411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put(row, 1, 'a'); 6421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put(row, 2, 'b'); 6431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static void populateForColumnKeySet( 6471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<Integer, String, Character> table, String[] elements) { 6481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (String column : elements) { 6491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put(1, column, 'a'); 6501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put(2, column, 'b'); 6511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static void populateForValues( 6551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<Integer, Character, String> table, String[] elements) { 6561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (int i = 0; i < elements.length; i++) { 6571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put(i, 'a', elements[i]); 6581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static abstract class TestCellSetGenerator 6621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert implements TestSetGenerator<Cell<String, Integer, Character>> { 6631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override 6641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public SampleElements<Cell<String, Integer, Character>> samples() { 6651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return new SampleElements<Cell<String, Integer, Character>>( 6661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Tables.immutableCell("bar", 1, 'a'), 6671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Tables.immutableCell("bar", 2, 'b'), 6681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Tables.immutableCell("foo", 3, 'c'), 6691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Tables.immutableCell("bar", 1, 'b'), 6701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Tables.immutableCell("cat", 2, 'b')); 6711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override 6741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public Set<Cell<String, Integer, Character>> create( 6751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Object... elements) { 6761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<String, Integer, Character> table = createTable(); 6771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (Object element : elements) { 6781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @SuppressWarnings("unchecked") 6791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Cell<String, Integer, Character> cell 6801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = (Cell<String, Integer, Character>) element; 6811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put(cell.getRowKey(), cell.getColumnKey(), cell.getValue()); 6821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return table.cellSet(); 6841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert abstract Table<String, Integer, Character> createTable(); 6871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override 6891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @SuppressWarnings("unchecked") 6901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public Cell<String, Integer, Character>[] createArray(int length) { 6911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return (Cell<String, Integer, Character>[]) new Cell<?, ?, ?>[length]; 6921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override 6951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public List<Cell<String, Integer, Character>> order( 6961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<Cell<String, Integer, Character>> insertionOrder) { 6971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return insertionOrder; 6981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static abstract class MapTests 7021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert extends MapInterfaceTest<String, Integer> { 7031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert MapTests(boolean allowsNullValues, boolean supportsPut, boolean supportsRemove, 7051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert boolean supportsClear, boolean supportsIteratorRemove) { 7061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert super(false, allowsNullValues, supportsPut, supportsRemove, supportsClear, 7071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert supportsIteratorRemove); 7081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected String getKeyNotInPopulatedMap() { 7111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return "four"; 7121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Integer getValueNotInPopulatedMap() { 7151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return 4; 7161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static abstract class RowTests extends MapTests { 7201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert RowTests(boolean allowsNullValues, boolean supportsPut, boolean supportsRemove, 7211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert boolean supportsClear, boolean supportsIteratorRemove) { 7221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert super(allowsNullValues, supportsPut, supportsRemove, supportsClear, 7231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert supportsIteratorRemove); 7241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert abstract Table<Character, String, Integer> makeTable(); 7271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Map<String, Integer> makeEmptyMap() { 7291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return makeTable().row('a'); 7301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Map<String, Integer> makePopulatedMap() { 7331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<Character, String, Integer> table = makeTable(); 7341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put('a', "one", 1); 7351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put('a', "two", 2); 7361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put('a', "three", 3); 7371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put('b', "four", 4); 7381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return table.row('a'); 7391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("TODO(hhchan): ArrayTable") 7431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static class ArrayRowTests extends RowTests { 7441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public ArrayRowTests() { 7451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert super(true, true, false, false, false); 7461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected String getKeyNotInPopulatedMap() { 7491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert throw new UnsupportedOperationException(); 7501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Map<String, Integer> makeEmptyMap() { 7531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert throw new UnsupportedOperationException(); 7541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Table<Character, String, Integer> makeTable() { 7571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return ArrayTable.create(Arrays.asList('a', 'b', 'c'), 7581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Arrays.asList("one", "two", "three", "four")); 7591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static class HashRowTests extends RowTests { 7631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public HashRowTests() { 7641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert super(false, true, true, true, true); 7651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override Table<Character, String, Integer> makeTable() { 7681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return HashBasedTable.create(); 7691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static class TreeRowTests extends RowTests { 7731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public TreeRowTests() { 7741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert super(false, true, true, true, true); 7751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override Table<Character, String, Integer> makeTable() { 7781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return TreeBasedTable.create(); 7791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static class TransposeRowTests extends RowTests { 7831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public TransposeRowTests() { 7841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert super(false, true, true, true, false); 7851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override Table<Character, String, Integer> makeTable() { 7881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<String, Character, Integer> original = TreeBasedTable.create(); 7891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Tables.transpose(original); 7901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static final Function<Integer, Integer> DIVIDE_BY_2 7941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = new Function<Integer, Integer>() { 7951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public Integer apply(Integer input) { 7961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return (input == null) ? null : input / 2; 7971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }; 7991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static class TransformValueRowTests extends RowTests { 8011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public TransformValueRowTests() { 8021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert super(false, false, true, true, true); 8031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override Table<Character, String, Integer> makeTable() { 8061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<Character, String, Integer> table = HashBasedTable.create(); 8071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Tables.transformValues(table, DIVIDE_BY_2); 8081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Map<String, Integer> makePopulatedMap() { 8111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<Character, String, Integer> table = HashBasedTable.create(); 8121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put('a', "one", 2); 8131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put('a', "two", 4); 8141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put('a', "three", 6); 8151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put('b', "four", 8); 8161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Tables.transformValues(table, DIVIDE_BY_2).row('a'); 8171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static class UnmodifiableHashRowTests extends RowTests { 8211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public UnmodifiableHashRowTests() { 8221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert super(false, false, false, false, false); 8231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override Table<Character, String, Integer> makeTable() { 8261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<Character, String, Integer> table = HashBasedTable.create(); 8271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Tables.unmodifiableTable(table); 8281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Map<String, Integer> makePopulatedMap() { 8311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<Character, String, Integer> table = HashBasedTable.create(); 8321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put('a', "one", 1); 8331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put('a', "two", 2); 8341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put('a', "three", 3); 8351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put('b', "four", 4); 8361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Tables.unmodifiableTable(table).row('a'); 8371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static class UnmodifiableTreeRowTests extends RowTests { 8411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public UnmodifiableTreeRowTests() { 8421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert super(false, false, false, false, false); 8431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override Table<Character, String, Integer> makeTable() { 8461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert RowSortedTable<Character, String, Integer> table = TreeBasedTable.create(); 8471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Tables.unmodifiableRowSortedTable(table); 8481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Map<String, Integer> makePopulatedMap() { 8511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert RowSortedTable<Character, String, Integer> table = TreeBasedTable.create(); 8521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put('a', "one", 1); 8531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put('a', "two", 2); 8541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put('a', "three", 3); 8551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put('b', "four", 4); 8561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Tables.unmodifiableRowSortedTable(table).row('a'); 8571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static abstract class ColumnTests extends MapTests { 8611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ColumnTests(boolean allowsNullValues, boolean supportsPut, boolean supportsRemove, 8621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert boolean supportsClear, boolean supportsIteratorRemove) { 8631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert super(allowsNullValues, supportsPut, supportsRemove, supportsClear, 8641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert supportsIteratorRemove); 8651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert abstract Table<String, Character, Integer> makeTable(); 8681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Map<String, Integer> makeEmptyMap() { 8701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return makeTable().column('a'); 8711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Map<String, Integer> makePopulatedMap() { 8741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<String, Character, Integer> table = makeTable(); 8751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put("one", 'a', 1); 8761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put("two", 'a', 2); 8771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put("three", 'a', 3); 8781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put("four", 'b', 4); 8791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return table.column('a'); 8801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("TODO(hhchan): ArrayTable") 8841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static class ArrayColumnTests extends ColumnTests { 8851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public ArrayColumnTests() { 8861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert super(true, true, false, false, false); 8871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected String getKeyNotInPopulatedMap() { 8901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert throw new UnsupportedOperationException(); 8911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Map<String, Integer> makeEmptyMap() { 8941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert throw new UnsupportedOperationException(); 8951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override Table<String, Character, Integer> makeTable() { 8981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return ArrayTable.create(Arrays.asList("one", "two", "three", "four"), 8991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Arrays.asList('a', 'b', 'c')); 9001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 9011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 9021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 9031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static class HashColumnTests extends ColumnTests { 9041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public HashColumnTests() { 9051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert super(false, true, true, true, false); 9061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 9071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 9081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override Table<String, Character, Integer> makeTable() { 9091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return HashBasedTable.create(); 9101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 9111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 9121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 9131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static class TreeColumnTests extends ColumnTests { 9141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public TreeColumnTests() { 9151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert super(false, true, true, true, false); 9161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 9171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 9181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override Table<String, Character, Integer> makeTable() { 9191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return TreeBasedTable.create(); 9201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 9211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 9221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 9231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static class TransposeColumnTests extends ColumnTests { 9241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public TransposeColumnTests() { 9251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert super(false, true, true, true, true); 9261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 9271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 9281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override Table<String, Character, Integer> makeTable() { 9291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<Character, String, Integer> original = TreeBasedTable.create(); 9301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Tables.transpose(original); 9311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 9321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 9331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 9341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static class TransformValueColumnTests extends ColumnTests { 9351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public TransformValueColumnTests() { 9361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert super(false, false, true, true, false); 9371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 9381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 9391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override Table<String, Character, Integer> makeTable() { 9401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<String, Character, Integer> table = HashBasedTable.create(); 9411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Tables.transformValues(table, DIVIDE_BY_2); 9421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 9431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 9441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Map<String, Integer> makePopulatedMap() { 9451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<String, Character, Integer> table = HashBasedTable.create(); 9461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put("one", 'a', 1); 9471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put("two", 'a', 2); 9481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put("three", 'a', 3); 9491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put("four", 'b', 4); 9501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Tables.transformValues(table, DIVIDE_BY_2).column('a'); 9511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 9521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 9531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 9541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static class UnmodifiableHashColumnTests extends ColumnTests { 9551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public UnmodifiableHashColumnTests() { 9561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert super(false, false, false, false, false); 9571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 9581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 9591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override Table<String, Character, Integer> makeTable() { 9601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<String, Character, Integer> table = HashBasedTable.create(); 9611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Tables.unmodifiableTable(table); 9621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 9631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 9641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Map<String, Integer> makePopulatedMap() { 9651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<String, Character, Integer> table = HashBasedTable.create(); 9661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put("one", 'a', 1); 9671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put("two", 'a', 2); 9681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put("three", 'a', 3); 9691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put("four", 'b', 4); 9701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Tables.unmodifiableTable(table).column('a'); 9711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 9721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 9731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 9741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static class UnmodifiableTreeColumnTests extends ColumnTests { 9751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public UnmodifiableTreeColumnTests() { 9761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert super(false, false, false, false, false); 9771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 9781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 9791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override Table<String, Character, Integer> makeTable() { 9801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert RowSortedTable<String, Character, Integer> table = TreeBasedTable.create(); 9811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Tables.unmodifiableRowSortedTable(table); 9821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 9831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 9841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Map<String, Integer> makePopulatedMap() { 9851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert RowSortedTable<String, Character, Integer> table = TreeBasedTable.create(); 9861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put("one", 'a', 1); 9871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put("two", 'a', 2); 9881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put("three", 'a', 3); 9891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put("four", 'b', 4); 9901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Tables.unmodifiableRowSortedTable(table).column('a'); 9911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 9921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 9931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 9941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static abstract class MapMapTests 9951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert extends MapInterfaceTest<String, Map<Integer, Character>> { 9961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 9971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert MapMapTests(boolean allowsNullValues, boolean supportsRemove, 9981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert boolean supportsClear, boolean supportsIteratorRemove) { 9991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert super(false, allowsNullValues, false, supportsRemove, supportsClear, 10001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert supportsIteratorRemove); 10011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 10021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 10031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected String getKeyNotInPopulatedMap() { 10041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return "cat"; 10051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 10061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 10071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Map<Integer, Character> getValueNotInPopulatedMap() { 10081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return ImmutableMap.of(); 10091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 10101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 10111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /** 10121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * The version of this test supplied by {@link MapInterfaceTest} fails for 10131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * this particular map implementation, because {@code map.get()} returns a 10141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * view collection that changes in the course of a call to {@code remove()}. 10151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Thus, the expectation doesn't hold that {@code map.remove(x)} returns the 10161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * same value which {@code map.get(x)} did immediately beforehand. 10171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 10181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public void testRemove() { 10191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert final Map<String, Map<Integer, Character>> map; 10201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert final String keyToRemove; 10211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 10221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert map = makePopulatedMap(); 10231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (UnsupportedOperationException e) { 10241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return; 10251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 10261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert keyToRemove = map.keySet().iterator().next(); 10271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert if (supportsRemove) { 10281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert int initialSize = map.size(); 10291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert map.get(keyToRemove); 10301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert map.remove(keyToRemove); 10311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // This line doesn't hold - see the Javadoc comments above. 10321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // assertEquals(expectedValue, oldValue); 10331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(map.containsKey(keyToRemove)); 10341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(initialSize - 1, map.size()); 10351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } else { 10361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 10371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert map.remove(keyToRemove); 10381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail("Expected UnsupportedOperationException."); 10391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (UnsupportedOperationException e) { 10401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Expected. 10411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 10421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 10431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertInvariants(map); 10441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 10451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 10461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 10471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static abstract class RowMapTests extends MapMapTests { 10481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert RowMapTests(boolean allowsNullValues, boolean supportsRemove, 10491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert boolean supportsClear, boolean supportsIteratorRemove) { 10501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert super(allowsNullValues, supportsRemove, supportsClear, 10511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert supportsIteratorRemove); 10521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 10531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 10541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert abstract Table<String, Integer, Character> makeTable(); 10551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 10561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Map<String, Map<Integer, Character>> 10571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert makePopulatedMap() { 10581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<String, Integer, Character> table = makeTable(); 10591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert populateTable(table); 10601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return table.rowMap(); 10611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 10621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 10631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert void populateTable(Table<String, Integer, Character> table) { 10641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put("foo", 1, 'a'); 10651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put("bar", 1, 'b'); 10661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put("foo", 3, 'c'); 10671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 10681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 10691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Map<String, Map<Integer, Character>> makeEmptyMap() { 10701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return makeTable().rowMap(); 10711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 10721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 10731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 10741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("TODO(hhchan): ArrayTable") 10751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static class ArrayRowMapTests extends RowMapTests { 10761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public ArrayRowMapTests() { 10771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert super(true, false, false, false); 10781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 10791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 10801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override Table<String, Integer, Character> makeTable() { 10811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return ArrayTable.create(Arrays.asList("foo", "bar", "dog"), 10821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Arrays.asList(1, 2, 3)); 10831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 10841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 10851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Map<String, Map<Integer, Character>> makeEmptyMap() { 10861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert throw new UnsupportedOperationException(); 10871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 10881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 10891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 10901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static class HashRowMapTests extends RowMapTests { 10911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public HashRowMapTests() { 10921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert super(false, true, true, true); 10931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 10941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 10951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override Table<String, Integer, Character> makeTable() { 10961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return HashBasedTable.create(); 10971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 10981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 10991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 11001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static class TreeRowMapTests extends RowMapTests { 11011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public TreeRowMapTests() { 11021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert super(false, true, true, true); 11031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 11041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 11051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override Table<String, Integer, Character> makeTable() { 11061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return TreeBasedTable.create(); 11071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 11081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 11091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 11101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static class TreeRowMapHeadMapTests extends RowMapTests { 11111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public TreeRowMapHeadMapTests() { 11121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert super(false, true, true, true); 11131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 11141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 11151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override TreeBasedTable<String, Integer, Character> makeTable() { 11161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert TreeBasedTable<String, Integer, Character> table = 11171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert TreeBasedTable.create(); 11181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put("z", 1, 'a'); 11191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return table; 11201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 11211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 11221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Map<String, Map<Integer, Character>> 11231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert makePopulatedMap() { 11241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert TreeBasedTable<String, Integer, Character> table = makeTable(); 11251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert populateTable(table); 11261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return table.rowMap().headMap("x"); 11271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 11281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 11291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Map<String, Map<Integer, Character>> makeEmptyMap() { 11301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return makeTable().rowMap().headMap("x"); 11311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 11321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 11331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected String getKeyNotInPopulatedMap() { 11341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return "z"; 11351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 11361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 11371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 11381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static class TreeRowMapTailMapTests extends RowMapTests { 11391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public TreeRowMapTailMapTests() { 11401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert super(false, true, true, true); 11411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 11421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 11431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override TreeBasedTable<String, Integer, Character> makeTable() { 11441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert TreeBasedTable<String, Integer, Character> table = 11451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert TreeBasedTable.create(); 11461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put("a", 1, 'a'); 11471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return table; 11481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 11491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 11501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Map<String, Map<Integer, Character>> 11511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert makePopulatedMap() { 11521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert TreeBasedTable<String, Integer, Character> table = makeTable(); 11531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert populateTable(table); 11541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return table.rowMap().tailMap("b"); 11551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 11561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 11571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Map<String, Map<Integer, Character>> makeEmptyMap() { 11581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return makeTable().rowMap().tailMap("b"); 11591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 11601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 11611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected String getKeyNotInPopulatedMap() { 11621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return "a"; 11631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 11641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 11651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 11661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static class TreeRowMapSubMapTests extends RowMapTests { 11671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public TreeRowMapSubMapTests() { 11681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert super(false, true, true, true); 11691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 11701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 11711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override TreeBasedTable<String, Integer, Character> makeTable() { 11721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert TreeBasedTable<String, Integer, Character> table = 11731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert TreeBasedTable.create(); 11741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put("a", 1, 'a'); 11751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put("z", 1, 'a'); 11761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return table; 11771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 11781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 11791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Map<String, Map<Integer, Character>> 11801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert makePopulatedMap() { 11811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert TreeBasedTable<String, Integer, Character> table = makeTable(); 11821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert populateTable(table); 11831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return table.rowMap().subMap("b", "x"); 11841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 11851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 11861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Map<String, Map<Integer, Character>> makeEmptyMap() { 11871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return makeTable().rowMap().subMap("b", "x"); 11881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 11891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 11901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected String getKeyNotInPopulatedMap() { 11911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return "z"; 11921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 11931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 11941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 11951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static final Function<String, Character> FIRST_CHARACTER = 11961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new Function<String, Character>() { 11971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override 11981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public Character apply(String input) { 11991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return input == null ? null : input.charAt(0); 12001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 12011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }; 12021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 12031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static class TransformValueRowMapTests extends RowMapTests { 12041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public TransformValueRowMapTests() { 12051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert super(false, true, true, true); 12061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 12071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 12081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override Table<String, Integer, Character> makeTable() { 12091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<String, Integer, String> original = HashBasedTable.create(); 12101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Tables.transformValues(original, FIRST_CHARACTER); 12111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 12121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 12131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override 12141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert protected Map<String, Map<Integer, Character>> makePopulatedMap() { 12151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<String, Integer, String> table = HashBasedTable.create(); 12161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put("foo", 1, "apple"); 12171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put("bar", 1, "banana"); 12181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put("foo", 3, "cat"); 12191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Tables.transformValues(table, FIRST_CHARACTER).rowMap(); 12201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 12211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 12221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 12231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static class UnmodifiableHashRowMapTests extends RowMapTests { 12241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public UnmodifiableHashRowMapTests() { 12251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert super(false, false, false, false); 12261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 12271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 12281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override Table<String, Integer, Character> makeTable() { 12291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<String, Integer, Character> original = HashBasedTable.create(); 12301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Tables.unmodifiableTable(original); 12311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 12321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 12331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override 12341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert protected Map<String, Map<Integer, Character>> makePopulatedMap() { 12351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<String, Integer, Character> table = HashBasedTable.create(); 12361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put("foo", 1, 'a'); 12371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put("bar", 1, 'b'); 12381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put("foo", 3, 'c'); 12391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Tables.unmodifiableTable(table).rowMap(); 12401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 12411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 12421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 12431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static class UnmodifiableTreeRowMapTests extends RowMapTests { 12441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public UnmodifiableTreeRowMapTests() { 12451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert super(false, false, false, false); 12461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 12471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 12481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override RowSortedTable<String, Integer, Character> makeTable() { 12491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert RowSortedTable<String, Integer, Character> original = TreeBasedTable.create(); 12501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Tables.unmodifiableRowSortedTable(original); 12511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 12521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 12531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override 12541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert protected SortedMap<String, Map<Integer, Character>> makePopulatedMap() { 12551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert RowSortedTable<String, Integer, Character> table = TreeBasedTable.create(); 12561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put("foo", 1, 'a'); 12571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put("bar", 1, 'b'); 12581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put("foo", 3, 'c'); 12591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Tables.unmodifiableRowSortedTable(table).rowMap(); 12601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 12611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 12621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 12631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static abstract class ColumnMapTests extends MapMapTests { 12641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ColumnMapTests(boolean allowsNullValues, boolean supportsRemove, 12651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert boolean supportsClear, boolean supportsIteratorRemove) { 12661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert super(allowsNullValues, supportsRemove, supportsClear, 12671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert supportsIteratorRemove); 12681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 12691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 12701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert abstract Table<Integer, String, Character> makeTable(); 12711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 12721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Map<String, Map<Integer, Character>> 12731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert makePopulatedMap() { 12741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<Integer, String, Character> table = makeTable(); 12751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put(1, "foo", 'a'); 12761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put(1, "bar", 'b'); 12771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put(3, "foo", 'c'); 12781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return table.columnMap(); 12791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 12801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 12811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Map<String, Map<Integer, Character>> makeEmptyMap() { 12821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return makeTable().columnMap(); 12831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 12841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 12851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 12861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("TODO(hhchan): ArrayTable") 12871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static class ArrayColumnMapTests extends ColumnMapTests { 12881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public ArrayColumnMapTests() { 12891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert super(true, false, false, false); 12901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 12911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 12921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override Table<Integer, String, Character> makeTable() { 12931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return ArrayTable.create(Arrays.asList(1, 2, 3), 12941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Arrays.asList("foo", "bar", "dog")); 12951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 12961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 12971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Map<String, Map<Integer, Character>> makeEmptyMap() { 12981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert throw new UnsupportedOperationException(); 12991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 13001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 13011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 13021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static class HashColumnMapTests extends ColumnMapTests { 13031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public HashColumnMapTests() { 13041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert super(false, true, true, false); 13051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 13061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 13071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override Table<Integer, String, Character> makeTable() { 13081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return HashBasedTable.create(); 13091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 13101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 13111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 13121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static class TreeColumnMapTests extends ColumnMapTests { 13131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public TreeColumnMapTests() { 13141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert super(false, true, true, false); 13151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 13161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 13171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override Table<Integer, String, Character> makeTable() { 13181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return TreeBasedTable.create(); 13191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 13201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 13211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 13221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static class TransformValueColumnMapTests extends ColumnMapTests { 13231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public TransformValueColumnMapTests() { 13241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert super(false, true, true, false); 13251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 13261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 13271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override Table<Integer, String, Character> makeTable() { 13281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<Integer, String, String> original = HashBasedTable.create(); 13291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Tables.transformValues(original, FIRST_CHARACTER); 13301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 13311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 13321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override 13331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert protected Map<String, Map<Integer, Character>> makePopulatedMap() { 13341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<Integer, String, String> table = HashBasedTable.create(); 13351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put(1, "foo", "apple"); 13361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put(1, "bar", "banana"); 13371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put(3, "foo", "cat"); 13381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Tables.transformValues(table, FIRST_CHARACTER).columnMap(); 13391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 13401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 13411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 13421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static class UnmodifiableHashColumnMapTests extends ColumnMapTests { 13431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public UnmodifiableHashColumnMapTests() { 13441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert super(false, false, false, false); 13451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 13461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 13471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override Table<Integer, String, Character> makeTable() { 13481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<Integer, String, Character> original = HashBasedTable.create(); 13491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Tables.unmodifiableTable(original); 13501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 13511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 13521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override 13531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert protected Map<String, Map<Integer, Character>> makePopulatedMap() { 13541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<Integer, String, Character> table = HashBasedTable.create(); 13551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put(1, "foo", 'a'); 13561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put(1, "bar", 'b'); 13571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put(3, "foo", 'c'); 13581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Tables.unmodifiableTable(table).columnMap(); 13591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 13601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 13611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 13621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static class UnmodifiableTreeColumnMapTests extends ColumnMapTests { 13631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public UnmodifiableTreeColumnMapTests() { 13641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert super(false, false, false, false); 13651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 13661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 13671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override Table<Integer, String, Character> makeTable() { 13681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert RowSortedTable<Integer, String, Character> original = TreeBasedTable.create(); 13691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Tables.unmodifiableRowSortedTable(original); 13701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 13711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 13721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override 13731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert protected Map<String, Map<Integer, Character>> makePopulatedMap() { 13741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert RowSortedTable<Integer, String, Character> table = TreeBasedTable.create(); 13751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put(1, "foo", 'a'); 13761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put(1, "bar", 'b'); 13771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put(3, "foo", 'c'); 13781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Tables.unmodifiableRowSortedTable(table).columnMap(); 13791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 13801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 13811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert} 1382