TreeMultisetTest.java revision 1d580d0f6ee4f21eb309ba7b509d2c6d671c4044
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