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 com.google.common.collect.Lists.newArrayList; 201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static com.google.common.collect.Sets.newHashSet; 211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static com.google.common.collect.testing.IteratorFeature.MODIFIABLE; 221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static java.util.Arrays.asList; 231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static org.junit.contrib.truth.Truth.ASSERT; 241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.annotations.GwtCompatible; 261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.annotations.GwtIncompatible; 271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.DerivedComparable; 281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.IteratorTester; 291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.testing.SerializableTester; 301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Collection; 321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Collections; 331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Comparator; 341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Iterator; 351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.List; 361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Map; 371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Map.Entry; 381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.NoSuchElementException; 391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Set; 401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.SortedMap; 411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.SortedSet; 421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/** 441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Unit tests for {@code TreeMultimap} with natural ordering. 451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * @author Jared Levy 471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert@GwtCompatible(emulated = true) 491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertpublic class TreeMultimapNaturalTest<E> extends AbstractSetMultimapTest { 501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Multimap<String, Integer> create() { 511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return TreeMultimap.create(); 521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /* Null keys and values aren't supported. */ 551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected String nullKey() { 561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return "null"; 571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Integer nullValue() { 601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return 42; 611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /** 641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Create and populate a {@code TreeMultimap} with the natural ordering of 651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * keys and values. 661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private TreeMultimap<String, Integer> createPopulate() { 681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert TreeMultimap<String, Integer> multimap = TreeMultimap.create(); 691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("google", 2); 701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("google", 6); 711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 3); 721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 1); 731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 7); 741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("tree", 4); 751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("tree", 0); 761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return multimap; 771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testToString() { 801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("{bar=[1, 2, 3], foo=[-1, 1, 2, 3, 4]}", 811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert createSample().toString()); 821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testOrderedGet() { 851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert TreeMultimap<String, Integer> multimap = createPopulate(); 861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(multimap.get("foo")).hasContentsInOrder(1, 3, 7); 871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(multimap.get("google")).hasContentsInOrder(2, 6); 881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(multimap.get("tree")).hasContentsInOrder(0, 4); 891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testOrderedKeySet() { 921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert TreeMultimap<String, Integer> multimap = createPopulate(); 931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(multimap.keySet()).hasContentsInOrder("foo", "google", "tree"); 941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testOrderedAsMapEntries() { 971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert TreeMultimap<String, Integer> multimap = createPopulate(); 981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<Map.Entry<String, Collection<Integer>>> iterator = 991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.asMap().entrySet().iterator(); 1001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Map.Entry<String, Collection<Integer>> entry = iterator.next(); 1011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("foo", entry.getKey()); 1021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(entry.getValue()).hasContentsAnyOrder(1, 3, 7); 1031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert entry = iterator.next(); 1041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("google", entry.getKey()); 1051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(entry.getValue()).hasContentsAnyOrder(2, 6); 1061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert entry = iterator.next(); 1071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("tree", entry.getKey()); 1081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(entry.getValue()).hasContentsAnyOrder(0, 4); 1091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testOrderedEntries() { 1121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert TreeMultimap<String, Integer> multimap = createPopulate(); 1131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(multimap.entries()).hasContentsInOrder( 1141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Maps.immutableEntry("foo", 1), 1151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Maps.immutableEntry("foo", 3), 1161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Maps.immutableEntry("foo", 7), 1171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Maps.immutableEntry("google", 2), 1181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Maps.immutableEntry("google", 6), 1191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Maps.immutableEntry("tree", 0), 1201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Maps.immutableEntry("tree", 4)); 1211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testOrderedValues() { 1241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert TreeMultimap<String, Integer> multimap = createPopulate(); 1251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(multimap.values()).hasContentsInOrder( 1261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1, 3, 7, 2, 6, 0, 4); 1271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testFirst() { 1301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert TreeMultimap<String, Integer> multimap = createPopulate(); 1311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Integer.valueOf(1), multimap.get("foo").first()); 1321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 1331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.get("missing").first(); 1341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail("Expected NoSuchElementException"); 1351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NoSuchElementException expected) {} 1361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testLast() { 1391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert TreeMultimap<String, Integer> multimap = createPopulate(); 1401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Integer.valueOf(7), multimap.get("foo").last()); 1411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 1421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.get("missing").last(); 1431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail("Expected NoSuchElementException"); 1441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NoSuchElementException expected) {} 1451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testComparatorFromGet() { 1481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert TreeMultimap<String, Integer> multimap = createPopulate(); 1491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(Ordering.natural(), multimap.get("foo").comparator()); 1501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(Ordering.natural(), multimap.get("missing").comparator()); 1511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testHeadSet() { 1541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert TreeMultimap<String, Integer> multimap = createPopulate(); 1551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Set<Integer> fooSet = multimap.get("foo").headSet(4); 1561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Sets.newHashSet(1, 3), fooSet); 1571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Set<Integer> missingSet = multimap.get("missing").headSet(4); 1581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Sets.newHashSet(), missingSet); 1591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 0); 1611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Sets.newHashSet(0, 1, 3), fooSet); 1621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert missingSet.add(2); 1641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Sets.newHashSet(2), multimap.get("missing")); 1651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testTailSet() { 1681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert TreeMultimap<String, Integer> multimap = createPopulate(); 1691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Set<Integer> fooSet = multimap.get("foo").tailSet(2); 1701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Sets.newHashSet(3, 7), fooSet); 1711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Set<Integer> missingSet = multimap.get("missing").tailSet(4); 1721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Sets.newHashSet(), missingSet); 1731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 6); 1751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Sets.newHashSet(3, 6, 7), fooSet); 1761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert missingSet.add(9); 1781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Sets.newHashSet(9), multimap.get("missing")); 1791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testSubSet() { 1821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert TreeMultimap<String, Integer> multimap = createPopulate(); 1831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Set<Integer> fooSet = multimap.get("foo").subSet(2, 6); 1841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Sets.newHashSet(3), fooSet); 1851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 5); 1871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Sets.newHashSet(3, 5), fooSet); 1881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fooSet.add(4); 1901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Sets.newHashSet(1, 3, 4, 5, 7), multimap.get("foo")); 1911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testMultimapConstructor() { 1941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multimap<String, Integer> multimap = createSample(); 1951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert TreeMultimap<String, Integer> copy = TreeMultimap.create(multimap); 1961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(multimap, copy); 1971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static final Comparator<Double> KEY_COMPARATOR = 2001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Ordering.natural(); 2011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static final Comparator<Double> VALUE_COMPARATOR = 2031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Ordering.natural().reverse().nullsFirst(); 2041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /** 2061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Test that creating one TreeMultimap from another does not copy the 2071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * comparators from the source TreeMultimap. 2081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 2091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCreateFromTreeMultimap() { 2101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multimap<Double, Double> tree = TreeMultimap.create(KEY_COMPARATOR, VALUE_COMPARATOR); 2111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert tree.put(1.0, 2.0); 2121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert tree.put(2.0, 3.0); 2131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert tree.put(3.0, 4.0); 2141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert tree.put(4.0, 5.0); 2151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert TreeMultimap<Double, Double> copyFromTree = TreeMultimap.create(tree); 2171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(tree, copyFromTree); 2181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(Ordering.natural(), copyFromTree.keyComparator()); 2191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(Ordering.natural(), copyFromTree.valueComparator()); 2201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(Ordering.natural(), copyFromTree.get(1.0).comparator()); 2211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /** 2241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Test that creating one TreeMultimap from a non-TreeMultimap 2251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * results in natural ordering. 2261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 2271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCreateFromHashMultimap() { 2281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multimap<Double, Double> hash = HashMultimap.create(); 2291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert hash.put(1.0, 2.0); 2301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert hash.put(2.0, 3.0); 2311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert hash.put(3.0, 4.0); 2321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert hash.put(4.0, 5.0); 2331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert TreeMultimap<Double, Double> copyFromHash = TreeMultimap.create(hash); 2351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(hash, copyFromHash); 2361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Ordering.natural(), copyFromHash.keyComparator()); 2371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Ordering.natural(), copyFromHash.valueComparator()); 2381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /** 2411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Test that creating one TreeMultimap from a SortedSetMultimap uses natural 2421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * ordering. 2431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 2441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCreateFromSortedSetMultimap() { 2451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSetMultimap<Double, Double> tree = TreeMultimap.create(KEY_COMPARATOR, VALUE_COMPARATOR); 2461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert tree.put(1.0, 2.0); 2471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert tree.put(2.0, 3.0); 2481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert tree.put(3.0, 4.0); 2491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert tree.put(4.0, 5.0); 2501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSetMultimap<Double, Double> sorted = Multimaps.unmodifiableSortedSetMultimap(tree); 2521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert TreeMultimap<Double, Double> copyFromSorted = TreeMultimap.create(sorted); 2531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(tree, copyFromSorted); 2541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(Ordering.natural(), copyFromSorted.keyComparator()); 2551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(Ordering.natural(), copyFromSorted.valueComparator()); 2561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(Ordering.natural(), copyFromSorted.get(1.0).comparator()); 2571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testComparators() { 2601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert TreeMultimap<String, Integer> multimap = TreeMultimap.create(); 2611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Ordering.natural(), multimap.keyComparator()); 2621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Ordering.natural(), multimap.valueComparator()); 2631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testSortedKeySet() { 2661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert TreeMultimap<String, Integer> multimap = createPopulate(); 2671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> keySet = multimap.keySet(); 2681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("foo", keySet.first()); 2701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("tree", keySet.last()); 2711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Ordering.natural(), keySet.comparator()); 2721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(ImmutableSet.of("foo", "google"), keySet.headSet("hi")); 2731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(ImmutableSet.of("tree"), keySet.tailSet("hi")); 2741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(ImmutableSet.of("google"), keySet.subSet("gap", "hi")); 2751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testKeySetSubSet() { 2781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert TreeMultimap<String, Integer> multimap = createPopulate(); 2791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> keySet = multimap.keySet(); 2801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> subSet = keySet.subSet("gap", "hi"); 2811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(1, subSet.size()); 2831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(subSet.contains("google")); 2841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(subSet.contains("foo")); 2851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(subSet.containsAll(Collections.singleton("google"))); 2861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(subSet.containsAll(Collections.singleton("foo"))); 2871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> iterator = subSet.iterator(); 2891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(iterator.hasNext()); 2901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("google", iterator.next()); 2911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(iterator.hasNext()); 2921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(subSet.remove("foo")); 2941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.containsKey("foo")); 2951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(7, multimap.size()); 2961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(subSet.remove("google")); 2971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(multimap.containsKey("google")); 2981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(5, multimap.size()); 2991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("unreasonable slow") 3021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testGetIteration() { 3031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new IteratorTester<Integer>(6, MODIFIABLE, 3041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Sets.newTreeSet(asList(2, 3, 4, 7, 8)), 3051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert IteratorTester.KnownOrder.KNOWN_ORDER) { 3061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private Multimap<String, Integer> multimap; 3071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Iterator<Integer> newTargetIterator() { 3091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap = create(); 3101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.putAll("foo", asList(3, 8, 4)); 3111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.putAll("bar", asList(5, 6)); 3121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.putAll("foo", asList(7, 2)); 3131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return multimap.get("foo").iterator(); 3141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected void verify(List<Integer> elements) { 3171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(newHashSet(elements), multimap.get("foo")); 3181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }.test(); 3201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @SuppressWarnings("unchecked") 3231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("unreasonable slow") 3241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testEntriesIteration() { 3251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Set<Entry<String, Integer>> set = Sets.newLinkedHashSet(asList( 3261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Maps.immutableEntry("bar", 4), 3271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Maps.immutableEntry("bar", 5), 3281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Maps.immutableEntry("foo", 2), 3291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Maps.immutableEntry("foo", 3), 3301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Maps.immutableEntry("foo", 6))); 3311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new IteratorTester<Entry<String, Integer>>(6, MODIFIABLE, set, 3321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert IteratorTester.KnownOrder.KNOWN_ORDER) { 3331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private Multimap<String, Integer> multimap; 3341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Iterator<Entry<String, Integer>> newTargetIterator() { 3361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap = create(); 3371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.putAll("foo", asList(6, 3)); 3381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.putAll("bar", asList(4, 5)); 3391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.putAll("foo", asList(2)); 3401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return multimap.entries().iterator(); 3411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected void verify(List<Entry<String, Integer>> elements) { 3441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(newHashSet(elements), multimap.entries()); 3451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }.test(); 3471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("unreasonable slow") 3501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testKeysIteration() { 3511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new IteratorTester<String>(6, MODIFIABLE, Lists.newArrayList("bar", "bar", 3521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "foo", "foo", "foo"), IteratorTester.KnownOrder.KNOWN_ORDER) { 3531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private Multimap<String, Integer> multimap; 3541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Iterator<String> newTargetIterator() { 3561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap = create(); 3571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.putAll("foo", asList(2, 3)); 3581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.putAll("bar", asList(4, 5)); 3591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.putAll("foo", asList(6)); 3601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return multimap.keys().iterator(); 3611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected void verify(List<String> elements) { 3641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(elements, Lists.newArrayList(multimap.keys())); 3651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }.test(); 3671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("unreasonable slow") 3701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testValuesIteration() { 3711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new IteratorTester<Integer>(6, MODIFIABLE, newArrayList(4, 5, 2, 3, 6), 3721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert IteratorTester.KnownOrder.KNOWN_ORDER) { 3731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private Multimap<String, Integer> multimap; 3741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Iterator<Integer> newTargetIterator() { 3761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap = create(); 3771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.putAll("foo", asList(2, 3)); 3781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.putAll("bar", asList(4, 5)); 3791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.putAll("foo", asList(6)); 3801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return multimap.values().iterator(); 3811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected void verify(List<Integer> elements) { 3841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(elements, Lists.newArrayList(multimap.values())); 3851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }.test(); 3871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("unreasonable slow") 3901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testKeySetIteration() { 3911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new IteratorTester<String>(6, MODIFIABLE, 3921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Sets.newTreeSet(asList("bar", "baz", "cat", "dog", "foo")), 3931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert IteratorTester.KnownOrder.KNOWN_ORDER) { 3941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private Multimap<String, Integer> multimap; 3951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Iterator<String> newTargetIterator() { 3971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap = create(); 3981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.putAll("foo", asList(2, 3)); 3991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.putAll("bar", asList(4, 5)); 4001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.putAll("foo", asList(6)); 4011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.putAll("baz", asList(7, 8)); 4021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.putAll("dog", asList(9)); 4031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.putAll("bar", asList(10, 11)); 4041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.putAll("cat", asList(12, 13, 14)); 4051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return multimap.keySet().iterator(); 4061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected void verify(List<String> elements) { 4091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(newHashSet(elements), multimap.keySet()); 4101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }.test(); 4121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @SuppressWarnings("unchecked") 4151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("unreasonable slow") 4161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testAsSetIteration() { 4171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Set<Entry<String, Collection<Integer>>> set = Sets.newTreeSet( 4181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new Comparator<Entry<String, ?>>() { 4191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override 4201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public int compare(Entry<String, ?> o1, Entry<String, ?> o2) { 4211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return o1.getKey().compareTo(o2.getKey()); 4221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }); 4241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collections.addAll(set, 4251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Maps.immutableEntry("bar", 4261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert (Collection<Integer>) Sets.newHashSet(4, 5, 10, 11)), 4271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Maps.immutableEntry("baz", 4281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert (Collection<Integer>) Sets.newHashSet(7, 8)), 4291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Maps.immutableEntry("cat", 4301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert (Collection<Integer>) Sets.newHashSet(12, 13, 14)), 4311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Maps.immutableEntry("dog", 4321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert (Collection<Integer>) Sets.newHashSet(9)), 4331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Maps.immutableEntry("foo", 4341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert (Collection<Integer>) Sets.newHashSet(2, 3, 6)) 4351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ); 4361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new IteratorTester<Entry<String, Collection<Integer>>>(6, MODIFIABLE, set, 4381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert IteratorTester.KnownOrder.KNOWN_ORDER) { 4391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private Multimap<String, Integer> multimap; 4401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Iterator<Entry<String, Collection<Integer>>> 4421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert newTargetIterator() { 4431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap = create(); 4441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.putAll("foo", asList(2, 3)); 4451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.putAll("bar", asList(4, 5)); 4461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.putAll("foo", asList(6)); 4471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.putAll("baz", asList(7, 8)); 4481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.putAll("dog", asList(9)); 4491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.putAll("bar", asList(10, 11)); 4501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.putAll("cat", asList(12, 13, 14)); 4511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return multimap.asMap().entrySet().iterator(); 4521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected void verify( 4551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<Entry<String, Collection<Integer>>> elements) { 4561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(newHashSet(elements), multimap.asMap().entrySet()); 4571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }.test(); 4591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("SerializableTester") 4621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testExplicitComparatorSerialization() { 4631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert TreeMultimap<String, Integer> multimap = createPopulate(); 4641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert TreeMultimap<String, Integer> copy 4651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = SerializableTester.reserializeAndAssert(multimap); 4661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(copy.values()).hasContentsInOrder(1, 3, 7, 2, 6, 0, 4); 4671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(copy.keySet()).hasContentsInOrder("foo", "google", "tree"); 4681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(multimap.keyComparator(), copy.keyComparator()); 4691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(multimap.valueComparator(), copy.valueComparator()); 4701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("SerializableTester") 4731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testTreeMultimapDerived() { 4741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert TreeMultimap<DerivedComparable, DerivedComparable> multimap = TreeMultimap.create(); 4751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(ImmutableMultimap.of(), multimap); 4761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put(new DerivedComparable("foo"), new DerivedComparable("f")); 4771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put(new DerivedComparable("foo"), new DerivedComparable("o")); 4781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put(new DerivedComparable("foo"), new DerivedComparable("o")); 4791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put(new DerivedComparable("bar"), new DerivedComparable("b")); 4801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put(new DerivedComparable("bar"), new DerivedComparable("a")); 4811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put(new DerivedComparable("bar"), new DerivedComparable("r")); 4821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(multimap.keySet()).hasContentsInOrder( 4831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new DerivedComparable("bar"), new DerivedComparable("foo")); 4841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(multimap.values()).hasContentsInOrder( 4851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new DerivedComparable("a"), new DerivedComparable("b"), new DerivedComparable("r"), 4861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new DerivedComparable("f"), new DerivedComparable("o")); 4871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Ordering.natural(), multimap.keyComparator()); 4881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Ordering.natural(), multimap.valueComparator()); 4891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SerializableTester.reserializeAndAssert(multimap); 4901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("SerializableTester") 4931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testTreeMultimapNonGeneric() { 4941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert TreeMultimap<LegacyComparable, LegacyComparable> multimap 4951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = TreeMultimap.create(); 4961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(ImmutableMultimap.of(), multimap); 4971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put(new LegacyComparable("foo"), new LegacyComparable("f")); 4981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put(new LegacyComparable("foo"), new LegacyComparable("o")); 4991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put(new LegacyComparable("foo"), new LegacyComparable("o")); 5001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put(new LegacyComparable("bar"), new LegacyComparable("b")); 5011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put(new LegacyComparable("bar"), new LegacyComparable("a")); 5021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put(new LegacyComparable("bar"), new LegacyComparable("r")); 5031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(multimap.keySet()).hasContentsInOrder( 5041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new LegacyComparable("bar"), new LegacyComparable("foo")); 5051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(multimap.values()).hasContentsInOrder( 5061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new LegacyComparable("a"), 5071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new LegacyComparable("b"), 5081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new LegacyComparable("r"), 5091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new LegacyComparable("f"), 5101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new LegacyComparable("o")); 5111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Ordering.natural(), multimap.keyComparator()); 5121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Ordering.natural(), multimap.valueComparator()); 5131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SerializableTester.reserializeAndAssert(multimap); 5141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testTreeMultimapAsMapSorted() { 5171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert TreeMultimap<String, Integer> multimap = createPopulate(); 5181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedMap<String, Collection<Integer>> asMap = multimap.asMap(); 5191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Ordering.natural(), asMap.comparator()); 5201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("foo", asMap.firstKey()); 5211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("tree", asMap.lastKey()); 5221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Set<Integer> fooValues = ImmutableSet.of(1, 3, 7); 5231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Set<Integer> googleValues = ImmutableSet.of(2, 6); 5241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Set<Integer> treeValues = ImmutableSet.of(4, 0); 5251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(ImmutableMap.of("google", googleValues, "tree", treeValues), 5261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert asMap.tailMap("g")); 5271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(ImmutableMap.of("google", googleValues, "foo", fooValues), 5281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert asMap.headMap("h")); 5291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(ImmutableMap.of("google", googleValues), 5301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert asMap.subMap("g", "h")); 5311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testTailSetClear() { 5341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert TreeMultimap<String, Integer> multimap = TreeMultimap.create(); 5351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("a", 1); 5361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("a", 11); 5371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("b", 2); 5381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("c", 3); 5391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("d", 4); 5401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("e", 5); 5411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("e", 55); 5421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.keySet().tailSet("d").clear(); 5441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(ImmutableSet.of("a", "b", "c"), multimap.keySet()); 5451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(4, multimap.size()); 5461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(4, multimap.values().size()); 5471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(4, multimap.keys().size()); 5481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert} 550