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 com.google.common.annotations.GwtCompatible; 221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.annotations.GwtIncompatible; 231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.testing.SerializableTester; 241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Collection; 261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Comparator; 271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Iterator; 281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Map; 291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.SortedSet; 301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/** 321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Unit tests for {@code TreeMultimap} with explicit comparators. 331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * @author Jared Levy 351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert@GwtCompatible(emulated = true) 371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertpublic class TreeMultimapExplicitTest extends AbstractSetMultimapTest { 381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /** 401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Compare strings lengths, and if the lengths are equal compare the strings. 411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * A {@code null} is less than any non-null value. 421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private enum StringLength implements Comparator<String> { 441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert COMPARATOR; 451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override 471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public int compare(String first, String second) { 481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert if (first == second) { 491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return 0; 501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } else if (first == null) { 511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return -1; 521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } else if (second == null) { 531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return 1; 541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } else if (first.length() != second.length()) { 551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return first.length() - second.length(); 561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } else { 571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return first.compareTo(second); 581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /** 631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Decreasing integer values. A {@code null} comes before any non-null value. 641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static final Comparator<Integer> DECREASING_INT_COMPARATOR = 661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Ordering.<Integer>natural().reverse().nullsFirst(); 671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Multimap<String, Integer> create() { 691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return TreeMultimap.create( 701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert StringLength.COMPARATOR, DECREASING_INT_COMPARATOR); 711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /** 741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Create and populate a {@code TreeMultimap} with explicit comparators. 751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private TreeMultimap<String, Integer> createPopulate() { 771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert TreeMultimap<String, Integer> multimap = TreeMultimap.create( 781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert StringLength.COMPARATOR, DECREASING_INT_COMPARATOR); 791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("google", 2); 801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("google", 6); 811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put(null, 3); 821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put(null, 1); 831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put(null, 7); 841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("tree", 0); 851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("tree", null); 861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return multimap; 871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /** 901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Test that a TreeMultimap created from another uses the natural ordering. 911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testMultimapCreateFromTreeMultimap() { 931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert TreeMultimap<String, Integer> tree = TreeMultimap.create( 941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert StringLength.COMPARATOR, DECREASING_INT_COMPARATOR); 951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert tree.put("google", 2); 961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert tree.put("google", 6); 971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert tree.put("tree", 0); 981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert tree.put("tree", 3); 991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(tree.keySet()).hasContentsInOrder("tree", "google"); 1001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(tree.get("google")).hasContentsInOrder(6, 2); 1011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert TreeMultimap<String, Integer> copy = TreeMultimap.create(tree); 1031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(tree, copy); 1041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(copy.keySet()).hasContentsInOrder("google", "tree"); 1051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(copy.get("google")).hasContentsInOrder(2, 6); 1061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Ordering.natural(), copy.keyComparator()); 1071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Ordering.natural(), copy.valueComparator()); 1081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Ordering.natural(), copy.get("google").comparator()); 1091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testToString() { 1121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("{bar=[3, 2, 1], foo=[4, 3, 2, 1, -1]}", 1131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert createSample().toString()); 1141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testGetComparator() { 1171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert TreeMultimap<String, Integer> multimap = createPopulate(); 1181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(StringLength.COMPARATOR, multimap.keyComparator()); 1191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(DECREASING_INT_COMPARATOR, multimap.valueComparator()); 1201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testOrderedGet() { 1231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert TreeMultimap<String, Integer> multimap = createPopulate(); 1241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(multimap.get(null)).hasContentsInOrder(7, 3, 1); 1251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(multimap.get("google")).hasContentsInOrder(6, 2); 1261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(multimap.get("tree")).hasContentsInOrder(null, 0); 1271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testOrderedKeySet() { 1301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert TreeMultimap<String, Integer> multimap = createPopulate(); 1311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(multimap.keySet()).hasContentsInOrder(null, "tree", "google"); 1321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testOrderedAsMapEntries() { 1351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert TreeMultimap<String, Integer> multimap = createPopulate(); 1361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<Map.Entry<String, Collection<Integer>>> iterator = 1371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.asMap().entrySet().iterator(); 1381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Map.Entry<String, Collection<Integer>> entry = iterator.next(); 1391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(null, entry.getKey()); 1401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(entry.getValue()).hasContentsAnyOrder(7, 3, 1); 1411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert entry = iterator.next(); 1421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("tree", entry.getKey()); 1431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(entry.getValue()).hasContentsAnyOrder(null, 0); 1441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert entry = iterator.next(); 1451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("google", entry.getKey()); 1461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(entry.getValue()).hasContentsAnyOrder(6, 2); 1471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testOrderedEntries() { 1501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert TreeMultimap<String, Integer> multimap = createPopulate(); 1511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(multimap.entries()).hasContentsInOrder( 1521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Maps.immutableEntry((String) null, 7), 1531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Maps.immutableEntry((String) null, 3), 1541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Maps.immutableEntry((String) null, 1), 1551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Maps.immutableEntry("tree", (Integer) null), 1561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Maps.immutableEntry("tree", 0), 1571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Maps.immutableEntry("google", 6), Maps.immutableEntry("google", 2)); 1581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testOrderedValues() { 1611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert TreeMultimap<String, Integer> multimap = createPopulate(); 1621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(multimap.values()).hasContentsInOrder(7, 3, 1, null, 0, 6, 2); 1631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testComparator() { 1661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert TreeMultimap<String, Integer> multimap = createPopulate(); 1671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(DECREASING_INT_COMPARATOR, multimap.get("foo").comparator()); 1681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(DECREASING_INT_COMPARATOR, 1691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.get("missing").comparator()); 1701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testMultimapComparators() { 1731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multimap<String, Integer> multimap = createSample(); 1741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert TreeMultimap<String, Integer> copy = 1751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert TreeMultimap.create(StringLength.COMPARATOR, DECREASING_INT_COMPARATOR); 1761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert copy.putAll(multimap); 1771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(multimap, copy); 1781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(StringLength.COMPARATOR, copy.keyComparator()); 1791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(DECREASING_INT_COMPARATOR, copy.valueComparator()); 1801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testSortedKeySet() { 1831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert TreeMultimap<String, Integer> multimap = createPopulate(); 1841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> keySet = multimap.keySet(); 1851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(null, keySet.first()); 1871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("google", keySet.last()); 1881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(StringLength.COMPARATOR, keySet.comparator()); 1891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Sets.newHashSet(null, "tree"), keySet.headSet("yahoo")); 1901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Sets.newHashSet("google"), keySet.tailSet("yahoo")); 1911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Sets.newHashSet("tree"), keySet.subSet("ask", "yahoo")); 1921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("SerializableTester") 1951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testExplicitComparatorSerialization() { 1961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert TreeMultimap<String, Integer> multimap = createPopulate(); 1971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert TreeMultimap<String, Integer> copy 1981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = SerializableTester.reserializeAndAssert(multimap); 1991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(copy.values()).hasContentsInOrder(7, 3, 1, null, 0, 6, 2); 2001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(copy.keySet()).hasContentsInOrder(null, "tree", "google"); 2011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(multimap.keyComparator(), copy.keyComparator()); 2021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(multimap.valueComparator(), copy.valueComparator()); 2031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert} 205