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.testing.google; 181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_ADD; 201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_CLEAR; 211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_REMOVE; 221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_REMOVE_ALL; 231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_RETAIN_ALL; 241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static com.google.common.collect.testing.features.CollectionSize.ONE; 251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static com.google.common.collect.testing.features.CollectionSize.ZERO; 261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.annotations.GwtCompatible; 281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.Multiset; 291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.Multisets; 301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.WrongType; 311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.features.CollectionFeature; 321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.features.CollectionSize; 331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.lang.reflect.Method; 351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Collections; 361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Iterator; 371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/** 391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * A generic JUnit test which tests multiset-specific write operations. 401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Can't be invoked directly; please see {@link MultisetTestSuiteBuilder}. 411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * @author Jared Levy 431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert@GwtCompatible 451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertpublic class MultisetWritesTester<E> extends AbstractMultisetTester<E> { 461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /** 471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Returns the {@link Method} instance for 481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * {@link #testEntrySet_iterator()} so that tests of 491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * classes with unmodifiable iterators can suppress it. 501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static Method getEntrySetIteratorMethod() { 521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Platform.getMethod( 531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert MultisetWritesTester.class, "testEntrySet_iterator"); 541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionFeature.Require(SUPPORTS_ADD) 571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testAddOccurrences() { 581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert int oldCount = getMultiset().count(samples.e0); 591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("multiset.add(E, int) should return the old count", 601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert oldCount, getMultiset().add(samples.e0, 2)); 611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("multiset.count() incorrect after add(E, int)", 621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert oldCount + 2, getMultiset().count(samples.e0)); 631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionFeature.Require(absent = SUPPORTS_ADD) 661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testAddOccurrences_unsupported() { 671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert getMultiset().add(samples.e0, 2); 691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail("unsupported multiset.add(E, int) didn't throw exception"); 701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (UnsupportedOperationException required) {} 711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionSize.Require(absent = ZERO) 741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionFeature.Require(SUPPORTS_REMOVE) 751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testRemove_occurrences_present() { 761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("multiset.remove(present, 2) didn't return the old count", 771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1, getMultiset().remove(samples.e0, 2)); 781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse("multiset contains present after multiset.remove(present, 2)", 791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert getMultiset().contains(samples.e0)); 801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionFeature.Require(SUPPORTS_REMOVE) 831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testRemove_occurrences_absent() { 841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("multiset.remove(absent, 0) didn't return 0", 851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 0, getMultiset().remove(samples.e3, 2)); 861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionFeature.Require(absent = SUPPORTS_REMOVE) 891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testRemove_occurrences_unsupported_absent() { 901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // notice: we don't care whether it succeeds, or fails with UOE 911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals( 931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "multiset.remove(absent, 2) didn't return 0 or throw an exception", 941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 0, getMultiset().remove(samples.e3, 2)); 951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (UnsupportedOperationException ok) {} 961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionFeature.Require(SUPPORTS_REMOVE) 991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testRemove_occurrences_0() { 1001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert int oldCount = getMultiset().count(samples.e0); 1011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("multiset.remove(E, 0) didn't return the old count", 1021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert oldCount, getMultiset().remove(samples.e0, 0)); 1031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionFeature.Require(SUPPORTS_REMOVE) 1061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testRemove_occurrences_negative() { 1071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 1081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert getMultiset().remove(samples.e0, -1); 1091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail("multiset.remove(E, -1) didn't throw an exception"); 1101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IllegalArgumentException required) {} 1111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionFeature.Require(SUPPORTS_REMOVE) 1141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testRemove_occurrences_wrongType() { 1151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("multiset.remove(wrongType, 1) didn't return 0", 1161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 0, getMultiset().remove(WrongType.VALUE, 1)); 1171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionFeature.Require(SUPPORTS_CLEAR) 1201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testEntrySet_clear() { 1211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert getMultiset().entrySet().clear(); 1221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue("multiset not empty after entrySet().clear()", 1231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert getMultiset().isEmpty()); 1241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionSize.Require(ONE) 1271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionFeature.Require(SUPPORTS_REMOVE) 1281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testEntrySet_iterator() { 1291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<Multiset.Entry<E>> iterator = getMultiset().entrySet().iterator(); 1301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue( 1311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "non-empty multiset.entrySet() iterator.hasNext() returned false", 1321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert iterator.hasNext()); 1331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("multiset.entrySet() iterator.next() returned incorrect entry", 1341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multisets.immutableEntry(samples.e0, 1), iterator.next()); 1351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse( 1361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "size 1 multiset.entrySet() iterator.hasNext() returned true " 1371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert + "after next()", 1381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert iterator.hasNext()); 1391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert iterator.remove(); 1401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue( 1411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "multiset isn't empty after multiset.entrySet() iterator.remove()", 1421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert getMultiset().isEmpty()); 1431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionSize.Require(absent = ZERO) 1461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionFeature.Require(absent = SUPPORTS_REMOVE) 1471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testEntrySet_iterator_remove_unsupported() { 1481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<Multiset.Entry<E>> iterator = getMultiset().entrySet().iterator(); 1491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue( 1501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "non-empty multiset.entrySet() iterator.hasNext() returned false", 1511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert iterator.hasNext()); 1521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 1531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert iterator.remove(); 1541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail("multiset.entrySet() iterator.remove() didn't throw an exception"); 1551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (UnsupportedOperationException expected) {} 1561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionSize.Require(absent = ZERO) 1591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionFeature.Require(SUPPORTS_REMOVE) 1601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testEntrySet_remove_present() { 1611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue( 1621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "multiset.entrySet.remove(presentEntry) returned false", 1631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert getMultiset().entrySet().remove( 1641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multisets.immutableEntry(samples.e0, 1))); 1651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse( 1661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "multiset contains element after removing its entry", 1671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert getMultiset().contains(samples.e0)); 1681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionSize.Require(absent = ZERO) 1711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionFeature.Require(SUPPORTS_REMOVE) 1721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testEntrySet_remove_missing() { 1731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse( 1741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "multiset.entrySet.remove(missingEntry) returned true", 1751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert getMultiset().entrySet().remove( 1761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multisets.immutableEntry(samples.e0, 2))); 1771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue( 1781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "multiset didn't contain element after removing a missing entry", 1791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert getMultiset().contains(samples.e0)); 1801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionSize.Require(absent = ZERO) 1831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionFeature.Require(SUPPORTS_REMOVE_ALL) 1841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testEntrySet_removeAll_present() { 1851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue( 1861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "multiset.entrySet.removeAll(presentEntry) returned false", 1871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert getMultiset().entrySet().removeAll( 1881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collections.singleton(Multisets.immutableEntry(samples.e0, 1)))); 1891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse( 1901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "multiset contains element after removing its entry", 1911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert getMultiset().contains(samples.e0)); 1921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionSize.Require(absent = ZERO) 1951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionFeature.Require(SUPPORTS_REMOVE_ALL) 1961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testEntrySet_removeAll_missing() { 1971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse( 1981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "multiset.entrySet.remove(missingEntry) returned true", 1991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert getMultiset().entrySet().removeAll( 2001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collections.singleton(Multisets.immutableEntry(samples.e0, 2)))); 2011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue( 2021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "multiset didn't contain element after removing a missing entry", 2031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert getMultiset().contains(samples.e0)); 2041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionFeature.Require(SUPPORTS_REMOVE_ALL) 2071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testEntrySet_removeAll_null() { 2081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 2091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert getMultiset().entrySet().removeAll(null); 2101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail("multiset.entrySet.removeAll(null) didn't throw an exception"); 2111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NullPointerException expected) {} 2121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionSize.Require(ONE) 2151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionFeature.Require(SUPPORTS_RETAIN_ALL) 2161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testEntrySet_retainAll_present() { 2171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse( 2181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "multiset.entrySet.retainAll(presentEntry) returned false", 2191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert getMultiset().entrySet().retainAll( 2201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collections.singleton(Multisets.immutableEntry(samples.e0, 1)))); 2211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue( 2221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "multiset doesn't contains element after retaining its entry", 2231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert getMultiset().contains(samples.e0)); 2241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionSize.Require(ONE) 2271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionFeature.Require(SUPPORTS_RETAIN_ALL) 2281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testEntrySet_retainAll_missing() { 2291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue( 2301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "multiset.entrySet.retainAll(missingEntry) returned true", 2311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert getMultiset().entrySet().retainAll( 2321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collections.singleton(Multisets.immutableEntry(samples.e0, 2)))); 2331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse( 2341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "multiset contains element after retaining a different entry", 2351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert getMultiset().contains(samples.e0)); 2361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionFeature.Require(SUPPORTS_RETAIN_ALL) 2391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testEntrySet_retainAll_null() { 2401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 2411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert getMultiset().entrySet().retainAll(null); 2421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Returning successfully is not ideal, but tolerated. 2431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NullPointerException expected) {} 2441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert} 246