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 java.util.Arrays.asList; 201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.annotations.GwtCompatible; 221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.annotations.GwtIncompatible; 231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.Multiset.Entry; 241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.google.UnmodifiableCollectionTests; 251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.testing.SerializableTester; 261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Collections; 281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.HashSet; 291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Iterator; 301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.NoSuchElementException; 311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Set; 321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/** 341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Common tests for a {@link Multiset}. 351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * @author Kevin Bourrillion 371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert@GwtCompatible(emulated = true) 391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertpublic abstract class AbstractMultisetTest extends AbstractCollectionTest { 401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected abstract <E> Multiset<E> create(); 421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert protected Multiset<String> ms; 441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // public for GWT 461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public void setUp() throws Exception { 471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert super.setUp(); 481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert c = ms = create(); 491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /** 521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Validates that multiset size returned by {@code size()} is the same as the 531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * size generated by summing the counts of all multiset entries. 541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert protected void assertSize(Multiset<String> multiset) { 561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert long size = 0; 571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (Multiset.Entry<String> entry : multiset.entrySet()) { 581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert size += entry.getCount(); 591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals((int) Math.min(size, Integer.MAX_VALUE), multiset.size()); 611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert protected void assertSize() { 641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSize(ms); 651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected void assertContents(String... expected) { 681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert super.assertContents(expected); 691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSize(); 701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /** 731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Don't run {@code NullPointerTester} on multisets, since they fail with 741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Java 6 due to a bug in the JDK, as illustrated in the commented out 751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * method {@code HashMultisetTest#testAnnotations()}. 761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // TODO: Figure out if this is still true... 781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("NullPointerTester") 791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public void testNullPointerExceptions() throws Exception {} 801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCountZero() { 821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0, ms.count("a")); 831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSize(); 841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCountOne() { 871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("a"); 881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(1, ms.count("a")); 891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSize(); 901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCountTwo() { 931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("a"); 941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("a"); 951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(2, ms.count("a")); 961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSize(); 971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCountAfterRemoval() { 1001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("a"); 1011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.remove("a"); 1021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0, ms.count("a")); 1031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSize(); 1041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCountNull() { 1071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0, ms.count(null)); 1081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCountWrongType() { 1111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0, ms.count(new WrongType())); 1121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert static class WrongType {} 1151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testAddNoneToNone() { 1171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0, ms.add("a", 0)); 1181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertContents(); 1191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testAddNoneToSome() { 1221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("a"); 1231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(1, ms.add("a", 0)); 1241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertContents("a"); 1251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testAddSeveralAtOnce() { 1281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0, ms.add("a", 3)); 1291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertContents("a", "a", "a"); 1301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testAddSomeToSome() { 1331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("a", 2); 1341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(2, ms.add("a", 3)); 1351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertContents("a", "a", "a", "a", "a"); 1361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public void testAddSeveralTimes() { 1391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(ms.add("a")); 1401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(ms.add("b")); 1411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(ms.add("a")); 1421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(ms.add("b")); 1431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertContents("a", "b", "a", "b"); 1441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testAddNegative() { 1471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 1481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("a", -1); 1491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 1501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IllegalArgumentException expected) { 1511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSize(); 1531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public void testEqualsNo() { 1561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("a"); 1571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("b"); 1581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("b"); 1591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multiset<String> ms2 = create(); 1611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms2.add("a", 2); 1621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms2.add("b"); 1631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(ms.equals(ms2)); 1651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSize(); 1661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testAddTooMany() { 1691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("a", Integer.MAX_VALUE); // so far so good 1701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("b", Integer.MAX_VALUE); // so far so good 1711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 1721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("a"); 1731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 1741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IllegalArgumentException expected) { 1751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSize(); 1771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testAddAllEmptySet() { 1801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert c = ms = createSample(); 1811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(ms.addAll(Collections.<String>emptySet())); 1821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(createSample(), ms); 1831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSize(); 1841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testAddAllEmptyMultiset() { 1871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert c = ms = createSample(); 1881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multiset<String> empty = create(); 1891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(ms.addAll(empty)); 1901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(createSample(), ms); 1911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSize(); 1921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testAddAllSet() { 1951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert c = ms = createSample(); 1961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Set<String> more = ImmutableSet.of("c", "d", "e"); 1971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(ms.addAll(more)); 1981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertContents("a", "b", "b", "c", "c", "d", "d", "d", "d", "e"); 1991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testAddAllMultiset() { 2021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert c = ms = createSample(); 2031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multiset<String> more = HashMultiset.create( 2041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert asList("c", "c", "d", "d", "e")); 2051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(ms.addAll(more)); 2061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertContents("a", "b", "b", "c", "c", "c", "d", "d", "d", "d", "d", "e"); 2071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testRemoveNoneFromNone() { 2101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0, ms.remove("a", 0)); 2111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertContents(); 2121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testRemoveNoneFromSome() { 2151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("a"); 2161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(1, ms.remove("a", 0)); 2171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertContents("a"); 2181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testRemoveOneFromNone() { 2211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0, ms.remove("a", 1)); 2221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertContents(); 2231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testRemoveOneFromOne() { 2261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("a"); 2271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(1, ms.remove("a", 1)); 2281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertContents(); 2291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testRemoveSomeFromSome() { 2321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("a", 5); 2331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(5, ms.remove("a", 3)); 2341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertContents("a", "a"); 2351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testRemoveTooMany() { 2381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("a", 3); 2391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(3, ms.remove("a", 5)); 2401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertContents(); 2411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testRemoveNegative() { 2441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 2451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.remove("a", -1); 2461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 2471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IllegalArgumentException expected) { 2481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSize(); 2501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testContainsSeveral() { 2531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("a", 3); 2541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(ms.contains(new String("a"))); 2551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSize(); 2561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testContainsAllNo() { 2591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("a", 2); 2601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("b", 3); 2611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(ms.containsAll(asList("a", "c"))); 2621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSize(); 2631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testContainsAllYes() { 2661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("a", 2); 2671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("b", 3); 2681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("c", 4); 2691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(ms.containsAll(asList("a", "c"))); 2701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSize(); 2711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testRemoveAllOfOne() { 2741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("a", 2); 2751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("b"); 2761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(ms.removeAll(asList("a", "c"))); 2771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertContents("b"); 2781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testRemoveAllOfDisjoint() { 2811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("a", 2); 2821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("b"); 2831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(ms.removeAll(asList("c", "d"))); 2841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertContents("a", "a", "b"); 2851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testRemoveAllOfEverything() { 2881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("a", 2); 2891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("b"); 2901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(ms.removeAll(asList("a", "b"))); 2911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertContents(); 2921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testRetainAllOfOne() { 2951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("a", 2); 2961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("b"); 2971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(ms.retainAll(asList("a", "c"))); 2981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertContents("a", "a"); 2991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testRetainAllOfDisjoint() { 3021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("a", 2); 3031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("b"); 3041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(ms.retainAll(asList("c", "d"))); 3051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertContents(); 3061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testRetainAllOfEverything() { 3091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("a", 2); 3101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("b"); 3111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(ms.retainAll(asList("a", "b"))); 3121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertContents("a", "a", "b"); 3131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testContainsAllVacuousViaElementSet() { 3161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(ms.elementSet().containsAll(Collections.emptySet())); 3171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testContainsAllNoViaElementSet() { 3201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("a", 2); 3211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("b", 3); 3221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(ms.elementSet().containsAll(asList("a", "c"))); 3231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSize(); 3241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testContainsAllYesViaElementSet() { 3271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("a", 2); 3281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("b", 3); 3291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("c", 4); 3301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(ms.elementSet().containsAll(asList("a", "c"))); 3311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSize(); 3321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testRemoveAllVacuousViaElementSet() { 3351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(ms.elementSet().removeAll(Collections.emptySet())); 3361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSize(); 3371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testRemoveAllOfOneViaElementSet() { 3401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("a", 2); 3411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("b"); 3421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(ms.elementSet().removeAll(asList("a", "c"))); 3431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertContents("b"); 3441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testRemoveAllOfDisjointViaElementSet() { 3471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("a", 2); 3481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("b"); 3491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(ms.elementSet().removeAll(asList("c", "d"))); 3501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertContents("a", "a", "b"); 3511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testRemoveAllOfEverythingViaElementSet() { 3541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("a", 2); 3551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("b"); 3561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(ms.elementSet().removeAll(asList("a", "b"))); 3571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertContents(); 3581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testRetainAllVacuousViaElementSet() { 3611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(ms.elementSet().retainAll(asList("a"))); 3621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertContents(); 3631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testRetainAllOfNothingViaElementSet() { 3661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("a"); 3671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(ms.elementSet().retainAll(Collections.emptySet())); 3681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertContents(); 3691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testRetainAllOfOneViaElementSet() { 3721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("a", 2); 3731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("b"); 3741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(ms.elementSet().retainAll(asList("a", "c"))); 3751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertContents("a", "a"); 3761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testRetainAllOfDisjointViaElementSet() { 3791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("a", 2); 3801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("b"); 3811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(ms.elementSet().retainAll(asList("c", "d"))); 3821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertContents(); 3831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testRetainAllOfEverythingViaElementSet() { 3861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("a", 2); 3871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("b"); 3881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(ms.elementSet().retainAll(asList("a", "b"))); 3891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertContents("a", "a", "b"); 3901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testElementSetBasic() { 3931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("a", 3); 3941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("b", 2); 3951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("c", 1); 3961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert HashSet<String> expected = Sets.newHashSet("a", "b", "c"); 3971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Set<String> actual = ms.elementSet(); 3981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(expected, actual); 3991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(actual, expected); 4001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSize(); 4011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testElementSetIsNotACopy() { 4041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("a", 1); 4051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("b", 2); 4061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Set<String> elementSet = ms.elementSet(); 4071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("c", 3); 4081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.setCount("b", 0); 4091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Sets.newHashSet("a", "c"), elementSet); 4101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSize(); 4111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testRemoveFromElementSetYes() { 4141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("a", 1); 4151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("b", 2); 4161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Set<String> elementSet = ms.elementSet(); 4171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(elementSet.remove("b")); 4181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertContents("a"); 4191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testRemoveFromElementSetNo() { 4221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("a", 1); 4231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Set<String> elementSet = ms.elementSet(); 4241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(elementSet.remove("b")); 4251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertContents("a"); 4261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testRemoveFromElementSetNull() { 4291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(false, ms.elementSet().remove(null)); 4301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testRemoveFromElementSetWrongType() { 4331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(false, ms.elementSet().remove(new WrongType())); 4341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCantAddToElementSet() { 4371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 4381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.elementSet().add("a"); 4391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 4401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (UnsupportedOperationException expected) { 4411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSize(); 4431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testClearViaElementSet() { 4461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms = createSample(); 4471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.elementSet().clear(); 4481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertContents(); 4491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testClearViaEntrySet() { 4521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms = createSample(); 4531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.entrySet().clear(); 4541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertContents(); 4551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testEntrySet() { 4581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms = createSample(); 4591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (Multiset.Entry<String> entry : ms.entrySet()) { 4601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(entry, entry); 4611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String element = entry.getElement(); 4621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert if (element.equals("a")) { 4631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(1, entry.getCount()); 4641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } else if (element.equals("b")) { 4651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(2, entry.getCount()); 4661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } else if (element.equals("c")) { 4671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(1, entry.getCount()); 4681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } else if (element.equals("d")) { 4691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(3, entry.getCount()); 4701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } else { 4711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 4721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSize(); 4751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testEntrySetEmpty() { 4781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Collections.emptySet(), ms.entrySet()); 4791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testReallyBig() { 4821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("a", Integer.MAX_VALUE - 1); 4831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Integer.MAX_VALUE - 1, ms.size()); 4841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("b", 3); 4851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // See Collection.size() contract 4871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Integer.MAX_VALUE, ms.size()); 4881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Make sure we didn't forget our size 4901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.remove("a", 4); 4911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Integer.MAX_VALUE - 2, ms.size()); 4921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSize(); 4931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testToStringNull() { 4961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("a", 3); 4971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("c", 1); 4981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("b", 2); 4991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add(null, 4); 5001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // This test is brittle. The original test was meant to validate the 5021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // contents of the string itself, but key ordering tended to change 5031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // under unpredictable circumstances. Instead, we're just ensuring 5041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // that the string not return null, and implicitly, not throw an exception. 5051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertNotNull(ms.toString()); 5061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSize(); 5071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("SerializableTester") 5101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testSerializable() { 5111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms = createSample(); 5121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(ms, SerializableTester.reserialize(ms)); 5131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSize(); 5141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testIteratorRemove() { 5171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("a"); 5181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("b"); 5191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("c"); 5201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> iterator = ms.iterator(); 5211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String element1 = iterator.next(); 5221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert iterator.remove(); 5231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String element2 = iterator.next(); 5241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(ms.contains(element1)); 5251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(ms.contains(element2)); 5261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSize(); 5271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testIteratorRemoveRepeated() { 5301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("a", 3); 5311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("b", 1); 5321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("c", 2); 5331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> iterator = ms.iterator(); 5341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (int i = 0; i < 6; i++) { 5351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(iterator.hasNext()); 5361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert iterator.next(); 5371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert iterator.remove(); 5381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(iterator.hasNext()); 5401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(ms.isEmpty()); 5411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSize(); 5421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testIteratorRemoveTooSoon() { 5451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("a"); 5461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("b"); 5471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("c"); 5481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> iterator = ms.iterator(); 5491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 5501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert iterator.remove(); 5511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 5521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IllegalStateException expected) {} 5531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSize(); 5541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testIteratorRemoveTwiceConsecutive() { 5571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("a"); 5581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("b"); 5591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("c"); 5601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> iterator = ms.iterator(); 5611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert iterator.next(); 5621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert iterator.remove(); 5631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 5641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert iterator.remove(); 5651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 5661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IllegalStateException expected) {} 5671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSize(); 5681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testIteratorNoSuchElementException() { 5711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("a"); 5721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("b"); 5731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("c"); 5741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> iterator = ms.iterator(); 5751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert iterator.next(); 5761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert iterator.next(); 5771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert iterator.next(); 5781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 5791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert iterator.next(); 5801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 5811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NoSuchElementException expected) {} 5821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSize(); 5831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testEntryAfterRemove() { 5861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("a", 8); 5871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multiset.Entry<String> entry = ms.entrySet().iterator().next(); 5881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(8, entry.getCount()); 5891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.remove("a"); 5901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(7, entry.getCount()); 5911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.remove("a", 4); 5921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(3, entry.getCount()); 5931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.elementSet().remove("a"); 5941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0, entry.getCount()); 5951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("a", 5); 5961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(5, entry.getCount()); 5971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testEntryAfterClear() { 6001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("a", 3); 6011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multiset.Entry<String> entry = ms.entrySet().iterator().next(); 6021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.clear(); 6031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0, entry.getCount()); 6041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("a", 5); 6051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(5, entry.getCount()); 6061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testEntryAfterEntrySetClear() { 6091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("a", 3); 6101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multiset.Entry<String> entry = ms.entrySet().iterator().next(); 6111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.entrySet().clear(); 6121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0, entry.getCount()); 6131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("a", 5); 6141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(5, entry.getCount()); 6151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testEntryAfterEntrySetIteratorRemove() { 6181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("a", 3); 6191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<Multiset.Entry<String>> iterator = ms.entrySet().iterator(); 6201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multiset.Entry<String> entry = iterator.next(); 6211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert iterator.remove(); 6221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0, entry.getCount()); 6231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 6241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert iterator.remove(); 6251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 6261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IllegalStateException expected) {} 6271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("a", 5); 6281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(5, entry.getCount()); 6291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testEntryAfterElementSetIteratorRemove() { 6321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("a", 3); 6331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multiset.Entry<String> entry = ms.entrySet().iterator().next(); 6341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> iterator = ms.elementSet().iterator(); 6351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert iterator.next(); 6361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert iterator.remove(); 6371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0, entry.getCount()); 6381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("a", 5); 6391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(5, entry.getCount()); 6401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testEntrySetContains() { 6431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("a", 3); 6441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Set<Entry<String>> es = ms.entrySet(); 6451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(es.contains(Multisets.immutableEntry("a", 3))); 6461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(es.contains(null)); 6471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(es.contains(Maps.immutableEntry("a", 3))); 6481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(es.contains(Multisets.immutableEntry("a", 2))); 6491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(es.contains(Multisets.immutableEntry("b", 3))); 6501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(es.contains(Multisets.immutableEntry("b", 0))); 6511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testEntrySetRemove() { 6541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("a", 3); 6551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Set<Entry<String>> es = ms.entrySet(); 6561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(es.remove(null)); 6571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(es.remove(Maps.immutableEntry("a", 3))); 6581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(es.remove(Multisets.immutableEntry("a", 2))); 6591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(es.remove(Multisets.immutableEntry("b", 3))); 6601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(es.remove(Multisets.immutableEntry("b", 0))); 6611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(3, ms.count("a")); 6621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(es.remove(Multisets.immutableEntry("a", 3))); 6631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0, ms.count("a")); 6641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testEntrySetToArray() { 6671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("a", 3); 6681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Set<Multiset.Entry<String>> es = ms.entrySet(); 6691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Entry<?>[] array = new Entry<?>[3]; 6701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(array, es.toArray(array)); 6711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Multisets.immutableEntry("a", 3), array[0]); 6721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertNull(array[1]); 6731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testUnmodifiableMultiset() { 6761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("a", 3); 6771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("b"); 6781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("c", 2); 6791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multiset<Object> unmodifiable = Multisets.<Object>unmodifiableMultiset(ms); 6801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert UnmodifiableCollectionTests.assertMultisetIsUnmodifiable(unmodifiable, "a"); 6811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Multiset<String> createSample() { 6841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multiset<String> ms = create(); 6851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("a", 1); 6861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("b", 2); 6871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("c", 1); 6881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ms.add("d", 3); 6891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return ms; 6901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert} 692