11d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/* 21d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Copyright (C) 2009 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 java.util.Arrays.asList; 201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static org.junit.contrib.truth.Truth.ASSERT; 211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.base.Objects; 231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.Table.Cell; 241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.testing.EqualsTester; 251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.testing.NullPointerTester; 261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.testing.SerializableTester; 271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Arrays; 291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Map; 301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/** 321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Test cases for {@link ArrayTable}. 331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * @author Jared Levy 351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertpublic class ArrayTableTest extends AbstractTableTest { 371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected ArrayTable<String, Integer, Character> create( 391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Object... data) { 401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // TODO: Specify different numbers of rows and columns, to detect problems 411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // that arise when the wrong size is used. 421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ArrayTable<String, Integer, Character> table = 431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ArrayTable.create(asList("foo", "bar", "cat"), asList(1, 2, 3)); 441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert populate(table, data); 451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return table; 461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected void assertSize(int expectedSize) { 491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(9, table.size()); 501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected boolean supportsRemove() { 531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return false; 541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected boolean supportsNullValues() { 571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return true; 581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Overriding tests of behavior that differs for ArrayTable. 611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public void testContains() { 631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c'); 641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(table.contains("foo", 1)); 651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(table.contains("bar", 1)); 661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(table.contains("foo", 3)); 671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(table.contains("foo", 2)); 681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(table.contains("bar", 3)); 691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(table.contains("cat", 1)); 701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(table.contains("foo", -1)); 711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(table.contains("bad", 1)); 721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(table.contains("bad", -1)); 731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(table.contains("foo", null)); 741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(table.contains(null, 1)); 751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(table.contains(null, null)); 761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public void testContainsRow() { 791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c'); 801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(table.containsRow("foo")); 811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(table.containsRow("bar")); 821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(table.containsRow("cat")); 831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(table.containsRow("bad")); 841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(table.containsRow(null)); 851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public void testContainsColumn() { 881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c'); 891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(table.containsColumn(1)); 901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(table.containsColumn(3)); 911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(table.containsColumn(2)); 921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(table.containsColumn(-1)); 931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(table.containsColumn(null)); 941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public void testContainsValue() { 971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c'); 981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(table.containsValue('a')); 991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(table.containsValue('b')); 1001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(table.containsValue('c')); 1011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(table.containsValue('x')); 1021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(table.containsValue(null)); 1031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public void testIsEmpty() { 1061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(table.isEmpty()); 1071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c'); 1081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(table.isEmpty()); 1091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public void testEquals() { 1121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c'); 1131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<String, Integer, Character> hashCopy = HashBasedTable.create(); 1141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert hashCopy.put("foo", 1, 'a'); 1151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert hashCopy.put("bar", 1, 'b'); 1161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert hashCopy.put("foo", 3, 'c'); 1171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<String, Integer, Character> reordered 1181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = create("foo", 3, 'c', "foo", 1, 'a', "bar", 1, 'b'); 1191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<String, Integer, Character> smaller 1201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = create("foo", 1, 'a', "bar", 1, 'b'); 1211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<String, Integer, Character> swapOuter 1221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = create("bar", 1, 'a', "foo", 1, 'b', "bar", 3, 'c'); 1231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<String, Integer, Character> swapValues 1241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = create("foo", 1, 'c', "bar", 1, 'b', "foo", 3, 'a'); 1251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new EqualsTester() 1271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .addEqualityGroup(table, reordered) 1281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .addEqualityGroup(hashCopy) 1291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .addEqualityGroup(smaller) 1301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .addEqualityGroup(swapOuter) 1311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .addEqualityGroup(swapValues) 1321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .testEquals(); 1331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public void testHashCode() { 1361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table = ArrayTable.create(asList("foo", "bar"), asList(1, 3)); 1371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put("foo", 1, 'a'); 1381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put("bar", 1, 'b'); 1391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put("foo", 3, 'c'); 1401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert int expected = Objects.hashCode("foo", 1, 'a') 1411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert + Objects.hashCode("bar", 1, 'b') 1421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert + Objects.hashCode("foo", 3, 'c') 1431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert + Objects.hashCode("bar", 3, 0); 1441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(expected, table.hashCode()); 1451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public void testRow() { 1481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c'); 1491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Map<Integer, Character> expected = Maps.newHashMap(); 1501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expected.put(1, 'a'); 1511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expected.put(3, 'c'); 1521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expected.put(2, null); 1531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(expected, table.row("foo")); 1541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public void testColumn() { 1571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c'); 1581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Map<String, Character> expected = Maps.newHashMap(); 1591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expected.put("foo", 'a'); 1601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expected.put("bar", 'b'); 1611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expected.put("cat", null); 1621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(expected, table.column(1)); 1631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public void testToStringSize1() { 1661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table = ArrayTable.create(ImmutableList.of("foo"), ImmutableList.of(1)); 1671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put("foo", 1, 'a'); 1681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("{foo={1=a}}", table.toString()); 1691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCreateDuplicateRows() { 1721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 1731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ArrayTable.create(asList("foo", "bar", "foo"), asList(1, 2, 3)); 1741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 1751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IllegalArgumentException expected) {} 1761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCreateDuplicateColumns() { 1791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 1801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ArrayTable.create(asList("foo", "bar"), asList(1, 2, 3, 2)); 1811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 1821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IllegalArgumentException expected) {} 1831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCreateEmptyRows() { 1861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 1871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ArrayTable.create(Arrays.<String>asList(), asList(1, 2, 3)); 1881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 1891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IllegalArgumentException expected) {} 1901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCreateEmptyColumns() { 1931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 1941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ArrayTable.create(asList("foo", "bar"), Arrays.<Integer>asList()); 1951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 1961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IllegalArgumentException expected) {} 1971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCreateCopyArrayTable() { 2001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<String, Integer, Character> original 2011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c'); 2021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<String, Integer, Character> copy = ArrayTable.create(original); 2031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(original, copy); 2041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert original.put("foo", 1, 'd'); 2051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals((Character) 'd', original.get("foo", 1)); 2061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals((Character) 'a', copy.get("foo", 1)); 2071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(copy.rowKeySet(), original.rowKeySet()); 2081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(copy.columnKeySet(), original.columnKeySet()); 2091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCreateCopyHashBasedTable() { 2121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<String, Integer, Character> original = HashBasedTable.create(); 2131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert original.put("foo", 1, 'a'); 2141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert original.put("bar", 1, 'b'); 2151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert original.put("foo", 3, 'c'); 2161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<String, Integer, Character> copy = ArrayTable.create(original); 2171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(4, copy.size()); 2181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals((Character) 'a', copy.get("foo", 1)); 2191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals((Character) 'b', copy.get("bar", 1)); 2201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals((Character) 'c', copy.get("foo", 3)); 2211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertNull(copy.get("bar", 3)); 2221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert original.put("foo", 1, 'd'); 2231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals((Character) 'd', original.get("foo", 1)); 2241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals((Character) 'a', copy.get("foo", 1)); 2251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(copy.rowKeySet(), ImmutableSet.of("foo", "bar")); 2261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(copy.columnKeySet(), ImmutableSet.of(1, 3)); 2271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCreateCopyEmptyTable() { 2301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Table<String, Integer, Character> original = HashBasedTable.create(); 2311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 2321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ArrayTable.create(original); 2331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 2341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IllegalArgumentException expected) {} 2351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testSerialization() { 2381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c'); 2391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SerializableTester.reserializeAndAssert(table); 2401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testNullPointerStatic() throws Exception { 2431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new NullPointerTester().testAllPublicStaticMethods(ArrayTable.class); 2441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testToString_ordered() { 2471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c'); 2481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("{foo={1=a, 2=null, 3=c}, " + 2491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "bar={1=b, 2=null, 3=null}, " + 2501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "cat={1=null, 2=null, 3=null}}", 2511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.toString()); 2521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("{foo={1=a, 2=null, 3=c}, " + 2531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "bar={1=b, 2=null, 3=null}, " + 2541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "cat={1=null, 2=null, 3=null}}", 2551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.rowMap().toString()); 2561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCellSetToString_ordered() { 2591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c'); 2601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("[(foo,1)=a, (foo,2)=null, (foo,3)=c, " + 2611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "(bar,1)=b, (bar,2)=null, (bar,3)=null, " + 2621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "(cat,1)=null, (cat,2)=null, (cat,3)=null]", 2631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.cellSet().toString()); 2641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testRowKeySetToString_ordered() { 2671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c'); 2681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("[foo, bar, cat]", table.rowKeySet().toString()); 2691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testColumnKeySetToString_ordered() { 2721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c'); 2731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("[1, 2, 3]", table.columnKeySet().toString()); 2741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testValuesToString_ordered() { 2771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c'); 2781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("[a, null, c, b, null, null, null, null, null]", 2791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.values().toString()); 2801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testRowKeyList() { 2831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ArrayTable<String, Integer, Character> table 2841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c'); 2851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(table.rowKeyList()).hasContentsInOrder("foo", "bar", "cat"); 2861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testColumnKeyList() { 2891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ArrayTable<String, Integer, Character> table 2901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c'); 2911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(table.columnKeyList()).hasContentsInOrder(1, 2, 3); 2921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testGetMissingKeys() { 2951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c'); 2961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertNull(table.get("dog", 1)); 2971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertNull(table.get("foo", 4)); 2981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testAt() { 3011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ArrayTable<String, Integer, Character> table 3021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c'); 3031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals((Character) 'b', table.at(1, 0)); 3041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals((Character) 'c', table.at(0, 2)); 3051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertNull(table.at(1, 2)); 3061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 3071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.at(1, 3); 3081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 3091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IndexOutOfBoundsException expected) {} 3101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 3111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.at(1, -1); 3121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 3131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IndexOutOfBoundsException expected) {} 3141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 3151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.at(3, 2); 3161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 3171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IndexOutOfBoundsException expected) {} 3181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 3191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.at(-1, 2); 3201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 3211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IndexOutOfBoundsException expected) {} 3221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testSet() { 3251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ArrayTable<String, Integer, Character> table 3261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c'); 3271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals((Character) 'b', table.set(1, 0, 'd')); 3281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals((Character) 'd', table.get("bar", 1)); 3291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertNull(table.set(2, 0, 'e')); 3301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals((Character) 'e', table.get("cat", 1)); 3311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals((Character) 'a', table.set(0, 0, null)); 3321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertNull(table.get("foo", 1)); 3331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 3341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.set(1, 3, 'z'); 3351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 3361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IndexOutOfBoundsException expected) {} 3371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 3381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.set(1, -1, 'z'); 3391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 3401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IndexOutOfBoundsException expected) {} 3411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 3421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.set(3, 2, 'z'); 3431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 3441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IndexOutOfBoundsException expected) {} 3451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 3461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.set(-1, 2, 'z'); 3471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 3481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IndexOutOfBoundsException expected) {} 3491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(table.containsValue('z')); 3501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testEraseAll() { 3531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ArrayTable<String, Integer, Character> table 3541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c'); 3551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.eraseAll(); 3561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(9, table.size()); 3571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertNull(table.get("bar", 1)); 3581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(table.containsRow("foo")); 3591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(table.containsValue('a')); 3601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testPutIllegal() { 3631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c'); 3641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 3651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put("dog", 1, 'd'); 3661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 3671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IllegalArgumentException expected) { 3681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("Row dog not in [foo, bar, cat]", expected.getMessage()); 3691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 3711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.put("foo", 4, 'd'); 3721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 3731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IllegalArgumentException expected) { 3741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("Column 4 not in [1, 2, 3]", expected.getMessage()); 3751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(table.containsValue('d')); 3771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testErase() { 3801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ArrayTable<String, Integer, Character> table 3811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c'); 3821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals((Character) 'b', table.erase("bar", 1)); 3831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertNull(table.get("bar", 1)); 3841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(9, table.size()); 3851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertNull(table.erase("bar", 1)); 3861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertNull(table.erase("foo", 2)); 3871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertNull(table.erase("dog", 1)); 3881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertNull(table.erase("bar", 5)); 3891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertNull(table.erase(null, 1)); 3901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertNull(table.erase("bar", null)); 3911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testToArray() { 3941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ArrayTable<String, Integer, Character> table 3951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c'); 3961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Character[][] array = table.toArray(Character.class); 3971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(3, array.length); 3981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(array[0]).hasContentsInOrder('a', null, 'c'); 3991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(array[1]).hasContentsInOrder('b', null, null); 4001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(array[2]).hasContentsInOrder(null, null, null); 4011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table.set(0, 2, 'd'); 4021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals((Character) 'c', array[0][2]); 4031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert array[0][2] = 'e'; 4041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals((Character) 'd', table.at(0, 2)); 4051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCellReflectsChanges() { 4081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c'); 4091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Cell<String, Integer, Character> cell = table.cellSet().iterator().next(); 4101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Tables.immutableCell("foo", 1, 'a'), cell); 4111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals((Character) 'a', table.put("foo", 1, 'd')); 4121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Tables.immutableCell("foo", 1, 'd'), cell); 4131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testRowMissing() { 4161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c'); 4171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Map<Integer, Character> row = table.row("dog"); 4181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(row.isEmpty()); 4191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 4201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert row.put(1, 'd'); 4211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 4221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (UnsupportedOperationException expected) {} 4231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testColumnMissing() { 4261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c'); 4271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Map<String, Character> column = table.column(4); 4281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(column.isEmpty()); 4291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 4301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert column.put("foo", 'd'); 4311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 4321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (UnsupportedOperationException expected) {} 4331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testRowPutIllegal() { 4361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c'); 4371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Map<Integer, Character> map = table.row("foo"); 4381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 4391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert map.put(4, 'd'); 4401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 4411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IllegalArgumentException expected) { 4421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("Column 4 not in [1, 2, 3]", expected.getMessage()); 4431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testColumnPutIllegal() { 4471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c'); 4481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Map<String, Character> map = table.column(3); 4491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 4501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert map.put("dog", 'd'); 4511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 4521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IllegalArgumentException expected) { 4531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("Row dog not in [foo, bar, cat]", expected.getMessage()); 4541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert} 457