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.BoundType.CLOSED; 201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static com.google.common.collect.Lists.newArrayList; 211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static com.google.common.collect.testing.IteratorFeature.MODIFIABLE; 221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static org.junit.contrib.truth.Truth.ASSERT; 231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Arrays; 251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Collections; 261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Comparator; 271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Iterator; 281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.List; 291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Set; 301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.SortedSet; 311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.annotations.GwtCompatible; 331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.annotations.GwtIncompatible; 341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.IteratorTester; 351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/** 371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Unit test for {@link TreeMultiset}. 381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * @author Neal Kanodia 401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert@GwtCompatible(emulated = true) 421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertpublic class TreeMultisetTest extends AbstractMultisetTest { 431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @SuppressWarnings("unchecked") 441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected <E> Multiset<E> create() { 451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return (Multiset) TreeMultiset.create(); 461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCreate() { 491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert TreeMultiset<String> multiset = TreeMultiset.create(); 501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multiset.add("foo", 2); 511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multiset.add("bar"); 521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(3, multiset.size()); 531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(2, multiset.count("foo")); 541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Ordering.natural(), multiset.comparator()); 551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("[bar, foo x 2]", multiset.toString()); 561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCreateWithComparator() { 591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multiset<String> multiset = TreeMultiset.create(Collections.reverseOrder()); 601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multiset.add("foo", 2); 611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multiset.add("bar"); 621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(3, multiset.size()); 631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(2, multiset.count("foo")); 641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("[foo x 2, bar]", multiset.toString()); 651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCreateFromIterable() { 681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multiset<String> multiset 691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = TreeMultiset.create(Arrays.asList("foo", "bar", "foo")); 701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(3, multiset.size()); 711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(2, multiset.count("foo")); 721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("[bar, foo x 2]", multiset.toString()); 731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testToString() { 761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("a", 3); 771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("c", 1); 781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("b", 2); 791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("[a x 3, b x 2, c]", ms.toString()); 811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("unreasonable slow") 841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testIteratorBashing() { 851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert IteratorTester<String> tester = 861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new IteratorTester<String>(createSample().size() + 2, MODIFIABLE, 871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert newArrayList(createSample()), 881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert IteratorTester.KnownOrder.KNOWN_ORDER) { 891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private Multiset<String> targetMultiset; 901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Iterator<String> newTargetIterator() { 921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert targetMultiset = createSample(); 931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return targetMultiset.iterator(); 941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected void verify(List<String> elements) { 971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(elements, Lists.newArrayList(targetMultiset)); 981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }; 1001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /* This next line added as a stopgap until JDK6 bug is fixed. */ 1021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert tester.ignoreSunJavaBug6529795(); 1031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert tester.test(); 1051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("slow (~30s)") 1081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testElementSetIteratorBashing() { 1091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert IteratorTester<String> tester = new IteratorTester<String>(5, MODIFIABLE, 1101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert newArrayList("a", "b", "c"), IteratorTester.KnownOrder.KNOWN_ORDER) { 1111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private Set<String> targetSet; 1121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Iterator<String> newTargetIterator() { 1131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multiset<String> multiset = create(); 1141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multiset.add("a", 3); 1151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multiset.add("c", 1); 1161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multiset.add("b", 2); 1171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert targetSet = multiset.elementSet(); 1181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return targetSet.iterator(); 1191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected void verify(List<String> elements) { 1211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(elements, Lists.newArrayList(targetSet)); 1221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }; 1241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /* This next line added as a stopgap until JDK6 bug is fixed. */ 1261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert tester.ignoreSunJavaBug6529795(); 1271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert tester.test(); 1291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testElementSetSortedSetMethods() { 1321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert TreeMultiset<String> ms = TreeMultiset.create(); 1331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("c", 1); 1341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("a", 3); 1351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("b", 2); 1361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> elementSet = ms.elementSet(); 1371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("a", elementSet.first()); 1391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("c", elementSet.last()); 1401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Ordering.natural(), elementSet.comparator()); 1411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(elementSet.headSet("b")).hasContentsInOrder("a"); 1431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(elementSet.tailSet("b")).hasContentsInOrder("b", "c"); 1441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(elementSet.subSet("a", "c")).hasContentsInOrder("a", "b"); 1451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testElementSetSubsetRemove() { 1481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert TreeMultiset<String> ms = TreeMultiset.create(); 1491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("a", 1); 1501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("b", 3); 1511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("c", 2); 1521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("d", 1); 1531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("e", 3); 1541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("f", 2); 1551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> elementSet = ms.elementSet(); 1571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(elementSet).hasContentsInOrder("a", "b", "c", "d", "e", "f"); 1581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> subset = elementSet.subSet("b", "f"); 1591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(subset).hasContentsInOrder("b", "c", "d", "e"); 1601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(subset.remove("c")); 1621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(elementSet).hasContentsInOrder("a", "b", "d", "e", "f"); 1631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(subset).hasContentsInOrder("b", "d", "e"); 1641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(10, ms.size()); 1651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(subset.remove("a")); 1671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(elementSet).hasContentsInOrder("a", "b", "d", "e", "f"); 1681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(subset).hasContentsInOrder("b", "d", "e"); 1691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(10, ms.size()); 1701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testElementSetSubsetRemoveAll() { 1731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert TreeMultiset<String> ms = TreeMultiset.create(); 1741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("a", 1); 1751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("b", 3); 1761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("c", 2); 1771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("d", 1); 1781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("e", 3); 1791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("f", 2); 1801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> elementSet = ms.elementSet(); 1821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(elementSet).hasContentsInOrder("a", "b", "c", "d", "e", "f"); 1831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> subset = elementSet.subSet("b", "f"); 1841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(subset).hasContentsInOrder("b", "c", "d", "e"); 1851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(subset.removeAll(Arrays.asList("a", "c"))); 1871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(elementSet).hasContentsInOrder("a", "b", "d", "e", "f"); 1881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(subset).hasContentsInOrder("b", "d", "e"); 1891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(10, ms.size()); 1901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testElementSetSubsetRetainAll() { 1931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert TreeMultiset<String> ms = TreeMultiset.create(); 1941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("a", 1); 1951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("b", 3); 1961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("c", 2); 1971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("d", 1); 1981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("e", 3); 1991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("f", 2); 2001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> elementSet = ms.elementSet(); 2021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(elementSet).hasContentsInOrder("a", "b", "c", "d", "e", "f"); 2031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> subset = elementSet.subSet("b", "f"); 2041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(subset).hasContentsInOrder("b", "c", "d", "e"); 2051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(subset.retainAll(Arrays.asList("a", "c"))); 2071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(elementSet).hasContentsInOrder("a", "c", "f"); 2081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(subset).hasContentsInOrder("c"); 2091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(5, ms.size()); 2101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testElementSetSubsetClear() { 2131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert TreeMultiset<String> ms = TreeMultiset.create(); 2141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("a", 1); 2151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("b", 3); 2161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("c", 2); 2171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("d", 1); 2181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("e", 3); 2191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("f", 2); 2201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> elementSet = ms.elementSet(); 2221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(elementSet).hasContentsInOrder("a", "b", "c", "d", "e", "f"); 2231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> subset = elementSet.subSet("b", "f"); 2241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(subset).hasContentsInOrder("b", "c", "d", "e"); 2251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert subset.clear(); 2271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(elementSet).hasContentsInOrder("a", "f"); 2281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(subset).hasContentsInOrder(); 2291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(3, ms.size()); 2301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCustomComparator() throws Exception { 2331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Comparator<String> comparator = new Comparator<String>() { 2341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override 2351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public int compare(String o1, String o2) { 2361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return o2.compareTo(o1); 2371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }; 2391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert TreeMultiset<String> ms = TreeMultiset.create(comparator); 2401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("b"); 2421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("c"); 2431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("a"); 2441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("b"); 2451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("d"); 2461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(ms).hasContentsInOrder("d", "c", "b", "b", "a"); 2481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> elementSet = ms.elementSet(); 2501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("d", elementSet.first()); 2511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("a", elementSet.last()); 2521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(comparator, elementSet.comparator()); 2531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testNullAcceptingComparator() throws Exception { 2561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Comparator<String> comparator = Ordering.<String>natural().nullsFirst(); 2571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert TreeMultiset<String> ms = TreeMultiset.create(comparator); 2581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("b"); 2601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add(null); 2611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("a"); 2621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("b"); 2631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add(null, 2); 2641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(ms).hasContentsInOrder(null, null, null, "a", "b", "b"); 2661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(3, ms.count(null)); 2671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> elementSet = ms.elementSet(); 2691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(null, elementSet.first()); 2701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("b", elementSet.last()); 2711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(comparator, elementSet.comparator()); 2721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static final Comparator<String> DEGENERATE_COMPARATOR = 2751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new Comparator<String>() { 2761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override 2771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public int compare(String o1, String o2) { 2781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return o1.length() - o2.length(); 2791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }; 2811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /** 2831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Test a TreeMultiset with a comparator that can return 0 when comparing 2841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * unequal values. 2851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 2861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testDegenerateComparator() throws Exception { 2871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert TreeMultiset<String> ms = TreeMultiset.create(DEGENERATE_COMPARATOR); 2881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("foo"); 2901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("a"); 2911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("bar"); 2921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("b"); 2931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("c"); 2941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(2, ms.count("bar")); 2961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(3, ms.count("b")); 2971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multiset<String> ms2 = TreeMultiset.create(DEGENERATE_COMPARATOR); 2991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms2.add("cat", 2); 3011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms2.add("x", 3); 3021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(ms, ms2); 3041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(ms2, ms); 3051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedSet<String> elementSet = ms.elementSet(); 3071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("a", elementSet.first()); 3081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("foo", elementSet.last()); 3091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(DEGENERATE_COMPARATOR, elementSet.comparator()); 3101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testSubMultisetSize() { 3131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert TreeMultiset<String> ms = TreeMultiset.create(); 3141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("a", Integer.MAX_VALUE); 3151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("b", Integer.MAX_VALUE); 3161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("c", 3); 3171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Integer.MAX_VALUE, ms.count("a")); 3191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Integer.MAX_VALUE, ms.count("b")); 3201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(3, ms.count("c")); 3211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Integer.MAX_VALUE, ms.headMultiset("c", CLOSED).size()); 3231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Integer.MAX_VALUE, ms.headMultiset("b", CLOSED).size()); 3241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Integer.MAX_VALUE, ms.headMultiset("a", CLOSED).size()); 3251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(3, ms.tailMultiset("c", CLOSED).size()); 3271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Integer.MAX_VALUE, ms.tailMultiset("b", CLOSED).size()); 3281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Integer.MAX_VALUE, ms.tailMultiset("a", CLOSED).size()); 3291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public void testToStringNull() { 3321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert c = ms = TreeMultiset.create(Ordering.natural().nullsFirst()); 3331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert super.testToStringNull(); 3341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert} 3361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 337