11d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/* 21d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Copyright (C) 2009 Google Inc. 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 org.junit.contrib.truth.Truth.ASSERT; 201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/** 221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Tests common methods in {@link ImmutableTable} 231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * @author gak@google.com (Gregory Kick) 251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertpublic class ImmutableTableTest extends AbstractTableReadTest { 271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Table<String, Integer, Character> create(Object... data) { 281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableTable.Builder<String, Integer, Character> builder = 291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableTable.builder(); 301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (int i = 0; i < data.length; i = i + 3) { 311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put((String) data[i], (Integer) data[i + 1], 321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert (Character) data[i + 2]); 331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return builder.build(); 351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testBuilder() { 381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableTable.Builder<Character, Integer, String> builder = 391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new ImmutableTable.Builder<Character, Integer, String>(); 401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(ImmutableTable.of(), builder.build()); 411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(ImmutableTable.of('a', 1, "foo"), builder 421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .put('a', 1, "foo") 431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .build()); 441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<Character, Integer, String> expectedTable = HashBasedTable.create(); 451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectedTable.put('a', 1, "foo"); 461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectedTable.put('b', 1, "bar"); 471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectedTable.put('a', 2, "baz"); 481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<Character, Integer, String> otherTable = HashBasedTable.create(); 491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert otherTable.put('b', 1, "bar"); 501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert otherTable.put('a', 2, "baz"); 511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(expectedTable, builder 521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .putAll(otherTable) 531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .build()); 541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testBuilder_withImmutableCell() { 571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableTable.Builder<Character, Integer, String> builder = 581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new ImmutableTable.Builder<Character, Integer, String>(); 591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(ImmutableTable.of('a', 1, "foo"), builder 601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .put(Tables.immutableCell('a', 1, "foo")) 611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .build()); 621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testBuilder_withImmutableCellAndNullContents() { 651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableTable.Builder<Character, Integer, String> builder = 661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new ImmutableTable.Builder<Character, Integer, String>(); 671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put(Tables.immutableCell((Character) null, 1, "foo")); 691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NullPointerException e) { 711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // success 721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put(Tables.immutableCell('a', (Integer) null, "foo")); 751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NullPointerException e) { 771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // success 781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put(Tables.immutableCell('a', 1, (String) null)); 811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NullPointerException e) { 831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // success 841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static class StringHolder { 881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String string; 891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testBuilder_withMutableCell() { 921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableTable.Builder<Character, Integer, String> builder = 931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new ImmutableTable.Builder<Character, Integer, String>(); 941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert final StringHolder holder = new StringHolder(); 961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert holder.string = "foo"; 971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table.Cell<Character, Integer, String> mutableCell = 981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new Tables.AbstractCell<Character, Integer, String>() { 991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public Character getRowKey() { 1001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return 'K'; 1011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public Integer getColumnKey() { 1031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return 42; 1041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public String getValue() { 1061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return holder.string; 1071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }; 1091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Add the mutable cell to the builder 1111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put(mutableCell); 1121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Mutate the value 1141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert holder.string = "bar"; 1151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Make sure it uses the original value. 1171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(ImmutableTable.of('K', 42, "foo"), builder.build()); 1181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testBuilder_noDuplicates() { 1211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableTable.Builder<Character, Integer, String> builder = 1221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new ImmutableTable.Builder<Character, Integer, String>() 1231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .put('a', 1, "foo") 1241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .put('a', 1, "bar"); 1251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 1261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.build(); 1271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 1281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IllegalArgumentException e) { 1291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // success 1301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testBuilder_noNulls() { 1341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableTable.Builder<Character, Integer, String> builder = 1351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new ImmutableTable.Builder<Character, Integer, String>(); 1361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 1371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put(null, 1, "foo"); 1381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 1391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NullPointerException e) { 1401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // success 1411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 1431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put('a', null, "foo"); 1441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 1451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NullPointerException e) { 1461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // success 1471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 1491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put('a', 1, null); 1501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 1511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NullPointerException e) { 1521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // success 1531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static <R, C, V> void validateTableCopies(Table<R, C, V> original) { 1571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<R, C, V> copy = ImmutableTable.copyOf(original); 1581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(original, copy); 1591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert validateViewOrdering(original, copy); 1601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<R, C, V> built 1621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = ImmutableTable.<R, C, V>builder().putAll(original).build(); 1631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(original, built); 1641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert validateViewOrdering(original, built); 1651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static <R, C, V> void validateViewOrdering( 1681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<R, C, V> original, Table<R, C, V> copy) { 1691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(Iterables.elementsEqual(original.cellSet(), copy.cellSet())); 1701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(Iterables.elementsEqual(original.rowKeySet(), copy.rowKeySet())); 1711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(Iterables.elementsEqual(original.values(), copy.values())); 1721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCopyOf() { 1751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<Character, Integer, String> table = TreeBasedTable.create(); 1761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert validateTableCopies(table); 1771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put('b', 2, "foo"); 1781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert validateTableCopies(table); 1791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put('b', 1, "bar"); 1801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put('a', 2, "baz"); 1811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert validateTableCopies(table); 1821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Even though rowKeySet, columnKeySet, and cellSet have the same 1831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // iteration ordering, row has an inconsistent ordering. 1841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(table.row('b').keySet()).hasContentsInOrder(1, 2); 1851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(ImmutableTable.copyOf(table).row('b').keySet()) 1861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .hasContentsInOrder(2, 1); 1871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCopyOfSparse() { 1901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<Character, Integer, String> table = TreeBasedTable.create(); 1911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put('x', 2, "foo"); 1921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put('r', 1, "bar"); 1931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put('c', 3, "baz"); 1941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put('b', 7, "cat"); 1951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put('e', 5, "dog"); 1961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put('c', 0, "axe"); 1971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put('e', 3, "tub"); 1981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put('r', 4, "foo"); 1991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put('x', 5, "bar"); 2001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert validateTableCopies(table); 2011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCopyOfDense() { 2041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<Character, Integer, String> table = TreeBasedTable.create(); 2051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put('c', 3, "foo"); 2061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put('c', 2, "bar"); 2071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put('c', 1, "baz"); 2081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put('b', 3, "cat"); 2091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put('b', 1, "dog"); 2101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put('a', 3, "foo"); 2111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put('a', 2, "bar"); 2121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put('a', 1, "baz"); 2131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert validateTableCopies(table); 2141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testBuilder_orderRowsAndColumnsBy_putAll() { 2171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<Character, Integer, String> table = HashBasedTable.create(); 2181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put('b', 2, "foo"); 2191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put('b', 1, "bar"); 2201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put('a', 2, "baz"); 2211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableTable.Builder<Character, Integer, String> builder 2221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = ImmutableTable.builder(); 2231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<Character, Integer, String> copy 2241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = builder.orderRowsBy(Ordering.natural()) 2251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .orderColumnsBy(Ordering.natural()) 2261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .putAll(table).build(); 2271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(copy.rowKeySet()).hasContentsInOrder('a', 'b'); 2281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(copy.columnKeySet()).hasContentsInOrder(1, 2); 2291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(copy.values()).hasContentsInOrder("baz", "bar", "foo"); 2301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(copy.row('b').keySet()).hasContentsInOrder(1, 2); 2311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testBuilder_orderRowsAndColumnsBy_sparse() { 2341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableTable.Builder<Character, Integer, String> builder 2351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = ImmutableTable.builder(); 2361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.orderRowsBy(Ordering.natural()); 2371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.orderColumnsBy(Ordering.natural()); 2381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put('x', 2, "foo"); 2391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put('r', 1, "bar"); 2401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put('c', 3, "baz"); 2411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put('b', 7, "cat"); 2421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put('e', 5, "dog"); 2431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put('c', 0, "axe"); 2441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put('e', 3, "tub"); 2451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put('r', 4, "foo"); 2461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put('x', 5, "bar"); 2471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<Character, Integer, String> table = builder.build(); 2481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(table.rowKeySet()).hasContentsInOrder('b', 'c', 'e', 'r', 'x'); 2491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(table.columnKeySet()).hasContentsInOrder(0, 1, 2, 3, 4, 5, 7); 2501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(table.values()).hasContentsInOrder("cat", "axe", "baz", "tub", 2511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "dog", "bar", "foo", "foo", "bar"); 2521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(table.row('c').keySet()).hasContentsInOrder(0, 3); 2531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(table.column(5).keySet()).hasContentsInOrder('e', 'x'); 2541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testBuilder_orderRowsAndColumnsBy_dense() { 2571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableTable.Builder<Character, Integer, String> builder 2581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = ImmutableTable.builder(); 2591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.orderRowsBy(Ordering.natural()); 2601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.orderColumnsBy(Ordering.natural()); 2611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put('c', 3, "foo"); 2621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put('c', 2, "bar"); 2631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put('c', 1, "baz"); 2641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put('b', 3, "cat"); 2651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put('b', 1, "dog"); 2661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put('a', 3, "foo"); 2671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put('a', 2, "bar"); 2681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put('a', 1, "baz"); 2691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<Character, Integer, String> table = builder.build(); 2701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(table.rowKeySet()).hasContentsInOrder('a', 'b', 'c'); 2711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(table.columnKeySet()).hasContentsInOrder(1, 2, 3); 2721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(table.values()).hasContentsInOrder("baz", "bar", "foo", "dog", 2731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "cat", "baz", "bar", "foo"); 2741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(table.row('c').keySet()).hasContentsInOrder(1, 2, 3); 2751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(table.column(1).keySet()).hasContentsInOrder('a', 'b', 'c'); 2761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testBuilder_orderRowsBy_sparse() { 2791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableTable.Builder<Character, Integer, String> builder 2801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = ImmutableTable.builder(); 2811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.orderRowsBy(Ordering.natural()); 2821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put('x', 2, "foo"); 2831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put('r', 1, "bar"); 2841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put('c', 3, "baz"); 2851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put('b', 7, "cat"); 2861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put('e', 5, "dog"); 2871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put('c', 0, "axe"); 2881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put('e', 3, "tub"); 2891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put('r', 4, "foo"); 2901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put('x', 5, "bar"); 2911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<Character, Integer, String> table = builder.build(); 2921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(table.rowKeySet()).hasContentsInOrder('b', 'c', 'e', 'r', 'x'); 2931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(table.column(5).keySet()).hasContentsInOrder('e', 'x'); 2941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testBuilder_orderRowsBy_dense() { 2971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableTable.Builder<Character, Integer, String> builder 2981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = ImmutableTable.builder(); 2991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.orderRowsBy(Ordering.natural()); 3001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put('c', 3, "foo"); 3011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put('c', 2, "bar"); 3021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put('c', 1, "baz"); 3031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put('b', 3, "cat"); 3041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put('b', 1, "dog"); 3051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put('a', 3, "foo"); 3061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put('a', 2, "bar"); 3071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put('a', 1, "baz"); 3081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<Character, Integer, String> table = builder.build(); 3091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(table.rowKeySet()).hasContentsInOrder('a', 'b', 'c'); 3101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(table.column(1).keySet()).hasContentsInOrder('a', 'b', 'c'); 3111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testBuilder_orderColumnsBy_sparse() { 3141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableTable.Builder<Character, Integer, String> builder 3151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = ImmutableTable.builder(); 3161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.orderColumnsBy(Ordering.natural()); 3171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put('x', 2, "foo"); 3181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put('r', 1, "bar"); 3191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put('c', 3, "baz"); 3201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put('b', 7, "cat"); 3211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put('e', 5, "dog"); 3221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put('c', 0, "axe"); 3231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put('e', 3, "tub"); 3241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put('r', 4, "foo"); 3251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put('x', 5, "bar"); 3261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<Character, Integer, String> table = builder.build(); 3271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(table.columnKeySet()).hasContentsInOrder(0, 1, 2, 3, 4, 5, 7); 3281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(table.row('c').keySet()).hasContentsInOrder(0, 3); 3291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testBuilder_orderColumnsBy_dense() { 3321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableTable.Builder<Character, Integer, String> builder 3331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = ImmutableTable.builder(); 3341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.orderColumnsBy(Ordering.natural()); 3351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put('c', 3, "foo"); 3361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put('c', 2, "bar"); 3371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put('c', 1, "baz"); 3381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put('b', 3, "cat"); 3391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put('b', 1, "dog"); 3401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put('a', 3, "foo"); 3411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put('a', 2, "bar"); 3421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put('a', 1, "baz"); 3431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<Character, Integer, String> table = builder.build(); 3441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(table.columnKeySet()).hasContentsInOrder(1, 2, 3); 3451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(table.row('c').keySet()).hasContentsInOrder(1, 2, 3); 3461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert} 348