11d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/* 21d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Copyright (C) 2011 Google Inc. 31d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 41d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except 51d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * in compliance with the License. You may obtain a copy of the License at 61d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 71d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * http://www.apache.org/licenses/LICENSE-2.0 81d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 91d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Unless required by applicable law or agreed to in writing, software distributed under the 101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * express or implied. See the License for the specific language governing permissions and 121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * limitations under the License. 131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertpackage com.google.common.collect.testing.google; 161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static com.google.common.collect.BoundType.CLOSED; 181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static com.google.common.collect.BoundType.OPEN; 191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static com.google.common.collect.testing.Helpers.copyToList; 201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_ADD; 211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_REMOVE; 221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static com.google.common.collect.testing.features.CollectionSize.ONE; 231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static com.google.common.collect.testing.features.CollectionSize.SEVERAL; 241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static com.google.common.collect.testing.features.CollectionSize.ZERO; 251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.annotations.GwtCompatible; 271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.BoundType; 281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.Iterators; 291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.Multiset; 301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.Multiset.Entry; 311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.Multisets; 321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.SortedMultiset; 331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.features.CollectionFeature; 341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.features.CollectionSize; 351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.ArrayList; 371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Arrays; 381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Collections; 391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.List; 401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.NoSuchElementException; 411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/** 431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Tester for navigation of SortedMultisets. 441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * @author Louis Wasserman 461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert@GwtCompatible 481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertpublic class MultisetNavigationTester<E> extends AbstractMultisetTester<E> { 491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private SortedMultiset<E> sortedMultiset; 501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private List<E> entries; 511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private Entry<E> a; 521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private Entry<E> b; 531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private Entry<E> c; 541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /** 561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Used to avoid http://bugs.sun.com/view_bug.do?bug_id=6558557 571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert static <T> SortedMultiset<T> cast(Multiset<T> iterable) { 591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return (SortedMultiset<T>) iterable; 601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override 631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void setUp() throws Exception { 641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert super.setUp(); 651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert sortedMultiset = cast(getMultiset()); 661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert entries = 671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert copyToList(getSubjectGenerator().getSampleElements( 681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert getSubjectGenerator().getCollectionSize().getNumElements())); 691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collections.sort(entries, sortedMultiset.comparator()); 701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // some tests assume SEVERAL == 3 721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert if (entries.size() >= 1) { 731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert a = Multisets.immutableEntry(entries.get(0), sortedMultiset.count(entries.get(0))); 741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert if (entries.size() >= 3) { 751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert b = Multisets.immutableEntry(entries.get(1), sortedMultiset.count(entries.get(1))); 761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert c = Multisets.immutableEntry(entries.get(2), sortedMultiset.count(entries.get(2))); 771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /** 821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Resets the contents of sortedMultiset to have entries a, c, for the navigation tests. 831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @SuppressWarnings("unchecked") 851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Needed to stop Eclipse whining 861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private void resetWithHole() { 871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<E> container = new ArrayList<E>(); 881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert container.addAll(Collections.nCopies(a.getCount(), a.getElement())); 891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert container.addAll(Collections.nCopies(c.getCount(), c.getElement())); 901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert super.resetContainer(getSubjectGenerator().create(container.toArray())); 911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert sortedMultiset = (SortedMultiset<E>) getMultiset(); 921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionSize.Require(ZERO) 951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testEmptyMultisetFirst() { 961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertNull(sortedMultiset.firstEntry()); 971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert sortedMultiset.elementSet().first(); 991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 1001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NoSuchElementException e) {} 1011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionFeature.Require(SUPPORTS_REMOVE) 1041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionSize.Require(ZERO) 1051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testEmptyMultisetPollFirst() { 1061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertNull(sortedMultiset.pollFirstEntry()); 1071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionSize.Require(ZERO) 1101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testEmptyMultisetNearby() { 1111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (BoundType type : BoundType.values()) { 1121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertNull(sortedMultiset.headMultiset(samples.e0, type).lastEntry()); 1131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertNull(sortedMultiset.tailMultiset(samples.e0, type).firstEntry()); 1141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionSize.Require(ZERO) 1181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testEmptyMultisetLast() { 1191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertNull(sortedMultiset.lastEntry()); 1201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 1211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertNull(sortedMultiset.elementSet().last()); 1221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 1231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NoSuchElementException e) {} 1241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionFeature.Require(SUPPORTS_REMOVE) 1271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionSize.Require(ZERO) 1281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testEmptyMultisetPollLast() { 1291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertNull(sortedMultiset.pollLastEntry()); 1301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionSize.Require(ONE) 1331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testSingletonMultisetFirst() { 1341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(a, sortedMultiset.firstEntry()); 1351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionFeature.Require(SUPPORTS_REMOVE) 1381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionSize.Require(ONE) 1391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testSingletonMultisetPollFirst() { 1401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(a, sortedMultiset.pollFirstEntry()); 1411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(sortedMultiset.isEmpty()); 1421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionSize.Require(ONE) 1451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testSingletonMultisetNearby() { 1461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertNull(sortedMultiset.headMultiset(samples.e0, OPEN).lastEntry()); 1471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertNull(sortedMultiset.tailMultiset(samples.e0, OPEN).lastEntry()); 1481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(a, sortedMultiset.headMultiset(samples.e0, CLOSED).lastEntry()); 1501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(a, sortedMultiset.tailMultiset(samples.e0, CLOSED).firstEntry()); 1511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionSize.Require(ONE) 1541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testSingletonMultisetLast() { 1551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(a, sortedMultiset.lastEntry()); 1561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionFeature.Require(SUPPORTS_REMOVE) 1591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionSize.Require(ONE) 1601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testSingletonMultisetPollLast() { 1611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(a, sortedMultiset.pollLastEntry()); 1621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(sortedMultiset.isEmpty()); 1631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionSize.Require(SEVERAL) 1661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testFirst() { 1671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(a, sortedMultiset.firstEntry()); 1681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @SuppressWarnings("unchecked") 1711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionFeature.Require(SUPPORTS_REMOVE) 1721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionSize.Require(SEVERAL) 1731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testPollFirst() { 1741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(a, sortedMultiset.pollFirstEntry()); 1751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Arrays.asList(b, c), copyToList(sortedMultiset.entrySet())); 1761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionFeature.Require(absent = SUPPORTS_REMOVE) 1791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testPollFirstUnsupported() { 1801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 1811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert sortedMultiset.pollFirstEntry(); 1821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 1831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (UnsupportedOperationException e) {} 1841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionSize.Require(SEVERAL) 1871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testLower() { 1881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert resetWithHole(); 1891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(null, sortedMultiset.headMultiset(a.getElement(), OPEN).lastEntry()); 1901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(a, sortedMultiset.headMultiset(b.getElement(), OPEN).lastEntry()); 1911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(a, sortedMultiset.headMultiset(c.getElement(), OPEN).lastEntry()); 1921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionSize.Require(SEVERAL) 1951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testFloor() { 1961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert resetWithHole(); 1971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(a, sortedMultiset.headMultiset(a.getElement(), CLOSED).lastEntry()); 1981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(a, sortedMultiset.headMultiset(b.getElement(), CLOSED).lastEntry()); 1991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(c, sortedMultiset.headMultiset(c.getElement(), CLOSED).lastEntry()); 2001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionSize.Require(SEVERAL) 2031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCeiling() { 2041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert resetWithHole(); 2051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(a, sortedMultiset.tailMultiset(a.getElement(), CLOSED).firstEntry()); 2071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(c, sortedMultiset.tailMultiset(b.getElement(), CLOSED).firstEntry()); 2081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(c, sortedMultiset.tailMultiset(c.getElement(), CLOSED).firstEntry()); 2091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionSize.Require(SEVERAL) 2121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testHigher() { 2131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert resetWithHole(); 2141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(c, sortedMultiset.tailMultiset(a.getElement(), OPEN).firstEntry()); 2151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(c, sortedMultiset.tailMultiset(b.getElement(), OPEN).firstEntry()); 2161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(null, sortedMultiset.tailMultiset(c.getElement(), OPEN).firstEntry()); 2171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionSize.Require(SEVERAL) 2201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testLast() { 2211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(c, sortedMultiset.lastEntry()); 2221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @SuppressWarnings("unchecked") 2251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionFeature.Require(SUPPORTS_REMOVE) 2261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionSize.Require(SEVERAL) 2271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testPollLast() { 2281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(c, sortedMultiset.pollLastEntry()); 2291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Arrays.asList(a, b), copyToList(sortedMultiset.entrySet())); 2301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionFeature.Require(absent = SUPPORTS_REMOVE) 2331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionSize.Require(SEVERAL) 2341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testPollLastUnsupported() { 2351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 2361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert sortedMultiset.pollLastEntry(); 2371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 2381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (UnsupportedOperationException e) {} 2391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionSize.Require(SEVERAL) 2421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testDescendingNavigation() { 2431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<Entry<E>> ascending = new ArrayList<Entry<E>>(); 2441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterators.addAll(ascending, sortedMultiset.entrySet().iterator()); 2451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<Entry<E>> descending = new ArrayList<Entry<E>>(); 2461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterators.addAll(descending, sortedMultiset.descendingMultiset().entrySet().iterator()); 2471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collections.reverse(descending); 2481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(ascending, descending); 2491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert void expectAddFailure(SortedMultiset<E> multiset, Entry<E> entry) { 2521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 2531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multiset.add(entry.getElement(), entry.getCount()); 2541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail("Expected IllegalArgumentException"); 2551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IllegalArgumentException expected) {} 2561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 2581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multiset.add(entry.getElement()); 2591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail("Expected IllegalArgumentException"); 2601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IllegalArgumentException expected) {} 2611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 2631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multiset.addAll(Collections.singletonList(entry.getElement())); 2641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail("Expected IllegalArgumentException"); 2651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IllegalArgumentException expected) {} 2661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert void expectRemoveZero(SortedMultiset<E> multiset, Entry<E> entry) { 2691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0, multiset.remove(entry.getElement(), entry.getCount())); 2701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(multiset.remove(entry.getElement())); 2711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(multiset.elementSet().remove(entry.getElement())); 2721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert void expectSetCountFailure(SortedMultiset<E> multiset, Entry<E> entry) { 2751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 2761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multiset.setCount(entry.getElement(), multiset.count(entry.getElement())); 2771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IllegalArgumentException acceptable) {} 2781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 2791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multiset.setCount(entry.getElement(), multiset.count(entry.getElement()) + 1); 2801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail("Expected IllegalArgumentException"); 2811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IllegalArgumentException expected) {} 2821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionSize.Require(ONE) 2851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionFeature.Require(SUPPORTS_ADD) 2861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testAddOutOfTailBoundsOne() { 2871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectAddFailure(sortedMultiset.tailMultiset(a.getElement(), OPEN), a); 2881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionSize.Require(SEVERAL) 2911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionFeature.Require(SUPPORTS_ADD) 2921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testAddOutOfTailBoundsSeveral() { 2931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectAddFailure(sortedMultiset.tailMultiset(a.getElement(), OPEN), a); 2941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectAddFailure(sortedMultiset.tailMultiset(b.getElement(), CLOSED), a); 2951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectAddFailure(sortedMultiset.tailMultiset(b.getElement(), OPEN), a); 2961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectAddFailure(sortedMultiset.tailMultiset(b.getElement(), OPEN), b); 2971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectAddFailure(sortedMultiset.tailMultiset(c.getElement(), CLOSED), a); 2981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectAddFailure(sortedMultiset.tailMultiset(c.getElement(), CLOSED), b); 2991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectAddFailure(sortedMultiset.tailMultiset(c.getElement(), OPEN), a); 3001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectAddFailure(sortedMultiset.tailMultiset(c.getElement(), OPEN), b); 3011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectAddFailure(sortedMultiset.tailMultiset(c.getElement(), OPEN), c); 3021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionSize.Require(ONE) 3051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionFeature.Require(SUPPORTS_ADD) 3061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testAddOutOfHeadBoundsOne() { 3071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectAddFailure(sortedMultiset.headMultiset(a.getElement(), OPEN), a); 3081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionSize.Require(SEVERAL) 3111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionFeature.Require(SUPPORTS_ADD) 3121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testAddOutOfHeadBoundsSeveral() { 3131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectAddFailure(sortedMultiset.headMultiset(c.getElement(), OPEN), c); 3141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectAddFailure(sortedMultiset.headMultiset(b.getElement(), CLOSED), c); 3151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectAddFailure(sortedMultiset.headMultiset(b.getElement(), OPEN), c); 3161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectAddFailure(sortedMultiset.headMultiset(b.getElement(), OPEN), b); 3171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectAddFailure(sortedMultiset.headMultiset(a.getElement(), CLOSED), c); 3181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectAddFailure(sortedMultiset.headMultiset(a.getElement(), CLOSED), b); 3191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectAddFailure(sortedMultiset.headMultiset(a.getElement(), OPEN), c); 3201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectAddFailure(sortedMultiset.headMultiset(a.getElement(), OPEN), b); 3211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectAddFailure(sortedMultiset.headMultiset(a.getElement(), OPEN), a); 3221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionSize.Require(ONE) 3251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionFeature.Require(SUPPORTS_REMOVE) 3261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testRemoveOutOfTailBoundsOne() { 3271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectRemoveZero(sortedMultiset.tailMultiset(a.getElement(), OPEN), a); 3281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionSize.Require(SEVERAL) 3311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionFeature.Require(SUPPORTS_REMOVE) 3321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testRemoveOutOfTailBoundsSeveral() { 3331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectRemoveZero(sortedMultiset.tailMultiset(a.getElement(), OPEN), a); 3341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectRemoveZero(sortedMultiset.tailMultiset(b.getElement(), CLOSED), a); 3351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectRemoveZero(sortedMultiset.tailMultiset(b.getElement(), OPEN), a); 3361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectRemoveZero(sortedMultiset.tailMultiset(b.getElement(), OPEN), b); 3371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectRemoveZero(sortedMultiset.tailMultiset(c.getElement(), CLOSED), a); 3381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectRemoveZero(sortedMultiset.tailMultiset(c.getElement(), CLOSED), b); 3391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectRemoveZero(sortedMultiset.tailMultiset(c.getElement(), OPEN), a); 3401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectRemoveZero(sortedMultiset.tailMultiset(c.getElement(), OPEN), b); 3411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectRemoveZero(sortedMultiset.tailMultiset(c.getElement(), OPEN), c); 3421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionSize.Require(ONE) 3451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionFeature.Require(SUPPORTS_REMOVE) 3461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testRemoveOutOfHeadBoundsOne() { 3471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectRemoveZero(sortedMultiset.headMultiset(a.getElement(), OPEN), a); 3481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionSize.Require(SEVERAL) 3511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionFeature.Require(SUPPORTS_REMOVE) 3521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testRemoveOutOfHeadBoundsSeveral() { 3531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectRemoveZero(sortedMultiset.headMultiset(c.getElement(), OPEN), c); 3541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectRemoveZero(sortedMultiset.headMultiset(b.getElement(), CLOSED), c); 3551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectRemoveZero(sortedMultiset.headMultiset(b.getElement(), OPEN), c); 3561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectRemoveZero(sortedMultiset.headMultiset(b.getElement(), OPEN), b); 3571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectRemoveZero(sortedMultiset.headMultiset(a.getElement(), CLOSED), c); 3581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectRemoveZero(sortedMultiset.headMultiset(a.getElement(), CLOSED), b); 3591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectRemoveZero(sortedMultiset.headMultiset(a.getElement(), OPEN), c); 3601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectRemoveZero(sortedMultiset.headMultiset(a.getElement(), OPEN), b); 3611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectRemoveZero(sortedMultiset.headMultiset(a.getElement(), OPEN), a); 3621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionSize.Require(ONE) 3651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionFeature.Require({SUPPORTS_ADD, SUPPORTS_REMOVE}) 3661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testSetCountOutOfTailBoundsOne() { 3671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectSetCountFailure(sortedMultiset.tailMultiset(a.getElement(), OPEN), a); 3681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionSize.Require(SEVERAL) 3711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionFeature.Require({SUPPORTS_ADD, SUPPORTS_REMOVE}) 3721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testSetCountOutOfTailBoundsSeveral() { 3731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectSetCountFailure(sortedMultiset.tailMultiset(a.getElement(), OPEN), a); 3741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectSetCountFailure(sortedMultiset.tailMultiset(b.getElement(), CLOSED), a); 3751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectSetCountFailure(sortedMultiset.tailMultiset(b.getElement(), OPEN), a); 3761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectSetCountFailure(sortedMultiset.tailMultiset(b.getElement(), OPEN), b); 3771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectSetCountFailure(sortedMultiset.tailMultiset(c.getElement(), CLOSED), a); 3781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectSetCountFailure(sortedMultiset.tailMultiset(c.getElement(), CLOSED), b); 3791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectSetCountFailure(sortedMultiset.tailMultiset(c.getElement(), OPEN), a); 3801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectSetCountFailure(sortedMultiset.tailMultiset(c.getElement(), OPEN), b); 3811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectSetCountFailure(sortedMultiset.tailMultiset(c.getElement(), OPEN), c); 3821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionSize.Require(ONE) 3851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionFeature.Require({SUPPORTS_ADD, SUPPORTS_REMOVE}) 3861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testSetCountOutOfHeadBoundsOne() { 3871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectSetCountFailure(sortedMultiset.headMultiset(a.getElement(), OPEN), a); 3881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionSize.Require(SEVERAL) 3911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionFeature.Require({SUPPORTS_ADD, SUPPORTS_REMOVE}) 3921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testSetCountOutOfHeadBoundsSeveral() { 3931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectSetCountFailure(sortedMultiset.headMultiset(c.getElement(), OPEN), c); 3941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectSetCountFailure(sortedMultiset.headMultiset(b.getElement(), CLOSED), c); 3951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectSetCountFailure(sortedMultiset.headMultiset(b.getElement(), OPEN), c); 3961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectSetCountFailure(sortedMultiset.headMultiset(b.getElement(), OPEN), b); 3971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectSetCountFailure(sortedMultiset.headMultiset(a.getElement(), CLOSED), c); 3981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectSetCountFailure(sortedMultiset.headMultiset(a.getElement(), CLOSED), b); 3991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectSetCountFailure(sortedMultiset.headMultiset(a.getElement(), OPEN), c); 4001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectSetCountFailure(sortedMultiset.headMultiset(a.getElement(), OPEN), b); 4011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectSetCountFailure(sortedMultiset.headMultiset(a.getElement(), OPEN), a); 4021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionSize.Require(SEVERAL) 4051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionFeature.Require(SUPPORTS_ADD) 4061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testAddWithConflictingBounds() { 4071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert testEmptyRangeSubMultisetSupportingAdd(sortedMultiset.subMultiset(a.getElement(), CLOSED, 4081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert a.getElement(), OPEN)); 4091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert testEmptyRangeSubMultisetSupportingAdd(sortedMultiset.subMultiset(a.getElement(), OPEN, 4101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert a.getElement(), OPEN)); 4111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert testEmptyRangeSubMultisetSupportingAdd(sortedMultiset.subMultiset(a.getElement(), OPEN, 4121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert a.getElement(), CLOSED)); 4131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert testEmptyRangeSubMultisetSupportingAdd(sortedMultiset.subMultiset(b.getElement(), CLOSED, 4141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert a.getElement(), CLOSED)); 4151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert testEmptyRangeSubMultisetSupportingAdd(sortedMultiset.subMultiset(b.getElement(), CLOSED, 4161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert a.getElement(), OPEN)); 4171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert testEmptyRangeSubMultisetSupportingAdd(sortedMultiset.subMultiset(b.getElement(), OPEN, 4181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert a.getElement(), OPEN)); 4191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionSize.Require(SEVERAL) 4221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionFeature.Require(SUPPORTS_ADD) 4231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testConflictingBounds() { 4241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert testEmptyRangeSubMultiset(sortedMultiset.subMultiset(a.getElement(), CLOSED, a.getElement(), 4251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert OPEN)); 4261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert testEmptyRangeSubMultiset(sortedMultiset.subMultiset(a.getElement(), OPEN, a.getElement(), 4271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert OPEN)); 4281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert testEmptyRangeSubMultiset(sortedMultiset.subMultiset(a.getElement(), OPEN, a.getElement(), 4291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CLOSED)); 4301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert testEmptyRangeSubMultiset(sortedMultiset.subMultiset(b.getElement(), CLOSED, a.getElement(), 4311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CLOSED)); 4321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert testEmptyRangeSubMultiset(sortedMultiset.subMultiset(b.getElement(), CLOSED, a.getElement(), 4331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert OPEN)); 4341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert testEmptyRangeSubMultiset(sortedMultiset.subMultiset(b.getElement(), OPEN, a.getElement(), 4351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert OPEN)); 4361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testEmptyRangeSubMultiset(SortedMultiset<E> multiset) { 4391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multiset.isEmpty()); 4401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0, multiset.size()); 4411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0, multiset.toArray().length); 4421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multiset.entrySet().isEmpty()); 4431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(multiset.iterator().hasNext()); 4441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0, multiset.entrySet().size()); 4451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0, multiset.entrySet().toArray().length); 4461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(multiset.entrySet().iterator().hasNext()); 4471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @SuppressWarnings("unchecked") 4501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testEmptyRangeSubMultisetSupportingAdd(SortedMultiset<E> multiset) { 4511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (Entry<E> entry : Arrays.asList(a, b, c)) { 4521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expectAddFailure(multiset, entry); 4531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private int totalSize(Iterable<? extends Entry<?>> entries) { 4571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert int sum = 0; 4581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (Entry<?> entry : entries) { 4591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert sum += entry.getCount(); 4601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return sum; 4621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private enum SubMultisetSpec { 4651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert TAIL_CLOSED { 4661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override 4671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert <E> List<Entry<E>> expectedEntries(int targetEntry, List<Entry<E>> entries) { 4681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return entries.subList(targetEntry, entries.size()); 4691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override 4721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert <E> SortedMultiset<E> subMultiset(SortedMultiset<E> multiset, List<Entry<E>> entries, 4731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert int targetEntry) { 4741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return multiset.tailMultiset(entries.get(targetEntry).getElement(), CLOSED); 4751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }, 4771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert TAIL_OPEN { 4781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override 4791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert <E> List<Entry<E>> expectedEntries(int targetEntry, List<Entry<E>> entries) { 4801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return entries.subList(targetEntry + 1, entries.size()); 4811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override 4841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert <E> SortedMultiset<E> subMultiset(SortedMultiset<E> multiset, List<Entry<E>> entries, 4851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert int targetEntry) { 4861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return multiset.tailMultiset(entries.get(targetEntry).getElement(), OPEN); 4871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }, 4891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert HEAD_CLOSED { 4901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override 4911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert <E> List<Entry<E>> expectedEntries(int targetEntry, List<Entry<E>> entries) { 4921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return entries.subList(0, targetEntry + 1); 4931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override 4961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert <E> SortedMultiset<E> subMultiset(SortedMultiset<E> multiset, List<Entry<E>> entries, 4971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert int targetEntry) { 4981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return multiset.headMultiset(entries.get(targetEntry).getElement(), CLOSED); 4991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }, 5011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert HEAD_OPEN { 5021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override 5031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert <E> List<Entry<E>> expectedEntries(int targetEntry, List<Entry<E>> entries) { 5041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return entries.subList(0, targetEntry); 5051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override 5081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert <E> SortedMultiset<E> subMultiset(SortedMultiset<E> multiset, List<Entry<E>> entries, 5091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert int targetEntry) { 5101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return multiset.headMultiset(entries.get(targetEntry).getElement(), OPEN); 5111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }; 5131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert abstract <E> List<Entry<E>> expectedEntries(int targetEntry, List<Entry<E>> entries); 5141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert abstract <E> SortedMultiset<E> subMultiset(SortedMultiset<E> multiset, List<Entry<E>> entries, 5161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert int targetEntry); 5171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private void testSubMultisetEntrySet(SubMultisetSpec spec) { 5201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<Entry<E>> entries = copyToList(sortedMultiset.entrySet()); 5211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (int i = 0; i < entries.size(); i++) { 5221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<Entry<E>> expected = spec.expectedEntries(i, entries); 5231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedMultiset<E> subMultiset = spec.subMultiset(sortedMultiset, entries, i); 5241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(expected, copyToList(subMultiset.entrySet())); 5251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private void testSubMultisetSize(SubMultisetSpec spec) { 5291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<Entry<E>> entries = copyToList(sortedMultiset.entrySet()); 5301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (int i = 0; i < entries.size(); i++) { 5311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<Entry<E>> expected = spec.expectedEntries(i, entries); 5321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedMultiset<E> subMultiset = spec.subMultiset(sortedMultiset, entries, i); 5331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(totalSize(expected), subMultiset.size()); 5341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private void testSubMultisetDistinctElements(SubMultisetSpec spec) { 5381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<Entry<E>> entries = copyToList(sortedMultiset.entrySet()); 5391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (int i = 0; i < entries.size(); i++) { 5401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<Entry<E>> expected = spec.expectedEntries(i, entries); 5411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedMultiset<E> subMultiset = spec.subMultiset(sortedMultiset, entries, i); 5421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(expected.size(), subMultiset.entrySet().size()); 5431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(expected.size(), subMultiset.elementSet().size()); 5441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testTailClosedEntrySet() { 5481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert testSubMultisetEntrySet(SubMultisetSpec.TAIL_CLOSED); 5491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testTailClosedSize() { 5521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert testSubMultisetSize(SubMultisetSpec.TAIL_CLOSED); 5531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testTailClosedDistinctElements() { 5561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert testSubMultisetDistinctElements(SubMultisetSpec.TAIL_CLOSED); 5571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testTailOpenEntrySet() { 5601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert testSubMultisetEntrySet(SubMultisetSpec.TAIL_OPEN); 5611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testTailOpenSize() { 5641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert testSubMultisetSize(SubMultisetSpec.TAIL_OPEN); 5651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testTailOpenDistinctElements() { 5681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert testSubMultisetDistinctElements(SubMultisetSpec.TAIL_OPEN); 5691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testHeadClosedEntrySet() { 5721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert testSubMultisetEntrySet(SubMultisetSpec.HEAD_CLOSED); 5731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testHeadClosedSize() { 5761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert testSubMultisetSize(SubMultisetSpec.HEAD_CLOSED); 5771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testHeadClosedDistinctElements() { 5801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert testSubMultisetDistinctElements(SubMultisetSpec.HEAD_CLOSED); 5811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testHeadOpenEntrySet() { 5841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert testSubMultisetEntrySet(SubMultisetSpec.HEAD_OPEN); 5851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testHeadOpenSize() { 5881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert testSubMultisetSize(SubMultisetSpec.HEAD_OPEN); 5891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testHeadOpenDistinctElements() { 5921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert testSubMultisetDistinctElements(SubMultisetSpec.HEAD_OPEN); 5931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionSize.Require(SEVERAL) 5961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionFeature.Require(SUPPORTS_REMOVE) 5971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testClearTailOpen() { 5981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<Entry<E>> expected = 5991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert copyToList(sortedMultiset.headMultiset(b.getElement(), CLOSED).entrySet()); 6001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert sortedMultiset.tailMultiset(b.getElement(), OPEN).clear(); 6011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(expected, copyToList(sortedMultiset.entrySet())); 6021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionSize.Require(SEVERAL) 6051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionFeature.Require(SUPPORTS_REMOVE) 6061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testClearTailOpenEntrySet() { 6071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<Entry<E>> expected = 6081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert copyToList(sortedMultiset.headMultiset(b.getElement(), CLOSED).entrySet()); 6091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert sortedMultiset.tailMultiset(b.getElement(), OPEN).entrySet().clear(); 6101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(expected, copyToList(sortedMultiset.entrySet())); 6111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionSize.Require(SEVERAL) 6141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionFeature.Require(SUPPORTS_REMOVE) 6151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testClearTailClosed() { 6161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<Entry<E>> expected = 6171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert copyToList(sortedMultiset.headMultiset(b.getElement(), OPEN).entrySet()); 6181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert sortedMultiset.tailMultiset(b.getElement(), CLOSED).clear(); 6191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(expected, copyToList(sortedMultiset.entrySet())); 6201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionSize.Require(SEVERAL) 6231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionFeature.Require(SUPPORTS_REMOVE) 6241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testClearTailClosedEntrySet() { 6251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<Entry<E>> expected = 6261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert copyToList(sortedMultiset.headMultiset(b.getElement(), OPEN).entrySet()); 6271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert sortedMultiset.tailMultiset(b.getElement(), CLOSED).entrySet().clear(); 6281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(expected, copyToList(sortedMultiset.entrySet())); 6291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionSize.Require(SEVERAL) 6321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionFeature.Require(SUPPORTS_REMOVE) 6331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testClearHeadOpen() { 6341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<Entry<E>> expected = 6351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert copyToList(sortedMultiset.tailMultiset(b.getElement(), CLOSED).entrySet()); 6361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert sortedMultiset.headMultiset(b.getElement(), OPEN).clear(); 6371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(expected, copyToList(sortedMultiset.entrySet())); 6381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionSize.Require(SEVERAL) 6411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionFeature.Require(SUPPORTS_REMOVE) 6421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testClearHeadOpenEntrySet() { 6431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<Entry<E>> expected = 6441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert copyToList(sortedMultiset.tailMultiset(b.getElement(), CLOSED).entrySet()); 6451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert sortedMultiset.headMultiset(b.getElement(), OPEN).entrySet().clear(); 6461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(expected, copyToList(sortedMultiset.entrySet())); 6471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionSize.Require(SEVERAL) 6501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionFeature.Require(SUPPORTS_REMOVE) 6511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testClearHeadClosed() { 6521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<Entry<E>> expected = 6531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert copyToList(sortedMultiset.tailMultiset(b.getElement(), OPEN).entrySet()); 6541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert sortedMultiset.headMultiset(b.getElement(), CLOSED).clear(); 6551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(expected, copyToList(sortedMultiset.entrySet())); 6561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionSize.Require(SEVERAL) 6591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @CollectionFeature.Require(SUPPORTS_REMOVE) 6601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testClearHeadClosedEntrySet() { 6611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<Entry<E>> expected = 6621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert copyToList(sortedMultiset.tailMultiset(b.getElement(), OPEN).entrySet()); 6631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert sortedMultiset.headMultiset(b.getElement(), CLOSED).entrySet().clear(); 6641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(expected, copyToList(sortedMultiset.entrySet())); 6651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert} 667