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 197dd252788645e940eada959bdde927426e2531c9Paul Duffinimport static com.google.common.collect.testing.Helpers.orderEntriesByKey; 203ecfa412eddc4b084663f38d562537b86b9734d5Paul Duffinimport static com.google.common.truth.Truth.assertThat; 211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.annotations.GwtCompatible; 231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.annotations.GwtIncompatible; 247dd252788645e940eada959bdde927426e2531c9Paul Duffinimport com.google.common.collect.testing.Helpers; 257dd252788645e940eada959bdde927426e2531c9Paul Duffinimport com.google.common.collect.testing.SampleElements; 267dd252788645e940eada959bdde927426e2531c9Paul Duffinimport com.google.common.collect.testing.features.CollectionFeature; 277dd252788645e940eada959bdde927426e2531c9Paul Duffinimport com.google.common.collect.testing.features.CollectionSize; 287dd252788645e940eada959bdde927426e2531c9Paul Duffinimport com.google.common.collect.testing.features.MapFeature; 297dd252788645e940eada959bdde927426e2531c9Paul Duffinimport com.google.common.collect.testing.google.BiMapTestSuiteBuilder; 307dd252788645e940eada959bdde927426e2531c9Paul Duffinimport com.google.common.collect.testing.google.TestBiMapGenerator; 317dd252788645e940eada959bdde927426e2531c9Paul Duffinimport com.google.common.testing.EqualsTester; 327dd252788645e940eada959bdde927426e2531c9Paul Duffinimport com.google.common.testing.NullPointerTester; 331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.testing.SerializableTester; 341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 350888a09821a98ac0680fad765217302858e70fa4Paul Duffinimport junit.framework.Test; 360888a09821a98ac0680fad765217302858e70fa4Paul Duffinimport junit.framework.TestCase; 370888a09821a98ac0680fad765217302858e70fa4Paul Duffinimport junit.framework.TestSuite; 380888a09821a98ac0680fad765217302858e70fa4Paul Duffin 391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Collections; 407dd252788645e940eada959bdde927426e2531c9Paul Duffinimport java.util.Iterator; 417dd252788645e940eada959bdde927426e2531c9Paul Duffinimport java.util.List; 421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Map; 437dd252788645e940eada959bdde927426e2531c9Paul Duffinimport java.util.Map.Entry; 441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Set; 451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/** 471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Tests for {@code EnumBiMap}. 481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * @author Mike Bostock 501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * @author Jared Levy 511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert@GwtCompatible(emulated = true) 531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertpublic class EnumBiMapTest extends TestCase { 547dd252788645e940eada959bdde927426e2531c9Paul Duffin private enum Currency { DOLLAR, FRANC, PESO, POUND, YEN } 557dd252788645e940eada959bdde927426e2531c9Paul Duffin private enum Country { CANADA, CHILE, JAPAN, SWITZERLAND, UK } 567dd252788645e940eada959bdde927426e2531c9Paul Duffin 577dd252788645e940eada959bdde927426e2531c9Paul Duffin public static final class EnumBiMapGenerator implements TestBiMapGenerator<Country, Currency> { 587dd252788645e940eada959bdde927426e2531c9Paul Duffin @SuppressWarnings("unchecked") 597dd252788645e940eada959bdde927426e2531c9Paul Duffin @Override 607dd252788645e940eada959bdde927426e2531c9Paul Duffin public BiMap<Country, Currency> create(Object... entries) { 617dd252788645e940eada959bdde927426e2531c9Paul Duffin BiMap<Country, Currency> result = EnumBiMap.create(Country.class, Currency.class); 627dd252788645e940eada959bdde927426e2531c9Paul Duffin for (Object object : entries) { 637dd252788645e940eada959bdde927426e2531c9Paul Duffin Entry<Country, Currency> entry = (Entry<Country, Currency>) object; 647dd252788645e940eada959bdde927426e2531c9Paul Duffin result.put(entry.getKey(), entry.getValue()); 657dd252788645e940eada959bdde927426e2531c9Paul Duffin } 667dd252788645e940eada959bdde927426e2531c9Paul Duffin return result; 677dd252788645e940eada959bdde927426e2531c9Paul Duffin } 687dd252788645e940eada959bdde927426e2531c9Paul Duffin 697dd252788645e940eada959bdde927426e2531c9Paul Duffin @Override 707dd252788645e940eada959bdde927426e2531c9Paul Duffin public SampleElements<Entry<Country, Currency>> samples() { 717dd252788645e940eada959bdde927426e2531c9Paul Duffin return new SampleElements<Entry<Country, Currency>>( 727dd252788645e940eada959bdde927426e2531c9Paul Duffin Helpers.mapEntry(Country.CANADA, Currency.DOLLAR), 737dd252788645e940eada959bdde927426e2531c9Paul Duffin Helpers.mapEntry(Country.CHILE, Currency.PESO), 747dd252788645e940eada959bdde927426e2531c9Paul Duffin Helpers.mapEntry(Country.UK, Currency.POUND), 757dd252788645e940eada959bdde927426e2531c9Paul Duffin Helpers.mapEntry(Country.JAPAN, Currency.YEN), 767dd252788645e940eada959bdde927426e2531c9Paul Duffin Helpers.mapEntry(Country.SWITZERLAND, Currency.FRANC)); 777dd252788645e940eada959bdde927426e2531c9Paul Duffin } 787dd252788645e940eada959bdde927426e2531c9Paul Duffin 797dd252788645e940eada959bdde927426e2531c9Paul Duffin @SuppressWarnings("unchecked") 807dd252788645e940eada959bdde927426e2531c9Paul Duffin @Override 817dd252788645e940eada959bdde927426e2531c9Paul Duffin public Entry<Country, Currency>[] createArray(int length) { 827dd252788645e940eada959bdde927426e2531c9Paul Duffin return new Entry[length]; 837dd252788645e940eada959bdde927426e2531c9Paul Duffin } 847dd252788645e940eada959bdde927426e2531c9Paul Duffin 857dd252788645e940eada959bdde927426e2531c9Paul Duffin @Override 867dd252788645e940eada959bdde927426e2531c9Paul Duffin public Iterable<Entry<Country, Currency>> order(List<Entry<Country, Currency>> insertionOrder) { 877dd252788645e940eada959bdde927426e2531c9Paul Duffin return orderEntriesByKey(insertionOrder); 887dd252788645e940eada959bdde927426e2531c9Paul Duffin } 897dd252788645e940eada959bdde927426e2531c9Paul Duffin 907dd252788645e940eada959bdde927426e2531c9Paul Duffin @Override 917dd252788645e940eada959bdde927426e2531c9Paul Duffin public Country[] createKeyArray(int length) { 927dd252788645e940eada959bdde927426e2531c9Paul Duffin return new Country[length]; 937dd252788645e940eada959bdde927426e2531c9Paul Duffin } 947dd252788645e940eada959bdde927426e2531c9Paul Duffin 957dd252788645e940eada959bdde927426e2531c9Paul Duffin @Override 967dd252788645e940eada959bdde927426e2531c9Paul Duffin public Currency[] createValueArray(int length) { 977dd252788645e940eada959bdde927426e2531c9Paul Duffin return new Currency[length]; 987dd252788645e940eada959bdde927426e2531c9Paul Duffin } 997dd252788645e940eada959bdde927426e2531c9Paul Duffin } 1007dd252788645e940eada959bdde927426e2531c9Paul Duffin 1017dd252788645e940eada959bdde927426e2531c9Paul Duffin @GwtIncompatible("suite") 1027dd252788645e940eada959bdde927426e2531c9Paul Duffin public static Test suite() { 1037dd252788645e940eada959bdde927426e2531c9Paul Duffin TestSuite suite = new TestSuite(); 1047dd252788645e940eada959bdde927426e2531c9Paul Duffin suite.addTest(BiMapTestSuiteBuilder.using(new EnumBiMapGenerator()) 1057dd252788645e940eada959bdde927426e2531c9Paul Duffin .named("EnumBiMap") 1067dd252788645e940eada959bdde927426e2531c9Paul Duffin .withFeatures(CollectionSize.ANY, 1077dd252788645e940eada959bdde927426e2531c9Paul Duffin CollectionFeature.SERIALIZABLE, 1080888a09821a98ac0680fad765217302858e70fa4Paul Duffin CollectionFeature.SUPPORTS_ITERATOR_REMOVE, 1097dd252788645e940eada959bdde927426e2531c9Paul Duffin MapFeature.GENERAL_PURPOSE, 1107dd252788645e940eada959bdde927426e2531c9Paul Duffin CollectionFeature.KNOWN_ORDER) 1117dd252788645e940eada959bdde927426e2531c9Paul Duffin .createTestSuite()); 1127dd252788645e940eada959bdde927426e2531c9Paul Duffin suite.addTestSuite(EnumBiMapTest.class); 1137dd252788645e940eada959bdde927426e2531c9Paul Duffin return suite; 1147dd252788645e940eada959bdde927426e2531c9Paul Duffin } 1151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCreate() { 1171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert EnumBiMap<Currency, Country> bimap = 1181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert EnumBiMap.create(Currency.class, Country.class); 1191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(bimap.isEmpty()); 1201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("{}", bimap.toString()); 1211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(HashBiMap.create(), bimap); 1221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert bimap.put(Currency.DOLLAR, Country.CANADA); 1231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Country.CANADA, bimap.get(Currency.DOLLAR)); 1241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Currency.DOLLAR, bimap.inverse().get(Country.CANADA)); 1251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCreateFromMap() { 1281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /* Test with non-empty Map. */ 1291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Map<Currency, Country> map = ImmutableMap.of( 1301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Currency.DOLLAR, Country.CANADA, 1311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Currency.PESO, Country.CHILE, 1321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Currency.FRANC, Country.SWITZERLAND); 1331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert EnumBiMap<Currency, Country> bimap = EnumBiMap.create(map); 1341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Country.CANADA, bimap.get(Currency.DOLLAR)); 1351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Currency.DOLLAR, bimap.inverse().get(Country.CANADA)); 1361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /* Map must have at least one entry if not an EnumBiMap. */ 1381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 1391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert EnumBiMap.create(Collections.<Currency, Country>emptyMap()); 1401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail("IllegalArgumentException expected"); 1411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IllegalArgumentException expected) {} 1421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 1431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert EnumBiMap.create( 1441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert EnumHashBiMap.<Currency, Country>create(Currency.class)); 1451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail("IllegalArgumentException expected"); 1461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IllegalArgumentException expected) {} 1471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /* Map can be empty if it's an EnumBiMap. */ 1491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Map<Currency, Country> emptyBimap = 1501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert EnumBiMap.create(Currency.class, Country.class); 1511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert bimap = EnumBiMap.create(emptyBimap); 1521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(bimap.isEmpty()); 1531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testEnumBiMapConstructor() { 1561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /* Test that it copies existing entries. */ 1571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert EnumBiMap<Currency, Country> bimap1 = 1581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert EnumBiMap.create(Currency.class, Country.class); 1591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert bimap1.put(Currency.DOLLAR, Country.CANADA); 1601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert EnumBiMap<Currency, Country> bimap2 = 1611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert EnumBiMap.create(bimap1); 1621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Country.CANADA, bimap2.get(Currency.DOLLAR)); 1631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(bimap1, bimap2); 1641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert bimap2.inverse().put(Country.SWITZERLAND, Currency.FRANC); 1651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Country.SWITZERLAND, bimap2.get(Currency.FRANC)); 1661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertNull(bimap1.get(Currency.FRANC)); 1671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(bimap2.equals(bimap1)); 1681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /* Test that it can be empty. */ 1701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert EnumBiMap<Currency, Country> emptyBimap = 1711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert EnumBiMap.create(Currency.class, Country.class); 1721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert EnumBiMap<Currency, Country> bimap3 = 1731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert EnumBiMap.create(emptyBimap); 1741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(bimap3, emptyBimap); 1751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testKeyType() { 1781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert EnumBiMap<Currency, Country> bimap = 1791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert EnumBiMap.create(Currency.class, Country.class); 1801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Currency.class, bimap.keyType()); 1811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testValueType() { 1841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert EnumBiMap<Currency, Country> bimap = 1851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert EnumBiMap.create(Currency.class, Country.class); 1861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Country.class, bimap.valueType()); 1871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1897dd252788645e940eada959bdde927426e2531c9Paul Duffin public void testIterationOrder() { 1907dd252788645e940eada959bdde927426e2531c9Paul Duffin // The enum orderings are alphabetical, leading to the bimap and its inverse 1917dd252788645e940eada959bdde927426e2531c9Paul Duffin // having inconsistent iteration orderings. 1921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Map<Currency, Country> map = ImmutableMap.of( 1931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Currency.DOLLAR, Country.CANADA, 1941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Currency.PESO, Country.CHILE, 1951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Currency.FRANC, Country.SWITZERLAND); 1961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert EnumBiMap<Currency, Country> bimap = EnumBiMap.create(map); 1971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1987dd252788645e940eada959bdde927426e2531c9Paul Duffin // forward map ordered by currency 1993ecfa412eddc4b084663f38d562537b86b9734d5Paul Duffin assertThat(bimap.keySet()) 2000888a09821a98ac0680fad765217302858e70fa4Paul Duffin .has().exactly(Currency.DOLLAR, Currency.FRANC, Currency.PESO).inOrder(); 2017dd252788645e940eada959bdde927426e2531c9Paul Duffin // forward map ordered by currency (even for country values) 2023ecfa412eddc4b084663f38d562537b86b9734d5Paul Duffin assertThat(bimap.values()) 2030888a09821a98ac0680fad765217302858e70fa4Paul Duffin .has().exactly(Country.CANADA, Country.SWITZERLAND, Country.CHILE).inOrder(); 2047dd252788645e940eada959bdde927426e2531c9Paul Duffin // backward map ordered by country 2053ecfa412eddc4b084663f38d562537b86b9734d5Paul Duffin assertThat(bimap.inverse().keySet()) 2060888a09821a98ac0680fad765217302858e70fa4Paul Duffin .has().exactly(Country.CANADA, Country.CHILE, Country.SWITZERLAND).inOrder(); 2077dd252788645e940eada959bdde927426e2531c9Paul Duffin // backward map ordered by country (even for currency values) 2083ecfa412eddc4b084663f38d562537b86b9734d5Paul Duffin assertThat(bimap.inverse().values()) 2090888a09821a98ac0680fad765217302858e70fa4Paul Duffin .has().exactly(Currency.DOLLAR, Currency.PESO, Currency.FRANC).inOrder(); 2101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2127dd252788645e940eada959bdde927426e2531c9Paul Duffin public void testKeySetIteratorRemove() { 2137dd252788645e940eada959bdde927426e2531c9Paul Duffin // The enum orderings are alphabetical, leading to the bimap and its inverse 2147dd252788645e940eada959bdde927426e2531c9Paul Duffin // having inconsistent iteration orderings. 2157dd252788645e940eada959bdde927426e2531c9Paul Duffin Map<Currency, Country> map = ImmutableMap.of( 2167dd252788645e940eada959bdde927426e2531c9Paul Duffin Currency.DOLLAR, Country.CANADA, 2177dd252788645e940eada959bdde927426e2531c9Paul Duffin Currency.PESO, Country.CHILE, 2187dd252788645e940eada959bdde927426e2531c9Paul Duffin Currency.FRANC, Country.SWITZERLAND); 2197dd252788645e940eada959bdde927426e2531c9Paul Duffin EnumBiMap<Currency, Country> bimap = EnumBiMap.create(map); 2207dd252788645e940eada959bdde927426e2531c9Paul Duffin 2217dd252788645e940eada959bdde927426e2531c9Paul Duffin Iterator<Currency> iter = bimap.keySet().iterator(); 2227dd252788645e940eada959bdde927426e2531c9Paul Duffin assertEquals(Currency.DOLLAR, iter.next()); 2237dd252788645e940eada959bdde927426e2531c9Paul Duffin iter.remove(); 2247dd252788645e940eada959bdde927426e2531c9Paul Duffin 2257dd252788645e940eada959bdde927426e2531c9Paul Duffin // forward map ordered by currency 2263ecfa412eddc4b084663f38d562537b86b9734d5Paul Duffin assertThat(bimap.keySet()) 2270888a09821a98ac0680fad765217302858e70fa4Paul Duffin .has().exactly(Currency.FRANC, Currency.PESO).inOrder(); 2287dd252788645e940eada959bdde927426e2531c9Paul Duffin // forward map ordered by currency (even for country values) 2293ecfa412eddc4b084663f38d562537b86b9734d5Paul Duffin assertThat(bimap.values()) 2300888a09821a98ac0680fad765217302858e70fa4Paul Duffin .has().exactly(Country.SWITZERLAND, Country.CHILE).inOrder(); 2317dd252788645e940eada959bdde927426e2531c9Paul Duffin // backward map ordered by country 2323ecfa412eddc4b084663f38d562537b86b9734d5Paul Duffin assertThat(bimap.inverse().keySet()) 2330888a09821a98ac0680fad765217302858e70fa4Paul Duffin .has().exactly(Country.CHILE, Country.SWITZERLAND).inOrder(); 2347dd252788645e940eada959bdde927426e2531c9Paul Duffin // backward map ordered by country (even for currency values) 2353ecfa412eddc4b084663f38d562537b86b9734d5Paul Duffin assertThat(bimap.inverse().values()) 2360888a09821a98ac0680fad765217302858e70fa4Paul Duffin .has().exactly(Currency.PESO, Currency.FRANC).inOrder(); 2377dd252788645e940eada959bdde927426e2531c9Paul Duffin } 2387dd252788645e940eada959bdde927426e2531c9Paul Duffin 2397dd252788645e940eada959bdde927426e2531c9Paul Duffin public void testValuesIteratorRemove() { 2403c77433663281544363151bf284b0240dfd22a42Paul Duffin // The enum orderings are alphabetical, leading to the bimap and its inverse 2413c77433663281544363151bf284b0240dfd22a42Paul Duffin // having inconsistent iteration orderings. 2423c77433663281544363151bf284b0240dfd22a42Paul Duffin Map<Currency, Country> map = ImmutableMap.of( 2433c77433663281544363151bf284b0240dfd22a42Paul Duffin Currency.DOLLAR, Country.CANADA, 2443c77433663281544363151bf284b0240dfd22a42Paul Duffin Currency.PESO, Country.CHILE, 2453c77433663281544363151bf284b0240dfd22a42Paul Duffin Currency.FRANC, Country.SWITZERLAND); 2463c77433663281544363151bf284b0240dfd22a42Paul Duffin EnumBiMap<Currency, Country> bimap = EnumBiMap.create(map); 2473c77433663281544363151bf284b0240dfd22a42Paul Duffin 2487dd252788645e940eada959bdde927426e2531c9Paul Duffin Iterator<Currency> iter = bimap.keySet().iterator(); 2497dd252788645e940eada959bdde927426e2531c9Paul Duffin assertEquals(Currency.DOLLAR, iter.next()); 2507dd252788645e940eada959bdde927426e2531c9Paul Duffin assertEquals(Currency.FRANC, iter.next()); 2517dd252788645e940eada959bdde927426e2531c9Paul Duffin iter.remove(); 2527dd252788645e940eada959bdde927426e2531c9Paul Duffin 2533c77433663281544363151bf284b0240dfd22a42Paul Duffin // forward map ordered by currency 2543ecfa412eddc4b084663f38d562537b86b9734d5Paul Duffin assertThat(bimap.keySet()) 2550888a09821a98ac0680fad765217302858e70fa4Paul Duffin .has().exactly(Currency.DOLLAR, Currency.PESO).inOrder(); 2563c77433663281544363151bf284b0240dfd22a42Paul Duffin // forward map ordered by currency (even for country values) 2573ecfa412eddc4b084663f38d562537b86b9734d5Paul Duffin assertThat(bimap.values()) 2580888a09821a98ac0680fad765217302858e70fa4Paul Duffin .has().exactly(Country.CANADA, Country.CHILE).inOrder(); 2593c77433663281544363151bf284b0240dfd22a42Paul Duffin // backward map ordered by country 2603ecfa412eddc4b084663f38d562537b86b9734d5Paul Duffin assertThat(bimap.inverse().keySet()) 2610888a09821a98ac0680fad765217302858e70fa4Paul Duffin .has().exactly(Country.CANADA, Country.CHILE).inOrder(); 2623c77433663281544363151bf284b0240dfd22a42Paul Duffin // backward map ordered by country (even for currency values) 2633ecfa412eddc4b084663f38d562537b86b9734d5Paul Duffin assertThat(bimap.inverse().values()) 2640888a09821a98ac0680fad765217302858e70fa4Paul Duffin .has().exactly(Currency.DOLLAR, Currency.PESO).inOrder(); 2651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testEntrySet() { 2687dd252788645e940eada959bdde927426e2531c9Paul Duffin // Bug 3168290 2691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Map<Currency, Country> map = ImmutableMap.of( 2701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Currency.DOLLAR, Country.CANADA, 2711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Currency.PESO, Country.CHILE, 2721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Currency.FRANC, Country.SWITZERLAND); 2731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert EnumBiMap<Currency, Country> bimap = EnumBiMap.create(map); 2741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Set<Object> uniqueEntries = Sets.newIdentityHashSet(); 2751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert uniqueEntries.addAll(bimap.entrySet()); 2761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(3, uniqueEntries.size()); 2771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2797dd252788645e940eada959bdde927426e2531c9Paul Duffin @GwtIncompatible("serialization") 2807dd252788645e940eada959bdde927426e2531c9Paul Duffin public void testSerializable() { 2817dd252788645e940eada959bdde927426e2531c9Paul Duffin SerializableTester.reserializeAndAssert( 2827dd252788645e940eada959bdde927426e2531c9Paul Duffin EnumBiMap.create(ImmutableMap.of(Currency.DOLLAR, Country.CANADA))); 2837dd252788645e940eada959bdde927426e2531c9Paul Duffin } 2847dd252788645e940eada959bdde927426e2531c9Paul Duffin 2857dd252788645e940eada959bdde927426e2531c9Paul Duffin @GwtIncompatible("reflection") 2867dd252788645e940eada959bdde927426e2531c9Paul Duffin public void testNulls() { 2877dd252788645e940eada959bdde927426e2531c9Paul Duffin new NullPointerTester().testAllPublicStaticMethods(EnumBiMap.class); 2887dd252788645e940eada959bdde927426e2531c9Paul Duffin new NullPointerTester() 2897dd252788645e940eada959bdde927426e2531c9Paul Duffin .testAllPublicInstanceMethods( 2907dd252788645e940eada959bdde927426e2531c9Paul Duffin EnumBiMap.create(ImmutableMap.of(Currency.DOLLAR, Country.CHILE))); 2917dd252788645e940eada959bdde927426e2531c9Paul Duffin } 2927dd252788645e940eada959bdde927426e2531c9Paul Duffin 2937dd252788645e940eada959bdde927426e2531c9Paul Duffin public void testEquals() { 2947dd252788645e940eada959bdde927426e2531c9Paul Duffin new EqualsTester() 2957dd252788645e940eada959bdde927426e2531c9Paul Duffin .addEqualityGroup( 2967dd252788645e940eada959bdde927426e2531c9Paul Duffin EnumBiMap.create(ImmutableMap.of(Currency.DOLLAR, Country.CANADA)), 2977dd252788645e940eada959bdde927426e2531c9Paul Duffin EnumBiMap.create(ImmutableMap.of(Currency.DOLLAR, Country.CANADA))) 2987dd252788645e940eada959bdde927426e2531c9Paul Duffin .addEqualityGroup(EnumBiMap.create(ImmutableMap.of(Currency.DOLLAR, Country.CHILE))) 2997dd252788645e940eada959bdde927426e2531c9Paul Duffin .addEqualityGroup(EnumBiMap.create(ImmutableMap.of(Currency.FRANC, Country.CANADA))) 3007dd252788645e940eada959bdde927426e2531c9Paul Duffin .testEquals(); 3017dd252788645e940eada959bdde927426e2531c9Paul Duffin } 3027dd252788645e940eada959bdde927426e2531c9Paul Duffin 3031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /* Remaining behavior tested by AbstractBiMapTest. */ 3041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert} 305