11d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/* 21d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Copyright (C) 2008 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 197dd252788645e940eada959bdde927426e2531c9Paul Duffinimport static com.google.common.base.Preconditions.checkArgument; 201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static java.util.Arrays.asList; 217dd252788645e940eada959bdde927426e2531c9Paul Duffinimport static org.truth0.Truth.ASSERT; 221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.annotations.GwtCompatible; 241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.annotations.GwtIncompatible; 257dd252788645e940eada959bdde927426e2531c9Paul Duffinimport com.google.common.collect.testing.ListTestSuiteBuilder; 261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.MinimalCollection; 271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.SetTestSuiteBuilder; 287dd252788645e940eada959bdde927426e2531c9Paul Duffinimport com.google.common.collect.testing.TestStringListGenerator; 291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.TestStringSetGenerator; 301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.features.CollectionFeature; 311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.features.CollectionSize; 321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.google.MultisetTestSuiteBuilder; 331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.google.TestStringMultisetGenerator; 341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.google.UnmodifiableCollectionTests; 357dd252788645e940eada959bdde927426e2531c9Paul Duffinimport com.google.common.testing.EqualsTester; 361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.testing.NullPointerTester; 371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.testing.SerializableTester; 381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 390888a09821a98ac0680fad765217302858e70fa4Paul Duffinimport junit.framework.Test; 400888a09821a98ac0680fad765217302858e70fa4Paul Duffinimport junit.framework.TestCase; 410888a09821a98ac0680fad765217302858e70fa4Paul Duffinimport junit.framework.TestSuite; 420888a09821a98ac0680fad765217302858e70fa4Paul Duffin 437dd252788645e940eada959bdde927426e2531c9Paul Duffinimport java.util.ArrayList; 441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Collection; 457dd252788645e940eada959bdde927426e2531c9Paul Duffinimport java.util.HashSet; 461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Iterator; 471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.List; 481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Set; 491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/** 511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Tests for {@link ImmutableMultiset}. 521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * @author Jared Levy 541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert@GwtCompatible(emulated = true) 561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertpublic class ImmutableMultisetTest extends TestCase { 571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("suite") // TODO(cpovirk): add to collect/gwt/suites 591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static Test suite() { 601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert TestSuite suite = new TestSuite(); 611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTestSuite(ImmutableMultisetTest.class); 621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTest(MultisetTestSuiteBuilder.using( 641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new TestStringMultisetGenerator() { 651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Multiset<String> create(String[] elements) { 661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return ImmutableMultiset.copyOf(elements); 671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }) 691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .named("ImmutableMultiset") 707dd252788645e940eada959bdde927426e2531c9Paul Duffin .withFeatures(CollectionSize.ANY, 717dd252788645e940eada959bdde927426e2531c9Paul Duffin CollectionFeature.SERIALIZABLE_INCLUDING_VIEWS, 721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionFeature.ALLOWS_NULL_QUERIES) 731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .createTestSuite()); 741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 757dd252788645e940eada959bdde927426e2531c9Paul Duffin suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() { 767dd252788645e940eada959bdde927426e2531c9Paul Duffin @Override protected Set<String> create(String[] elements) { 777dd252788645e940eada959bdde927426e2531c9Paul Duffin return ImmutableMultiset.copyOf(elements).elementSet(); 781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }) 807dd252788645e940eada959bdde927426e2531c9Paul Duffin .named("ImmutableMultiset, element set") 813c77433663281544363151bf284b0240dfd22a42Paul Duffin .withFeatures(CollectionSize.ANY, 827dd252788645e940eada959bdde927426e2531c9Paul Duffin CollectionFeature.SERIALIZABLE, 833c77433663281544363151bf284b0240dfd22a42Paul Duffin CollectionFeature.ALLOWS_NULL_QUERIES) 843c77433663281544363151bf284b0240dfd22a42Paul Duffin .createTestSuite()); 853c77433663281544363151bf284b0240dfd22a42Paul Duffin 867dd252788645e940eada959bdde927426e2531c9Paul Duffin suite.addTest(ListTestSuiteBuilder.using(new TestStringListGenerator() { 877dd252788645e940eada959bdde927426e2531c9Paul Duffin @Override protected List<String> create(String[] elements) { 887dd252788645e940eada959bdde927426e2531c9Paul Duffin return ImmutableMultiset.copyOf(elements).asList(); 897dd252788645e940eada959bdde927426e2531c9Paul Duffin } 907dd252788645e940eada959bdde927426e2531c9Paul Duffin 917dd252788645e940eada959bdde927426e2531c9Paul Duffin @Override 927dd252788645e940eada959bdde927426e2531c9Paul Duffin public List<String> order(List<String> insertionOrder) { 937dd252788645e940eada959bdde927426e2531c9Paul Duffin List<String> order = new ArrayList<String>(); 947dd252788645e940eada959bdde927426e2531c9Paul Duffin for (String s : insertionOrder) { 957dd252788645e940eada959bdde927426e2531c9Paul Duffin int index = order.indexOf(s); 967dd252788645e940eada959bdde927426e2531c9Paul Duffin if (index == -1) { 977dd252788645e940eada959bdde927426e2531c9Paul Duffin order.add(s); 987dd252788645e940eada959bdde927426e2531c9Paul Duffin } else { 997dd252788645e940eada959bdde927426e2531c9Paul Duffin order.add(index, s); 1007dd252788645e940eada959bdde927426e2531c9Paul Duffin } 1017dd252788645e940eada959bdde927426e2531c9Paul Duffin } 1027dd252788645e940eada959bdde927426e2531c9Paul Duffin return order; 1033c77433663281544363151bf284b0240dfd22a42Paul Duffin } 1043c77433663281544363151bf284b0240dfd22a42Paul Duffin }) 1057dd252788645e940eada959bdde927426e2531c9Paul Duffin .named("ImmutableMultiset.asList") 1061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .withFeatures(CollectionSize.ANY, 1077dd252788645e940eada959bdde927426e2531c9Paul Duffin CollectionFeature.SERIALIZABLE, 1087dd252788645e940eada959bdde927426e2531c9Paul Duffin CollectionFeature.ALLOWS_NULL_QUERIES) 1097dd252788645e940eada959bdde927426e2531c9Paul Duffin .createTestSuite()); 1107dd252788645e940eada959bdde927426e2531c9Paul Duffin 1117dd252788645e940eada959bdde927426e2531c9Paul Duffin suite.addTest(ListTestSuiteBuilder.using(new TestStringListGenerator() { 1127dd252788645e940eada959bdde927426e2531c9Paul Duffin @Override protected List<String> create(String[] elements) { 1137dd252788645e940eada959bdde927426e2531c9Paul Duffin Set<String> set = new HashSet<String>(); 1147dd252788645e940eada959bdde927426e2531c9Paul Duffin ImmutableMultiset.Builder<String> builder = ImmutableMultiset.builder(); 1157dd252788645e940eada959bdde927426e2531c9Paul Duffin for (String s : elements) { 1167dd252788645e940eada959bdde927426e2531c9Paul Duffin checkArgument(set.add(s)); 1177dd252788645e940eada959bdde927426e2531c9Paul Duffin builder.addCopies(s, 2); 1187dd252788645e940eada959bdde927426e2531c9Paul Duffin } 1197dd252788645e940eada959bdde927426e2531c9Paul Duffin ImmutableSet<String> elementSet = (ImmutableSet<String>) builder.build().elementSet(); 1207dd252788645e940eada959bdde927426e2531c9Paul Duffin return elementSet.asList(); 1217dd252788645e940eada959bdde927426e2531c9Paul Duffin } 1227dd252788645e940eada959bdde927426e2531c9Paul Duffin }) 1237dd252788645e940eada959bdde927426e2531c9Paul Duffin .named("ImmutableMultiset.elementSet.asList") 1247dd252788645e940eada959bdde927426e2531c9Paul Duffin .withFeatures(CollectionSize.ANY, 1257dd252788645e940eada959bdde927426e2531c9Paul Duffin CollectionFeature.REJECTS_DUPLICATES_AT_CREATION, 1267dd252788645e940eada959bdde927426e2531c9Paul Duffin CollectionFeature.SERIALIZABLE, 1271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionFeature.ALLOWS_NULL_QUERIES) 1281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .createTestSuite()); 1291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return suite; 1311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCreation_noArgs() { 1341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multiset<String> multiset = ImmutableMultiset.of(); 1351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multiset.isEmpty()); 1361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCreation_oneElement() { 1391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multiset<String> multiset = ImmutableMultiset.of("a"); 1401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(HashMultiset.create(asList("a")), multiset); 1411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCreation_twoElements() { 1441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multiset<String> multiset = ImmutableMultiset.of("a", "b"); 1451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(HashMultiset.create(asList("a", "b")), multiset); 1461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCreation_threeElements() { 1491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multiset<String> multiset = ImmutableMultiset.of("a", "b", "c"); 1501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(HashMultiset.create(asList("a", "b", "c")), multiset); 1511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCreation_fourElements() { 1541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multiset<String> multiset = ImmutableMultiset.of("a", "b", "c", "d"); 1551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(HashMultiset.create(asList("a", "b", "c", "d")), multiset); 1561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCreation_fiveElements() { 1591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multiset<String> multiset = ImmutableMultiset.of("a", "b", "c", "d", "e"); 1601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(HashMultiset.create(asList("a", "b", "c", "d", "e")), 1611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multiset); 1621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCreation_sixElements() { 1651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multiset<String> multiset = ImmutableMultiset.of( 1661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "a", "b", "c", "d", "e", "f"); 1671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(HashMultiset.create(asList("a", "b", "c", "d", "e", "f")), 1681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multiset); 1691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCreation_sevenElements() { 1721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multiset<String> multiset = ImmutableMultiset.of( 1731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "a", "b", "c", "d", "e", "f", "g"); 1741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals( 1751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert HashMultiset.create(asList("a", "b", "c", "d", "e", "f", "g")), 1761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multiset); 1771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCreation_emptyArray() { 1801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String[] array = new String[0]; 1811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multiset<String> multiset = ImmutableMultiset.copyOf(array); 1821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multiset.isEmpty()); 1831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCreation_arrayOfOneElement() { 1861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String[] array = new String[] { "a" }; 1871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multiset<String> multiset = ImmutableMultiset.copyOf(array); 1881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(HashMultiset.create(asList("a")), multiset); 1891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCreation_arrayOfArray() { 1921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String[] array = new String[] { "a" }; 1931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multiset<String[]> multiset = ImmutableMultiset.<String[]>of(array); 1941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multiset<String[]> expected = HashMultiset.create(); 1951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expected.add(array); 1961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(expected, multiset); 1971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCreation_arrayContainingOnlyNull() { 2001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String[] array = new String[] { null }; 2011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 2021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableMultiset.copyOf(array); 2031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 2041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NullPointerException expected) {} 2051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCopyOf_collection_empty() { 2081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // "<String>" is required to work around a javac 1.5 bug. 2091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collection<String> c = MinimalCollection.<String>of(); 2101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multiset<String> multiset = ImmutableMultiset.copyOf(c); 2111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multiset.isEmpty()); 2121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCopyOf_collection_oneElement() { 2151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collection<String> c = MinimalCollection.of("a"); 2161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multiset<String> multiset = ImmutableMultiset.copyOf(c); 2171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(HashMultiset.create(asList("a")), multiset); 2181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCopyOf_collection_general() { 2211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collection<String> c = MinimalCollection.of("a", "b", "a"); 2221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multiset<String> multiset = ImmutableMultiset.copyOf(c); 2231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(HashMultiset.create(asList("a", "b", "a")), multiset); 2241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCopyOf_collectionContainingNull() { 2271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collection<String> c = MinimalCollection.of("a", null, "b"); 2281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 2291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableMultiset.copyOf(c); 2301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 2311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NullPointerException expected) {} 2321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCopyOf_multiset_empty() { 2351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multiset<String> c = HashMultiset.create(); 2361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multiset<String> multiset = ImmutableMultiset.copyOf(c); 2371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multiset.isEmpty()); 2381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCopyOf_multiset_oneElement() { 2411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multiset<String> c = HashMultiset.create(asList("a")); 2421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multiset<String> multiset = ImmutableMultiset.copyOf(c); 2431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(HashMultiset.create(asList("a")), multiset); 2441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCopyOf_multiset_general() { 2471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multiset<String> c = HashMultiset.create(asList("a", "b", "a")); 2481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multiset<String> multiset = ImmutableMultiset.copyOf(c); 2491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(HashMultiset.create(asList("a", "b", "a")), multiset); 2501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCopyOf_multisetContainingNull() { 2531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multiset<String> c = HashMultiset.create(asList("a", null, "b")); 2541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 2551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableMultiset.copyOf(c); 2561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 2571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NullPointerException expected) {} 2581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCopyOf_iterator_empty() { 2611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> iterator = Iterators.emptyIterator(); 2621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multiset<String> multiset = ImmutableMultiset.copyOf(iterator); 2631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multiset.isEmpty()); 2641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCopyOf_iterator_oneElement() { 2671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> iterator = Iterators.singletonIterator("a"); 2681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multiset<String> multiset = ImmutableMultiset.copyOf(iterator); 2691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(HashMultiset.create(asList("a")), multiset); 2701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCopyOf_iterator_general() { 2731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> iterator = asList("a", "b", "a").iterator(); 2741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multiset<String> multiset = ImmutableMultiset.copyOf(iterator); 2751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(HashMultiset.create(asList("a", "b", "a")), multiset); 2761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCopyOf_iteratorContainingNull() { 2791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> iterator = asList("a", null, "b").iterator(); 2801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 2811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableMultiset.copyOf(iterator); 2821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 2831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NullPointerException expected) {} 2841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static class CountingIterable implements Iterable<String> { 2871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert int count = 0; 2881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override 2891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public Iterator<String> iterator() { 2901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert count++; 2911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return asList("a", "b", "a").iterator(); 2921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCopyOf_plainIterable() { 2961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CountingIterable iterable = new CountingIterable(); 2971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multiset<String> multiset = ImmutableMultiset.copyOf(iterable); 2981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(HashMultiset.create(asList("a", "b", "a")), multiset); 2991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(1, iterable.count); 3001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCopyOf_shortcut_empty() { 3031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collection<String> c = ImmutableMultiset.of(); 3041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(c, ImmutableMultiset.copyOf(c)); 3051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCopyOf_shortcut_singleton() { 3081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collection<String> c = ImmutableMultiset.of("a"); 3091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(c, ImmutableMultiset.copyOf(c)); 3101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCopyOf_shortcut_immutableMultiset() { 3131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collection<String> c = ImmutableMultiset.of("a", "b", "c"); 3141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(c, ImmutableMultiset.copyOf(c)); 3151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testBuilderAdd() { 3181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableMultiset<String> multiset = new ImmutableMultiset.Builder<String>() 3191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .add("a") 3201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .add("b") 3211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .add("a") 3221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .add("c") 3231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .build(); 3241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(HashMultiset.create(asList("a", "b", "a", "c")), multiset); 3251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testBuilderAddAll() { 3281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> a = asList("a", "b"); 3291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> b = asList("c", "d"); 3301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableMultiset<String> multiset = new ImmutableMultiset.Builder<String>() 3311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .addAll(a) 3321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .addAll(b) 3331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .build(); 3341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(HashMultiset.create(asList("a", "b", "c", "d")), multiset); 3351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testBuilderAddAllMultiset() { 3381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multiset<String> a = HashMultiset.create(asList("a", "b", "b")); 3391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multiset<String> b = HashMultiset.create(asList("c", "b")); 3401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableMultiset<String> multiset = new ImmutableMultiset.Builder<String>() 3411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .addAll(a) 3421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .addAll(b) 3431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .build(); 3441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals( 3451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert HashMultiset.create(asList("a", "b", "b", "b", "c")), multiset); 3461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testBuilderAddAllIterator() { 3491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> iterator = asList("a", "b", "a", "c").iterator(); 3501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableMultiset<String> multiset = new ImmutableMultiset.Builder<String>() 3511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .addAll(iterator) 3521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .build(); 3531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(HashMultiset.create(asList("a", "b", "a", "c")), multiset); 3541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testBuilderAddCopies() { 3571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableMultiset<String> multiset = new ImmutableMultiset.Builder<String>() 3581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .addCopies("a", 2) 3591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .addCopies("b", 3) 3601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .addCopies("c", 0) 3611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .build(); 3621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals( 3631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert HashMultiset.create(asList("a", "a", "b", "b", "b")), multiset); 3641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testBuilderSetCount() { 3671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableMultiset<String> multiset = new ImmutableMultiset.Builder<String>() 3681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .add("a") 3691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .setCount("a", 2) 3701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .setCount("b", 3) 3711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .build(); 3721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals( 3731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert HashMultiset.create(asList("a", "a", "b", "b", "b")), multiset); 3741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testBuilderAddHandlesNullsCorrectly() { 3771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableMultiset.Builder<String> builder = ImmutableMultiset.builder(); 3781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 3791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.add((String) null); 3801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail("expected NullPointerException"); 3811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NullPointerException expected) {} 3821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testBuilderAddAllHandlesNullsCorrectly() { 3851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableMultiset.Builder<String> builder = ImmutableMultiset.builder(); 3861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 3871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.addAll((Collection<String>) null); 3881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail("expected NullPointerException"); 3891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NullPointerException expected) {} 3901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder = ImmutableMultiset.builder(); 3921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<String> listWithNulls = asList("a", null, "b"); 3931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 3941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.addAll(listWithNulls); 3951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail("expected NullPointerException"); 3961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NullPointerException expected) {} 3971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder = ImmutableMultiset.builder(); 3991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multiset<String> multisetWithNull 4001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = LinkedHashMultiset.create(asList("a", null, "b")); 4011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 4021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.addAll(multisetWithNull); 4031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail("expected NullPointerException"); 4041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NullPointerException expected) {} 4051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testBuilderAddCopiesHandlesNullsCorrectly() { 4081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableMultiset.Builder<String> builder = ImmutableMultiset.builder(); 4091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 4101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.addCopies(null, 2); 4111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail("expected NullPointerException"); 4121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NullPointerException expected) {} 4131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testBuilderAddCopiesIllegal() { 4161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableMultiset.Builder<String> builder = ImmutableMultiset.builder(); 4171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 4181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.addCopies("a", -2); 4191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail("expected IllegalArgumentException"); 4201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IllegalArgumentException expected) {} 4211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testBuilderSetCountHandlesNullsCorrectly() { 4241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableMultiset.Builder<String> builder = ImmutableMultiset.builder(); 4251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 4261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.setCount(null, 2); 4271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail("expected NullPointerException"); 4281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NullPointerException expected) {} 4291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testBuilderSetCountIllegal() { 4321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableMultiset.Builder<String> builder = ImmutableMultiset.builder(); 4331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 4341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.setCount("a", -2); 4351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail("expected IllegalArgumentException"); 4361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IllegalArgumentException expected) {} 4371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("NullPointerTester") 4407dd252788645e940eada959bdde927426e2531c9Paul Duffin public void testNullPointers() { 4411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert NullPointerTester tester = new NullPointerTester(); 4421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert tester.testAllPublicStaticMethods(ImmutableMultiset.class); 4431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("SerializableTester") 4461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testSerialization_empty() { 4471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collection<String> c = ImmutableMultiset.of(); 4481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(c, SerializableTester.reserialize(c)); 4491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("SerializableTester") 4521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testSerialization_multiple() { 4531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collection<String> c = ImmutableMultiset.of("a", "b", "a"); 4541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collection<String> copy = SerializableTester.reserializeAndAssert(c); 4550888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(copy).has().exactly("a", "a", "b").inOrder(); 4561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("SerializableTester") 4591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testSerialization_elementSet() { 4601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multiset<String> c = ImmutableMultiset.of("a", "b", "a"); 4611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collection<String> copy = 4621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert LenientSerializableTester.reserializeAndAssertLenient(c.elementSet()); 4630888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(copy).has().exactly("a", "b").inOrder(); 4641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("SerializableTester") 4671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testSerialization_entrySet() { 4681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multiset<String> c = ImmutableMultiset.of("a", "b", "c"); 4691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SerializableTester.reserializeAndAssert(c.entrySet()); 4701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testEquals_immutableMultiset() { 4731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collection<String> c = ImmutableMultiset.of("a", "b", "a"); 4741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(c, ImmutableMultiset.of("a", "b", "a")); 4751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(c, ImmutableMultiset.of("a", "a", "b")); 4760888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(c).isNotEqualTo(ImmutableMultiset.of("a", "b")); 4770888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(c).isNotEqualTo(ImmutableMultiset.of("a", "b", "c", "d")); 4781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testIterationOrder() { 4811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collection<String> c = ImmutableMultiset.of("a", "b", "a"); 4820888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(c).has().exactly("a", "a", "b").inOrder(); 4831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testMultisetWrites() { 4861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multiset<String> multiset = ImmutableMultiset.of("a", "b", "a"); 4871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert UnmodifiableCollectionTests.assertMultisetIsUnmodifiable(multiset, "test"); 4881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testAsList() { 4911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableMultiset<String> multiset 4921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = ImmutableMultiset.of("a", "a", "b", "b", "b"); 4931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableList<String> list = multiset.asList(); 4941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(ImmutableList.of("a", "a", "b", "b", "b"), list); 4951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(2, list.indexOf("b")); 4961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(4, list.lastIndexOf("b")); 4971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("SerializableTester") 5001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testSerialization_asList() { 5011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableMultiset<String> multiset 5021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = ImmutableMultiset.of("a", "a", "b", "b", "b"); 5031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SerializableTester.reserializeAndAssert(multiset.asList()); 5041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5057dd252788645e940eada959bdde927426e2531c9Paul Duffin 5067dd252788645e940eada959bdde927426e2531c9Paul Duffin public void testEquals() { 5077dd252788645e940eada959bdde927426e2531c9Paul Duffin new EqualsTester() 5087dd252788645e940eada959bdde927426e2531c9Paul Duffin .addEqualityGroup(ImmutableMultiset.of(), ImmutableMultiset.of()) 5097dd252788645e940eada959bdde927426e2531c9Paul Duffin .addEqualityGroup(ImmutableMultiset.of(1), ImmutableMultiset.of(1)) 5107dd252788645e940eada959bdde927426e2531c9Paul Duffin .addEqualityGroup(ImmutableMultiset.of(1, 1), ImmutableMultiset.of(1, 1)) 5117dd252788645e940eada959bdde927426e2531c9Paul Duffin .addEqualityGroup(ImmutableMultiset.of(1, 2, 1), ImmutableMultiset.of(2, 1, 1)) 5127dd252788645e940eada959bdde927426e2531c9Paul Duffin .testEquals(); 5137dd252788645e940eada959bdde927426e2531c9Paul Duffin } 5141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert} 515