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 org.junit.contrib.truth.Truth.ASSERT; 201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.io.Serializable; 221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Arrays; 231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Collection; 241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Map; 251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.RandomAccess; 261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Set; 271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport javax.annotation.Nullable; 291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/** 311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Tests for {@code Synchronized#multimap}. 321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * @author Mike Bostock 341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertpublic class SynchronizedMultimapTest extends AbstractSetMultimapTest { 361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Multimap<String, Integer> create() { 381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert TestMultimap<String, Integer> inner = new TestMultimap<String, Integer>(); 391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multimap<String, Integer> outer = Synchronized.multimap(inner, inner.mutex); 401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return outer; 411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static final class TestMultimap<K, V> extends ForwardingMultimap<K, V> 441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert implements Serializable { 451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert final Multimap<K, V> delegate = HashMultimap.create(); 461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public final Object mutex = new Integer(1); // something Serializable 471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Multimap<K, V> delegate() { 491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return delegate; 501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public String toString() { 531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(Thread.holdsLock(mutex)); 541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return super.toString(); 551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public boolean equals(@Nullable Object o) { 581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(Thread.holdsLock(mutex)); 591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return super.equals(o); 601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public int hashCode() { 631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(Thread.holdsLock(mutex)); 641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return super.hashCode(); 651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public int size() { 681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(Thread.holdsLock(mutex)); 691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return super.size(); 701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public boolean isEmpty() { 731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(Thread.holdsLock(mutex)); 741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return super.isEmpty(); 751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public boolean containsKey(@Nullable Object key) { 781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(Thread.holdsLock(mutex)); 791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return super.containsKey(key); 801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public boolean containsValue(@Nullable Object value) { 831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(Thread.holdsLock(mutex)); 841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return super.containsValue(value); 851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public boolean containsEntry(@Nullable Object key, 881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Nullable Object value) { 891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(Thread.holdsLock(mutex)); 901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return super.containsEntry(key, value); 911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public Collection<V> get(@Nullable K key) { 941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(Thread.holdsLock(mutex)); 951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /* TODO: verify that the Collection is also synchronized? */ 961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return super.get(key); 971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public boolean put(K key, V value) { 1001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(Thread.holdsLock(mutex)); 1011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return super.put(key, value); 1021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public boolean putAll(@Nullable K key, 1051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<? extends V> values) { 1061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(Thread.holdsLock(mutex)); 1071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return super.putAll(key, values); 1081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public boolean putAll(Multimap<? extends K, ? extends V> map) { 1111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(Thread.holdsLock(mutex)); 1121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return super.putAll(map); 1131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public Collection<V> replaceValues(@Nullable K key, 1161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<? extends V> values) { 1171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(Thread.holdsLock(mutex)); 1181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return super.replaceValues(key, values); 1191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public boolean remove(@Nullable Object key, 1221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Nullable Object value) { 1231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(Thread.holdsLock(mutex)); 1241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return super.remove(key, value); 1251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public Collection<V> removeAll(@Nullable Object key) { 1281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(Thread.holdsLock(mutex)); 1291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return super.removeAll(key); 1301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public void clear() { 1331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(Thread.holdsLock(mutex)); 1341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert super.clear(); 1351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public Set<K> keySet() { 1381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(Thread.holdsLock(mutex)); 1391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /* TODO: verify that the Set is also synchronized? */ 1401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return super.keySet(); 1411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public Multiset<K> keys() { 1441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(Thread.holdsLock(mutex)); 1451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /* TODO: verify that the Set is also synchronized? */ 1461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return super.keys(); 1471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public Collection<V> values() { 1501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(Thread.holdsLock(mutex)); 1511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /* TODO: verify that the Collection is also synchronized? */ 1521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return super.values(); 1531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public Collection<Map.Entry<K, V>> entries() { 1561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(Thread.holdsLock(mutex)); 1571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /* TODO: verify that the Collection is also synchronized? */ 1581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return super.entries(); 1591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public Map<K, Collection<V>> asMap() { 1621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(Thread.holdsLock(mutex)); 1631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /* TODO: verify that the Map is also synchronized? */ 1641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return super.asMap(); 1651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static final long serialVersionUID = 0; 1681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testSynchronizedListMultimap() { 1711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ListMultimap<String, Integer> multimap 1721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = Multimaps.synchronizedListMultimap( 1731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ArrayListMultimap.<String, Integer>create()); 1741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.putAll("foo", Arrays.asList(3, -1, 2, 4, 1)); 1751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.putAll("bar", Arrays.asList(1, 2, 3, 1)); 1761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(multimap.removeAll("foo")).hasContentsInOrder(3, -1, 2, 4, 1); 1771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(multimap.containsKey("foo")); 1781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(multimap.replaceValues("bar", Arrays.asList(6, 5))) 1791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .hasContentsInOrder(1, 2, 3, 1); 1801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(multimap.get("bar")).hasContentsInOrder(6, 5); 1811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testSynchronizedSortedSetMultimap() { 1841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSetMultimap<String, Integer> multimap 1851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = Multimaps.synchronizedSortedSetMultimap( 1861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert TreeMultimap.<String, Integer>create()); 1871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.putAll("foo", Arrays.asList(3, -1, 2, 4, 1)); 1881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.putAll("bar", Arrays.asList(1, 2, 3, 1)); 1891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(multimap.removeAll("foo")).hasContentsInOrder(-1, 1, 2, 3, 4); 1901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(multimap.containsKey("foo")); 1911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(multimap.replaceValues("bar", Arrays.asList(6, 5))) 1921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .hasContentsInOrder(1, 2, 3); 1931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(multimap.get("bar")).hasContentsInOrder(5, 6); 1941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testSynchronizedArrayListMultimapRandomAccess() { 1971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ListMultimap<String, Integer> delegate = ArrayListMultimap.create(); 1981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert delegate.put("foo", 1); 1991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert delegate.put("foo", 3); 2001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ListMultimap<String, Integer> multimap 2011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = Multimaps.synchronizedListMultimap(delegate); 2021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.get("foo") instanceof RandomAccess); 2031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.get("bar") instanceof RandomAccess); 2041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testSynchronizedLinkedListMultimapRandomAccess() { 2071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ListMultimap<String, Integer> delegate = LinkedListMultimap.create(); 2081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert delegate.put("foo", 1); 2091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert delegate.put("foo", 3); 2101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ListMultimap<String, Integer> multimap 2111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = Multimaps.synchronizedListMultimap(delegate); 2121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(multimap.get("foo") instanceof RandomAccess); 2131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(multimap.get("bar") instanceof RandomAccess); 2141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert} 216