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 197dd252788645e940eada959bdde927426e2531c9Paul Duffinimport static org.truth0.Truth.ASSERT; 207dd252788645e940eada959bdde927426e2531c9Paul Duffin 217dd252788645e940eada959bdde927426e2531c9Paul Duffinimport com.google.common.annotations.GwtCompatible; 227dd252788645e940eada959bdde927426e2531c9Paul Duffinimport com.google.common.annotations.GwtIncompatible; 237dd252788645e940eada959bdde927426e2531c9Paul Duffinimport com.google.common.collect.testing.DerivedComparable; 247dd252788645e940eada959bdde927426e2531c9Paul Duffinimport com.google.common.testing.NullPointerTester; 25dbd967a6e5c96cc1a97c5521f88dc1564ba2f81bPaul Duffin 260888a09821a98ac0680fad765217302858e70fa4Paul Duffinimport junit.framework.TestCase; 270888a09821a98ac0680fad765217302858e70fa4Paul Duffin 28dbd967a6e5c96cc1a97c5521f88dc1564ba2f81bPaul Duffinimport java.util.Arrays; 29dbd967a6e5c96cc1a97c5521f88dc1564ba2f81bPaul Duffinimport java.util.Collections; 301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/** 321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Tests for {@link Multisets}. 331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * @author Mike Bostock 351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * @author Jared Levy 361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * @author Louis Wasserman 371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert@GwtCompatible(emulated = true) 391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertpublic class MultisetsTest extends TestCase { 401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /* See MultisetsImmutableEntryTest for immutableEntry() tests. */ 421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testNewTreeMultisetDerived() { 441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert TreeMultiset<DerivedComparable> set = TreeMultiset.create(); 451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(set.isEmpty()); 461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert set.add(new DerivedComparable("foo"), 2); 471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert set.add(new DerivedComparable("bar"), 3); 480888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(set).has().exactly( 491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new DerivedComparable("bar"), new DerivedComparable("bar"), new DerivedComparable("bar"), 507dd252788645e940eada959bdde927426e2531c9Paul Duffin new DerivedComparable("foo"), new DerivedComparable("foo")).inOrder(); 511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testNewTreeMultisetNonGeneric() { 541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert TreeMultiset<LegacyComparable> set = TreeMultiset.create(); 551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(set.isEmpty()); 561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert set.add(new LegacyComparable("foo"), 2); 571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert set.add(new LegacyComparable("bar"), 3); 580888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(set).has().exactly(new LegacyComparable("bar"), 591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new LegacyComparable("bar"), new LegacyComparable("bar"), 607dd252788645e940eada959bdde927426e2531c9Paul Duffin new LegacyComparable("foo"), new LegacyComparable("foo")).inOrder(); 611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testNewTreeMultisetComparator() { 641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert TreeMultiset<String> multiset 651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = TreeMultiset.create(Collections.reverseOrder()); 661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multiset.add("bar", 3); 671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multiset.add("foo", 2); 680888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(multiset).has().exactly("foo", "foo", "bar", "bar", "bar").inOrder(); 691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testRetainOccurrencesEmpty() { 721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multiset<String> multiset = HashMultiset.create(); 731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multiset<String> toRetain = 741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert HashMultiset.create(Arrays.asList("a", "b", "a")); 751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(Multisets.retainOccurrences(multiset, toRetain)); 760888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(multiset).isEmpty(); 771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testRemoveOccurrencesEmpty() { 801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multiset<String> multiset = HashMultiset.create(); 811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multiset<String> toRemove = 821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert HashMultiset.create(Arrays.asList("a", "b", "a")); 831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(Multisets.retainOccurrences(multiset, toRemove)); 841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multiset.isEmpty()); 851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 877dd252788645e940eada959bdde927426e2531c9Paul Duffin public void testUnion() { 887dd252788645e940eada959bdde927426e2531c9Paul Duffin Multiset<String> ms1 = HashMultiset.create(Arrays.asList("a", "b", "a")); 897dd252788645e940eada959bdde927426e2531c9Paul Duffin Multiset<String> ms2 = HashMultiset.create( 907dd252788645e940eada959bdde927426e2531c9Paul Duffin Arrays.asList("a", "b", "b", "c")); 910888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(Multisets.union(ms1, ms2)).has().exactly("a", "a", "b", "b", "c"); 927dd252788645e940eada959bdde927426e2531c9Paul Duffin } 937dd252788645e940eada959bdde927426e2531c9Paul Duffin 947dd252788645e940eada959bdde927426e2531c9Paul Duffin public void testUnionEqualMultisets() { 957dd252788645e940eada959bdde927426e2531c9Paul Duffin Multiset<String> ms1 = HashMultiset.create(Arrays.asList("a", "b", "a")); 967dd252788645e940eada959bdde927426e2531c9Paul Duffin Multiset<String> ms2 = HashMultiset.create(Arrays.asList("a", "b", "a")); 977dd252788645e940eada959bdde927426e2531c9Paul Duffin assertEquals(ms1, Multisets.union(ms1, ms2)); 987dd252788645e940eada959bdde927426e2531c9Paul Duffin } 997dd252788645e940eada959bdde927426e2531c9Paul Duffin 1007dd252788645e940eada959bdde927426e2531c9Paul Duffin public void testUnionEmptyNonempty() { 1017dd252788645e940eada959bdde927426e2531c9Paul Duffin Multiset<String> ms1 = HashMultiset.create(); 1027dd252788645e940eada959bdde927426e2531c9Paul Duffin Multiset<String> ms2 = HashMultiset.create(Arrays.asList("a", "b", "a")); 1037dd252788645e940eada959bdde927426e2531c9Paul Duffin assertEquals(ms2, Multisets.union(ms1, ms2)); 1047dd252788645e940eada959bdde927426e2531c9Paul Duffin } 1057dd252788645e940eada959bdde927426e2531c9Paul Duffin 1067dd252788645e940eada959bdde927426e2531c9Paul Duffin public void testUnionNonemptyEmpty() { 1077dd252788645e940eada959bdde927426e2531c9Paul Duffin Multiset<String> ms1 = HashMultiset.create(Arrays.asList("a", "b", "a")); 1087dd252788645e940eada959bdde927426e2531c9Paul Duffin Multiset<String> ms2 = HashMultiset.create(); 1097dd252788645e940eada959bdde927426e2531c9Paul Duffin assertEquals(ms1, Multisets.union(ms1, ms2)); 1107dd252788645e940eada959bdde927426e2531c9Paul Duffin } 1117dd252788645e940eada959bdde927426e2531c9Paul Duffin 1121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testIntersectEmptyNonempty() { 1131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multiset<String> ms1 = HashMultiset.create(); 1141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multiset<String> ms2 = HashMultiset.create(Arrays.asList("a", "b", "a")); 1150888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(Multisets.intersection(ms1, ms2)).isEmpty(); 1161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testIntersectNonemptyEmpty() { 1191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multiset<String> ms1 = HashMultiset.create(Arrays.asList("a", "b", "a")); 1201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multiset<String> ms2 = HashMultiset.create(); 1210888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(Multisets.intersection(ms1, ms2)).isEmpty(); 1227dd252788645e940eada959bdde927426e2531c9Paul Duffin } 1237dd252788645e940eada959bdde927426e2531c9Paul Duffin 1247dd252788645e940eada959bdde927426e2531c9Paul Duffin public void testSum() { 1257dd252788645e940eada959bdde927426e2531c9Paul Duffin Multiset<String> ms1 = HashMultiset.create(Arrays.asList("a", "b", "a")); 1267dd252788645e940eada959bdde927426e2531c9Paul Duffin Multiset<String> ms2 = HashMultiset.create(Arrays.asList("b", "c")); 1270888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(Multisets.sum(ms1, ms2)).has().exactly("a", "a", "b", "b", "c"); 1287dd252788645e940eada959bdde927426e2531c9Paul Duffin } 1297dd252788645e940eada959bdde927426e2531c9Paul Duffin 1307dd252788645e940eada959bdde927426e2531c9Paul Duffin public void testSumEmptyNonempty() { 1317dd252788645e940eada959bdde927426e2531c9Paul Duffin Multiset<String> ms1 = HashMultiset.create(); 1327dd252788645e940eada959bdde927426e2531c9Paul Duffin Multiset<String> ms2 = HashMultiset.create(Arrays.asList("a", "b", "a")); 1330888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(Multisets.sum(ms1, ms2)).has().exactly("a", "b", "a"); 1347dd252788645e940eada959bdde927426e2531c9Paul Duffin } 1357dd252788645e940eada959bdde927426e2531c9Paul Duffin 1367dd252788645e940eada959bdde927426e2531c9Paul Duffin public void testSumNonemptyEmpty() { 1377dd252788645e940eada959bdde927426e2531c9Paul Duffin Multiset<String> ms1 = HashMultiset.create(Arrays.asList("a", "b", "a")); 1387dd252788645e940eada959bdde927426e2531c9Paul Duffin Multiset<String> ms2 = HashMultiset.create(); 1390888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(Multisets.sum(ms1, ms2)).has().exactly("a", "b", "a"); 1407dd252788645e940eada959bdde927426e2531c9Paul Duffin } 1417dd252788645e940eada959bdde927426e2531c9Paul Duffin 1427dd252788645e940eada959bdde927426e2531c9Paul Duffin public void testDifferenceWithNoRemovedElements() { 1437dd252788645e940eada959bdde927426e2531c9Paul Duffin Multiset<String> ms1 = HashMultiset.create(Arrays.asList("a", "b", "a")); 1447dd252788645e940eada959bdde927426e2531c9Paul Duffin Multiset<String> ms2 = HashMultiset.create(Arrays.asList("a")); 1450888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(Multisets.difference(ms1, ms2)).has().exactly("a", "b"); 1467dd252788645e940eada959bdde927426e2531c9Paul Duffin } 1477dd252788645e940eada959bdde927426e2531c9Paul Duffin 1487dd252788645e940eada959bdde927426e2531c9Paul Duffin public void testDifferenceWithRemovedElement() { 1497dd252788645e940eada959bdde927426e2531c9Paul Duffin Multiset<String> ms1 = HashMultiset.create(Arrays.asList("a", "b", "a")); 1507dd252788645e940eada959bdde927426e2531c9Paul Duffin Multiset<String> ms2 = HashMultiset.create(Arrays.asList("b")); 1510888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(Multisets.difference(ms1, ms2)).has().exactly("a", "a"); 1527dd252788645e940eada959bdde927426e2531c9Paul Duffin } 1537dd252788645e940eada959bdde927426e2531c9Paul Duffin 1547dd252788645e940eada959bdde927426e2531c9Paul Duffin public void testDifferenceWithMoreElementsInSecondMultiset() { 1557dd252788645e940eada959bdde927426e2531c9Paul Duffin Multiset<String> ms1 = HashMultiset.create(Arrays.asList("a", "b", "a")); 1567dd252788645e940eada959bdde927426e2531c9Paul Duffin Multiset<String> ms2 = HashMultiset.create(Arrays.asList("a", "b", "b", "b")); 1577dd252788645e940eada959bdde927426e2531c9Paul Duffin Multiset<String> diff = Multisets.difference(ms1, ms2); 1580888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(diff).has().item("a"); 1597dd252788645e940eada959bdde927426e2531c9Paul Duffin assertEquals(0, diff.count("b")); 1607dd252788645e940eada959bdde927426e2531c9Paul Duffin assertEquals(1, diff.count("a")); 1617dd252788645e940eada959bdde927426e2531c9Paul Duffin assertFalse(diff.contains("b")); 1627dd252788645e940eada959bdde927426e2531c9Paul Duffin assertTrue(diff.contains("a")); 1637dd252788645e940eada959bdde927426e2531c9Paul Duffin } 1647dd252788645e940eada959bdde927426e2531c9Paul Duffin 1657dd252788645e940eada959bdde927426e2531c9Paul Duffin public void testDifferenceEmptyNonempty() { 1667dd252788645e940eada959bdde927426e2531c9Paul Duffin Multiset<String> ms1 = HashMultiset.create(); 1677dd252788645e940eada959bdde927426e2531c9Paul Duffin Multiset<String> ms2 = HashMultiset.create(Arrays.asList("a", "b", "a")); 1687dd252788645e940eada959bdde927426e2531c9Paul Duffin assertEquals(ms1, Multisets.difference(ms1, ms2)); 1697dd252788645e940eada959bdde927426e2531c9Paul Duffin } 1707dd252788645e940eada959bdde927426e2531c9Paul Duffin 1717dd252788645e940eada959bdde927426e2531c9Paul Duffin public void testDifferenceNonemptyEmpty() { 1727dd252788645e940eada959bdde927426e2531c9Paul Duffin Multiset<String> ms1 = HashMultiset.create(Arrays.asList("a", "b", "a")); 1737dd252788645e940eada959bdde927426e2531c9Paul Duffin Multiset<String> ms2 = HashMultiset.create(); 1747dd252788645e940eada959bdde927426e2531c9Paul Duffin assertEquals(ms1, Multisets.difference(ms1, ms2)); 1751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1767dd252788645e940eada959bdde927426e2531c9Paul Duffin 1771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testContainsOccurrencesEmpty() { 1781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multiset<String> superMultiset = HashMultiset.create(Arrays.asList("a", "b", "a")); 1791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multiset<String> subMultiset = HashMultiset.create(); 1801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(Multisets.containsOccurrences(superMultiset, subMultiset)); 1811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(Multisets.containsOccurrences(subMultiset, superMultiset)); 1821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testContainsOccurrences() { 1851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multiset<String> superMultiset = HashMultiset.create(Arrays.asList("a", "b", "a")); 1861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multiset<String> subMultiset = HashMultiset.create(Arrays.asList("a", "b")); 1871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(Multisets.containsOccurrences(superMultiset, subMultiset)); 1881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(Multisets.containsOccurrences(subMultiset, superMultiset)); 1891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multiset<String> diffMultiset = HashMultiset.create(Arrays.asList("a", "b", "c")); 1901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(Multisets.containsOccurrences(superMultiset, diffMultiset)); 1911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(Multisets.containsOccurrences(diffMultiset, subMultiset)); 1921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1937dd252788645e940eada959bdde927426e2531c9Paul Duffin 1941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testRetainEmptyOccurrences() { 1951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multiset<String> multiset = 1961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert HashMultiset.create(Arrays.asList("a", "b", "a")); 1971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multiset<String> toRetain = HashMultiset.create(); 1981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(Multisets.retainOccurrences(multiset, toRetain)); 1991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multiset.isEmpty()); 2001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testRetainOccurrences() { 2031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multiset<String> multiset = 2041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert TreeMultiset.create(Arrays.asList("a", "b", "a", "c")); 2051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multiset<String> toRetain = 2061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert HashMultiset.create(Arrays.asList("a", "b", "b")); 2071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(Multisets.retainOccurrences(multiset, toRetain)); 2080888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(multiset).has().exactly("a", "b").inOrder(); 2091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testRemoveEmptyOccurrences() { 2121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multiset<String> multiset = 2131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert TreeMultiset.create(Arrays.asList("a", "b", "a")); 2141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multiset<String> toRemove = HashMultiset.create(); 2151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(Multisets.removeOccurrences(multiset, toRemove)); 2160888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(multiset).has().exactly("a", "a", "b").inOrder(); 2171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testRemoveOccurrences() { 2201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multiset<String> multiset = 2211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert TreeMultiset.create(Arrays.asList("a", "b", "a", "c")); 2221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multiset<String> toRemove = 2231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert HashMultiset.create(Arrays.asList("a", "b", "b")); 2241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(Multisets.removeOccurrences(multiset, toRemove)); 2250888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(multiset).has().exactly("a", "c").inOrder(); 2261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @SuppressWarnings("deprecation") 2297dd252788645e940eada959bdde927426e2531c9Paul Duffin public void testUnmodifiableMultisetShortCircuit() { 2301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multiset<String> mod = HashMultiset.create(); 2311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multiset<String> unmod = Multisets.unmodifiableMultiset(mod); 2321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertNotSame(mod, unmod); 2331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(unmod, Multisets.unmodifiableMultiset(unmod)); 2341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableMultiset<String> immutable = ImmutableMultiset.of("a", "a", "b", "a"); 2351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(immutable, Multisets.unmodifiableMultiset(immutable)); 2361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(immutable, Multisets.unmodifiableMultiset((Multiset<String>) immutable)); 2371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2387dd252788645e940eada959bdde927426e2531c9Paul Duffin 2391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testHighestCountFirst() { 2401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multiset<String> multiset = HashMultiset.create( 2411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Arrays.asList("a", "a", "a", "b", "c", "c")); 2427dd252788645e940eada959bdde927426e2531c9Paul Duffin ImmutableMultiset<String> sortedMultiset = 2431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multisets.copyHighestCountFirst(multiset); 2441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2450888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(sortedMultiset.entrySet()).has().exactly( 2461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multisets.immutableEntry("a", 3), Multisets.immutableEntry("c", 2), 2477dd252788645e940eada959bdde927426e2531c9Paul Duffin Multisets.immutableEntry("b", 1)).inOrder(); 2481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2490888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(sortedMultiset).has().exactly( 2501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "a", 2511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "a", 2521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "a", 2531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "c", 2541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "c", 2557dd252788645e940eada959bdde927426e2531c9Paul Duffin "b").inOrder(); 2567dd252788645e940eada959bdde927426e2531c9Paul Duffin 2570888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(Multisets.copyHighestCountFirst(ImmutableMultiset.of())).isEmpty(); 2581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2597dd252788645e940eada959bdde927426e2531c9Paul Duffin 2601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("NullPointerTester") 2617dd252788645e940eada959bdde927426e2531c9Paul Duffin public void testNullPointers() { 2627dd252788645e940eada959bdde927426e2531c9Paul Duffin new NullPointerTester().testAllPublicStaticMethods(Multisets.class); 2631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert} 265