11d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/* 21d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Copyright (C) 2007 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 Bringert 211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.annotations.GwtCompatible; 221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.annotations.GwtIncompatible; 231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.testing.SerializableTester; 241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport junit.framework.TestCase; 261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.io.Serializable; 281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Collections; 291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Iterator; 301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Map; 311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Map.Entry; 321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Set; 331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/** 351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Common tests for any {@code BiMap}. 361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * @author Kevin Bourrillion 381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert@GwtCompatible(emulated = true) 401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertpublic abstract class AbstractBiMapTest extends TestCase { 411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert protected abstract BiMap<Integer, String> create(); 431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert protected BiMap<Integer, String> bimap; 451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert protected Set<Entry<Integer, String>> entrySet; 461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // public for GWT 481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public void setUp() throws Exception { 491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert super.setUp(); 501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert bimap = create(); 511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert entrySet = bimap.entrySet(); 521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testClear() { 551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert bimap.clear(); 561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(bimap.isEmpty()); 571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert putOneTwoThree(); 581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert bimap.clear(); 591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(bimap.isEmpty()); 601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testContainsKey() { 631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(bimap.containsKey(null)); 641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(bimap.containsKey(1)); 651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(bimap.containsKey("one")); 661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert bimap.put(1, "one"); 681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(bimap.containsKey(1)); 691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert bimap.put(null, null); 711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(bimap.containsKey(null)); 721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testContainsValue() { 751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(bimap.containsValue(null)); 761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(bimap.containsValue(1)); 771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(bimap.containsValue("one")); 781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert bimap.put(1, "one"); 801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(bimap.containsValue("one")); 811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert bimap.put(null, null); 831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(bimap.containsValue(null)); 841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testEquals() { 871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert BiMap<Integer, String> biMap = create(); 881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(biMap, biMap); 891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(create(), biMap); 901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert biMap.put(1, null); 911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(create().equals(biMap)); 921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testGet() { 951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertNull(bimap.get(1)); 961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertNull(bimap.get(null)); 971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertNull(bimap.get("bad")); 981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert bimap.put(1, "one"); 1001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert bimap.put(0, null); 1011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert bimap.put(null, "nothing"); 1021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("one", bimap.get(1)); 1031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertNull(bimap.get(0)); 1041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("nothing", bimap.get(null)); 1051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertNull(bimap.get("bad")); 1061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert bimap.forcePut(null, null); 1081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertNull(bimap.get(null)); 1091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert bimap.remove(null); 1101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertNull(bimap.get(null)); 1111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testInverseSimple() { 1141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert BiMap<String, Integer> inverse = bimap.inverse(); 1151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert bimap.put(1, "one"); 1161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert bimap.put(2, "two"); 1171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(ImmutableMap.of("one", 1, "two", 2), inverse); 1181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // see InverseBiMapTest 1191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(bimap, inverse.inverse()); 1211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testInversePut() { 1241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert BiMap<String, Integer> inverse = bimap.inverse(); 1251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert bimap.put(1, "one"); 1261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert bimap.inverse().put("two", 2); 1271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(ImmutableMap.of("one", 1, "two", 2), inverse); 1281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(ImmutableMap.of(1, "one", 2, "two"), bimap); 1291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testIsEmpty() { 1321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(bimap.isEmpty()); 1331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert bimap.put(1, "one"); 1341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(bimap.isEmpty()); 1351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert bimap.remove(1); 1361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(bimap.isEmpty()); 1371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testPut() { 1401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert bimap.put(1, "one"); 1411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(ImmutableMap.of(1, "one"), bimap); 1421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert bimap.put(2, "two"); 1441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(ImmutableMap.of(1, "one", 2, "two"), bimap); 1451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert bimap.put(2, "two"); 1471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(ImmutableMap.of(1, "one", 2, "two"), bimap); 1481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert bimap.put(1, "ONE"); 1501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(ImmutableMap.of(1, "ONE", 2, "two"), bimap); 1511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 1531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert bimap.put(3, "two"); 1541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 1551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IllegalArgumentException e) { 1561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(ImmutableMap.of(1, "ONE", 2, "two"), bimap); 1581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert bimap.put(-1, null); 1601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert bimap.put(null, "null"); 1611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Map<Integer, String> expected = Maps.newHashMap(); 1621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expected.put(1, "ONE"); 1631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expected.put(2, "two"); 1641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expected.put(-1, null); 1651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expected.put(null, "null"); 1661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(expected, bimap); 1681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert bimap.remove(-1); 1701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert bimap.put(null, null); 1711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expected.remove(-1); 1731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expected.put(null, null); 1741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(expected, bimap); 1761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testPutNull() { 1791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert bimap.put(-1, null); 1801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(bimap.containsValue(null)); 1811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert bimap.put(1, "one"); 1821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(bimap.containsValue(null)); 1831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testPutAll() { 1861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert bimap.put(1, "one"); 1871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Map<Integer, String> newEntries = ImmutableMap.of(2, "two", 3, "three"); 1881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert bimap.putAll(newEntries); 1891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(ImmutableMap.of(1, "one", 2, "two", 3, "three"), bimap); 1901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testForcePut() { 1931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertNull(bimap.forcePut(1, "one")); 1941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(ImmutableMap.of(1, "one"), bimap); 1951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("one", bimap.forcePut(1, "one")); 1961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(ImmutableMap.of(1, "one"), bimap); 1971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("one", bimap.forcePut(1, "ONE")); 1981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(ImmutableMap.of(1, "ONE"), bimap); 1991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertNull(bimap.forcePut(-1, "ONE")); // key 1 disappears without a trace 2001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(ImmutableMap.of(-1, "ONE"), bimap); 2011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertNull(bimap.forcePut(2, "two")); 2021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(ImmutableMap.of(-1, "ONE", 2, "two"), bimap); 2031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("two", bimap.forcePut(2, "ONE")); 2041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(ImmutableMap.of(2, "ONE"), bimap); 2051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testRemove() { 2081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Map<Integer, String> map = Maps.newHashMap(); 2091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert map.put(0, null); 2101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert map.put(1, "one"); 2111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert map.put(null, "null"); 2121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert bimap.putAll(map); 2141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertNull(bimap.remove(0)); 2151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert map.remove(0); 2171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(map, bimap); 2181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("null", bimap.remove(null)); 2201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Collections.singletonMap(1, "one"), bimap); 2211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertNull(bimap.remove(15)); 2231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("one", bimap.remove(1)); 2251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(bimap.isEmpty()); 2261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testSize() { 2291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0, bimap.size()); 2301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert bimap.put(1, "one"); 2311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(1, bimap.size()); 2321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert bimap.put(1, "ONE"); 2331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(1, bimap.size()); 2341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert bimap.put(2, "two"); 2351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(2, bimap.size()); 2361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert bimap.forcePut(1, "two"); 2371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(1, bimap.size()); 2381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testToString() { 2411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert bimap.put(1, "one"); 2421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert bimap.put(2, "two"); 2431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String string = bimap.toString(); 2451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String expected = string.startsWith("{1") 2461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ? "{1=one, 2=two}" 2471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert : "{2=two, 1=one}"; 2481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(expected, bimap.toString()); 2491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Entry Set 2521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testEntrySetAdd() { 2541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 2551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert entrySet.add(Maps.immutableEntry(1, "one")); 2561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 2571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (UnsupportedOperationException expected) { 2581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testEntrySetAddAll() { 2621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 2631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert entrySet.addAll(Collections.singleton(Maps.immutableEntry(1, "one"))); 2641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 2651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (UnsupportedOperationException expected) { 2661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testEntrySetClear() { 2701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert entrySet.clear(); 2711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(entrySet.isEmpty()); 2721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(bimap.isEmpty()); 2731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert putOneTwoThree(); 2741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert entrySet.clear(); 2751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(entrySet.isEmpty()); 2761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(bimap.isEmpty()); 2771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testEntrySetContains() { 2801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(entrySet.contains(Maps.immutableEntry(1, "one"))); 2811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert bimap.put(1, "one"); 2821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(entrySet.contains(Maps.immutableEntry(1, "one"))); 2831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(entrySet.contains(Maps.immutableEntry(1, ""))); 2841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(entrySet.contains(Maps.immutableEntry(0, "one"))); 2851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(entrySet.contains(Maps.immutableEntry(1, null))); 2861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(entrySet.contains(Maps.immutableEntry(null, "one"))); 2871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(entrySet.contains(Maps.immutableEntry(null, null))); 2881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert bimap.put(null, null); 2901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(entrySet.contains(Maps.immutableEntry(1, "one"))); 2911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(entrySet.contains(Maps.immutableEntry(null, null))); 2921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(entrySet.contains(Maps.immutableEntry(1, ""))); 2931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(entrySet.contains(Maps.immutableEntry(0, "one"))); 2941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(entrySet.contains(Maps.immutableEntry(1, null))); 2951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(entrySet.contains(Maps.immutableEntry(null, "one"))); 2961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert bimap.put(null, "null"); 2981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert bimap.put(0, null); 2991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(entrySet.contains(Maps.immutableEntry(1, "one"))); 3001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(entrySet.contains(Maps.immutableEntry(null, "null"))); 3011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(entrySet.contains(Maps.immutableEntry(0, null))); 3021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(entrySet.contains(Maps.immutableEntry(1, ""))); 3031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(entrySet.contains(Maps.immutableEntry(0, "one"))); 3041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(entrySet.contains(Maps.immutableEntry(1, null))); 3051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(entrySet.contains(Maps.immutableEntry(null, "one"))); 3061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(entrySet.contains(Maps.immutableEntry(null, null))); 3071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testEntrySetIsEmpty() { 3101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(entrySet.isEmpty()); 3111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert bimap.put(1, "one"); 3121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(entrySet.isEmpty()); 3131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert bimap.remove(1); 3141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(entrySet.isEmpty()); 3151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testEntrySetRemove() { 3181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert putOneTwoThree(); 3191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(bimap.containsKey(1)); 3201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(bimap.containsValue("one")); 3211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(entrySet.remove(Maps.immutableEntry(1, "one"))); 3221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(bimap.containsKey(1)); 3231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(bimap.containsValue("one")); 3241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(2, bimap.size()); 3251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(2, bimap.inverse().size()); 3261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(entrySet.remove(Maps.immutableEntry(2, "three"))); 3271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(entrySet.remove(3)); 3281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(2, bimap.size()); 3291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(2, bimap.inverse().size()); 3301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testEntrySetRemoveAll() { 3331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert putOneTwoThree(); 3341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(bimap.containsKey(1)); 3351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(bimap.containsValue("one")); 3361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(entrySet.removeAll( 3371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collections.singleton(Maps.immutableEntry(1, "one")))); 3381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(bimap.containsKey(1)); 3391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(bimap.containsValue("one")); 3401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(2, bimap.size()); 3411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(2, bimap.inverse().size()); 3421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testEntrySetValue() { 3451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert bimap.put(1, "one"); 3461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Entry<Integer, String> entry = bimap.entrySet().iterator().next(); 3471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert bimap.put(2, "two"); 3481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("one", entry.getValue()); 3491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert bimap.put(1, "one"); 3501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("one", entry.getValue()); 3511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("one", bimap.get(1)); 3521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Integer.valueOf(1), bimap.inverse().get("one")); 3531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert bimap.put(1, "uno"); 3541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("uno", entry.getValue()); 3551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("uno", bimap.get(1)); 3561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Integer.valueOf(1), bimap.inverse().get("uno")); 3571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(2, bimap.size()); 3581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(2, bimap.inverse().size()); 3591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 3601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert entry.setValue("two"); 3611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 3621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IllegalArgumentException expected) {} 3631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("uno", entry.getValue()); 3641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("uno", bimap.get(1)); 3651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Integer.valueOf(1), bimap.inverse().get("uno")); 3661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(2, bimap.size()); 3671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(2, bimap.inverse().size()); 3681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testEntrySetValueRemovedEntry() { 3711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert bimap.put(1, "a"); 3721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Entry<Integer, String> entry = bimap.entrySet().iterator().next(); 3731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert bimap.clear(); 3741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 3751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert entry.setValue("b"); 3761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 3771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IllegalStateException expected) {} 3781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0, bimap.size()); 3791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0, bimap.inverse().size()); 3801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testEntrySetValueRemovedEntryNullOldValue() { 3831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert bimap.put(1, null); 3841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Entry<Integer, String> entry = bimap.entrySet().iterator().next(); 3851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert bimap.clear(); 3861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 3871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert entry.setValue("b"); 3881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 3891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IllegalStateException expected) {} 3901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0, bimap.size()); 3911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0, bimap.inverse().size()); 3921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testEntrySetValueRemovedEntryAddedEqualEntry() { 3951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert bimap.put(1, "a"); 3961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Entry<Integer, String> entry = bimap.entrySet().iterator().next(); 3971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert bimap.clear(); 3981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert bimap.put(1, "a"); 3991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 4001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert entry.setValue("b"); 4011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 4021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IllegalStateException expected) {} 4031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(1, bimap.size()); 4041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("a", bimap.get(1)); 4051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(1, bimap.inverse().size()); 4061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals((Integer) 1, bimap.inverse().get("a")); 4071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testKeySetIteratorRemove() { 4101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert putOneTwoThree(); 4111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<Integer> iterator = bimap.keySet().iterator(); 4121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert iterator.next(); 4131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert iterator.remove(); 4141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(2, bimap.size()); 4151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(2, bimap.inverse().size()); 4161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testKeySetRemoveAll() { 4191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert putOneTwoThree(); 4201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Set<Integer> keySet = bimap.keySet(); 4211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(keySet.removeAll(asList(1, 3))); 4221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(1, bimap.size()); 4231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(keySet.contains(2)); 4241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testKeySetRetainAll() { 4271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert putOneTwoThree(); 4281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Set<Integer> keySet = bimap.keySet(); 4291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(keySet.retainAll(Collections.singleton(2))); 4301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(1, bimap.size()); 4311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(keySet.contains(2)); 4321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testEntriesIteratorRemove() { 4351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert putOneTwoThree(); 4361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<Entry<Integer, String>> iterator = bimap.entrySet().iterator(); 4371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert iterator.next(); 4381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert iterator.remove(); 4391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(2, bimap.size()); 4401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(2, bimap.inverse().size()); 4411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testEntriesRetainAll() { 4441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert putOneTwoThree(); 4451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Set<Map.Entry<Integer, String>> entries = bimap.entrySet(); 4461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Map.Entry<Integer, String> entry = Maps.immutableEntry(2, "two"); 4471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(entries.retainAll(Collections.singleton(entry))); 4481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(1, bimap.size()); 4491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(bimap.containsKey(2)); 4501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testValuesIteratorRemove() { 4531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert putOneTwoThree(); 4541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> iterator = bimap.values().iterator(); 4551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert iterator.next(); 4561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert iterator.remove(); 4571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(2, bimap.size()); 4581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(2, bimap.inverse().size()); 4591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testValuesToArray() { 4621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert bimap.put(1, "one"); 4631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String[] array = new String[3]; 4641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert array[1] = "garbage"; 4651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(array, bimap.values().toArray(array)); 4661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("one", array[0]); 4671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertNull(array[1]); 4681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testValuesToString() { 4711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert bimap.put(1, "one"); 4721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("[one]", bimap.values().toString()); 4731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("SerializableTester") 4761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testSerialization() { 4771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert bimap.put(1, "one"); 4781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert bimap.put(2, "two"); 4791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert bimap.put(3, "three"); 4801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert bimap.put(null, null); 4811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert BiMap<Integer, String> copy = 4831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SerializableTester.reserializeAndAssert(bimap); 4841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(bimap.inverse(), copy.inverse()); 4851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert void putOneTwoThree() { 4881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert bimap.put(1, "one"); 4891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert bimap.put(2, "two"); 4901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert bimap.put(3, "three"); 4911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("used only by @GwtIncompatible code") 4941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static class BiMapPair implements Serializable { 4951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert final BiMap<Integer, String> forward; 4961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert final BiMap<String, Integer> backward; 4971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert BiMapPair(BiMap<Integer, String> original) { 4991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert this.forward = original; 5001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert this.backward = original.inverse(); 5011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static final long serialVersionUID = 0; 5041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("SerializableTester") 5071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testSerializationWithInverseEqual() { 5081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert bimap.put(1, "one"); 5091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert bimap.put(2, "two"); 5101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert bimap.put(3, "three"); 5111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert bimap.put(null, null); 5121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert BiMapPair pair = new BiMapPair(bimap); 5141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert BiMapPair copy = SerializableTester.reserialize(pair); 5151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(pair.forward, copy.forward); 5161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(pair.backward, copy.backward); 5171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert copy.forward.put(4, "four"); 5191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert copy.backward.put("five", 5); 5201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(copy.backward, copy.forward.inverse()); 5211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(copy.forward, copy.backward.inverse()); 5221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(copy.forward.containsKey(4)); 5241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(copy.forward.containsKey(5)); 5251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(copy.backward.containsValue(4)); 5261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(copy.backward.containsValue(5)); 5271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(copy.forward.containsValue("four")); 5281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(copy.forward.containsValue("five")); 5291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(copy.backward.containsKey("four")); 5301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(copy.backward.containsKey("five")); 5311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /** 5341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * The sameness checks ensure that a bimap and its inverse remain consistent, 5351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * even after the deserialized instances are updated. Also, the relationship 5361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * {@code a == b.inverse()} should continue to hold after both bimaps are 5371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * serialized and deserialized together. 5381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 5391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("SerializableTester") 5401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testSerializationWithInverseSame() { 5411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert bimap.put(1, "one"); 5421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert bimap.put(2, "two"); 5431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert bimap.put(3, "three"); 5441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert bimap.put(null, null); 5451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert BiMapPair pair = new BiMapPair(bimap); 5471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert BiMapPair copy = SerializableTester.reserialize(pair); 5481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(copy.backward, copy.forward.inverse()); 5491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(copy.forward, copy.backward.inverse()); 5501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert} 552