10888a09821a98ac0680fad765217302858e70fa4Paul Duffin/*
20888a09821a98ac0680fad765217302858e70fa4Paul Duffin * Copyright (C) 2011 The Guava Authors
30888a09821a98ac0680fad765217302858e70fa4Paul Duffin *
40888a09821a98ac0680fad765217302858e70fa4Paul Duffin * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
50888a09821a98ac0680fad765217302858e70fa4Paul Duffin * in compliance with the License. You may obtain a copy of the License at
60888a09821a98ac0680fad765217302858e70fa4Paul Duffin *
70888a09821a98ac0680fad765217302858e70fa4Paul Duffin * http://www.apache.org/licenses/LICENSE-2.0
80888a09821a98ac0680fad765217302858e70fa4Paul Duffin *
90888a09821a98ac0680fad765217302858e70fa4Paul Duffin * Unless required by applicable law or agreed to in writing, software distributed under the
100888a09821a98ac0680fad765217302858e70fa4Paul Duffin * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
110888a09821a98ac0680fad765217302858e70fa4Paul Duffin * express or implied. See the License for the specific language governing permissions and
120888a09821a98ac0680fad765217302858e70fa4Paul Duffin * limitations under the License.
130888a09821a98ac0680fad765217302858e70fa4Paul Duffin */
140888a09821a98ac0680fad765217302858e70fa4Paul Duffin
150888a09821a98ac0680fad765217302858e70fa4Paul Duffinpackage com.google.common.collect;
160888a09821a98ac0680fad765217302858e70fa4Paul Duffin
170888a09821a98ac0680fad765217302858e70fa4Paul Duffinimport static com.google.common.collect.BoundType.CLOSED;
180888a09821a98ac0680fad765217302858e70fa4Paul Duffinimport static com.google.common.collect.BoundType.OPEN;
190888a09821a98ac0680fad765217302858e70fa4Paul Duffin
200888a09821a98ac0680fad765217302858e70fa4Paul Duffinimport com.google.common.collect.testing.features.CollectionFeature;
210888a09821a98ac0680fad765217302858e70fa4Paul Duffinimport com.google.common.collect.testing.features.CollectionSize;
220888a09821a98ac0680fad765217302858e70fa4Paul Duffinimport com.google.common.collect.testing.google.SortedMultisetTestSuiteBuilder;
230888a09821a98ac0680fad765217302858e70fa4Paul Duffinimport com.google.common.collect.testing.google.TestStringMultisetGenerator;
240888a09821a98ac0680fad765217302858e70fa4Paul Duffin
250888a09821a98ac0680fad765217302858e70fa4Paul Duffinimport junit.framework.Test;
260888a09821a98ac0680fad765217302858e70fa4Paul Duffinimport junit.framework.TestSuite;
270888a09821a98ac0680fad765217302858e70fa4Paul Duffin
280888a09821a98ac0680fad765217302858e70fa4Paul Duffinimport java.util.Arrays;
290888a09821a98ac0680fad765217302858e70fa4Paul Duffinimport java.util.Collection;
300888a09821a98ac0680fad765217302858e70fa4Paul Duffinimport java.util.Iterator;
310888a09821a98ac0680fad765217302858e70fa4Paul Duffinimport java.util.List;
323ecfa412eddc4b084663f38d562537b86b9734d5Paul Duffinimport java.util.NavigableSet;
330888a09821a98ac0680fad765217302858e70fa4Paul Duffin
340888a09821a98ac0680fad765217302858e70fa4Paul Duffinimport javax.annotation.Nullable;
350888a09821a98ac0680fad765217302858e70fa4Paul Duffin
360888a09821a98ac0680fad765217302858e70fa4Paul Duffin/**
370888a09821a98ac0680fad765217302858e70fa4Paul Duffin * Tests for {@link ForwardingSortedMultiset}.
380888a09821a98ac0680fad765217302858e70fa4Paul Duffin *
390888a09821a98ac0680fad765217302858e70fa4Paul Duffin * @author Louis Wasserman
400888a09821a98ac0680fad765217302858e70fa4Paul Duffin */
410888a09821a98ac0680fad765217302858e70fa4Paul Duffinpublic class ForwardingSortedMultisetTest extends ForwardingMultisetTest {
420888a09821a98ac0680fad765217302858e70fa4Paul Duffin  static class StandardImplForwardingSortedMultiset<E> extends ForwardingSortedMultiset<E> {
430888a09821a98ac0680fad765217302858e70fa4Paul Duffin    private final SortedMultiset<E> backingMultiset;
440888a09821a98ac0680fad765217302858e70fa4Paul Duffin
450888a09821a98ac0680fad765217302858e70fa4Paul Duffin    StandardImplForwardingSortedMultiset(SortedMultiset<E> backingMultiset) {
460888a09821a98ac0680fad765217302858e70fa4Paul Duffin      this.backingMultiset = backingMultiset;
470888a09821a98ac0680fad765217302858e70fa4Paul Duffin    }
480888a09821a98ac0680fad765217302858e70fa4Paul Duffin
490888a09821a98ac0680fad765217302858e70fa4Paul Duffin    @Override
500888a09821a98ac0680fad765217302858e70fa4Paul Duffin    protected SortedMultiset<E> delegate() {
510888a09821a98ac0680fad765217302858e70fa4Paul Duffin      return backingMultiset;
520888a09821a98ac0680fad765217302858e70fa4Paul Duffin    }
530888a09821a98ac0680fad765217302858e70fa4Paul Duffin
540888a09821a98ac0680fad765217302858e70fa4Paul Duffin    @Override
550888a09821a98ac0680fad765217302858e70fa4Paul Duffin    public SortedMultiset<E> descendingMultiset() {
560888a09821a98ac0680fad765217302858e70fa4Paul Duffin      return new StandardDescendingMultiset() {
570888a09821a98ac0680fad765217302858e70fa4Paul Duffin
580888a09821a98ac0680fad765217302858e70fa4Paul Duffin        @Override
590888a09821a98ac0680fad765217302858e70fa4Paul Duffin        Iterator<Entry<E>> entryIterator() {
600888a09821a98ac0680fad765217302858e70fa4Paul Duffin          return backingMultiset
610888a09821a98ac0680fad765217302858e70fa4Paul Duffin              .descendingMultiset()
620888a09821a98ac0680fad765217302858e70fa4Paul Duffin              .entrySet()
630888a09821a98ac0680fad765217302858e70fa4Paul Duffin              .iterator();
640888a09821a98ac0680fad765217302858e70fa4Paul Duffin        }
650888a09821a98ac0680fad765217302858e70fa4Paul Duffin      };
660888a09821a98ac0680fad765217302858e70fa4Paul Duffin    }
670888a09821a98ac0680fad765217302858e70fa4Paul Duffin
680888a09821a98ac0680fad765217302858e70fa4Paul Duffin    @Override
693ecfa412eddc4b084663f38d562537b86b9734d5Paul Duffin    public NavigableSet<E> elementSet() {
700888a09821a98ac0680fad765217302858e70fa4Paul Duffin      return new StandardElementSet();
710888a09821a98ac0680fad765217302858e70fa4Paul Duffin    }
720888a09821a98ac0680fad765217302858e70fa4Paul Duffin
730888a09821a98ac0680fad765217302858e70fa4Paul Duffin    @Override
740888a09821a98ac0680fad765217302858e70fa4Paul Duffin    public Entry<E> firstEntry() {
750888a09821a98ac0680fad765217302858e70fa4Paul Duffin      return standardFirstEntry();
760888a09821a98ac0680fad765217302858e70fa4Paul Duffin    }
770888a09821a98ac0680fad765217302858e70fa4Paul Duffin
780888a09821a98ac0680fad765217302858e70fa4Paul Duffin    @Override
790888a09821a98ac0680fad765217302858e70fa4Paul Duffin    public Entry<E> lastEntry() {
800888a09821a98ac0680fad765217302858e70fa4Paul Duffin      return standardLastEntry();
810888a09821a98ac0680fad765217302858e70fa4Paul Duffin    }
820888a09821a98ac0680fad765217302858e70fa4Paul Duffin
830888a09821a98ac0680fad765217302858e70fa4Paul Duffin    @Override
840888a09821a98ac0680fad765217302858e70fa4Paul Duffin    public Entry<E> pollFirstEntry() {
850888a09821a98ac0680fad765217302858e70fa4Paul Duffin      return standardPollFirstEntry();
860888a09821a98ac0680fad765217302858e70fa4Paul Duffin    }
870888a09821a98ac0680fad765217302858e70fa4Paul Duffin
880888a09821a98ac0680fad765217302858e70fa4Paul Duffin    @Override
890888a09821a98ac0680fad765217302858e70fa4Paul Duffin    public Entry<E> pollLastEntry() {
900888a09821a98ac0680fad765217302858e70fa4Paul Duffin      return standardPollLastEntry();
910888a09821a98ac0680fad765217302858e70fa4Paul Duffin    }
920888a09821a98ac0680fad765217302858e70fa4Paul Duffin
930888a09821a98ac0680fad765217302858e70fa4Paul Duffin    @Override
940888a09821a98ac0680fad765217302858e70fa4Paul Duffin    public SortedMultiset<E> subMultiset(
950888a09821a98ac0680fad765217302858e70fa4Paul Duffin        E lowerBound, BoundType lowerBoundType, E upperBound, BoundType upperBoundType) {
960888a09821a98ac0680fad765217302858e70fa4Paul Duffin      return standardSubMultiset(lowerBound, lowerBoundType, upperBound, upperBoundType);
970888a09821a98ac0680fad765217302858e70fa4Paul Duffin    }
980888a09821a98ac0680fad765217302858e70fa4Paul Duffin
990888a09821a98ac0680fad765217302858e70fa4Paul Duffin    @Override
1000888a09821a98ac0680fad765217302858e70fa4Paul Duffin    public int count(@Nullable Object element) {
1010888a09821a98ac0680fad765217302858e70fa4Paul Duffin      return standardCount(element);
1020888a09821a98ac0680fad765217302858e70fa4Paul Duffin    }
1030888a09821a98ac0680fad765217302858e70fa4Paul Duffin
1040888a09821a98ac0680fad765217302858e70fa4Paul Duffin    @Override
1050888a09821a98ac0680fad765217302858e70fa4Paul Duffin    public boolean equals(@Nullable Object object) {
1060888a09821a98ac0680fad765217302858e70fa4Paul Duffin      return standardEquals(object);
1070888a09821a98ac0680fad765217302858e70fa4Paul Duffin    }
1080888a09821a98ac0680fad765217302858e70fa4Paul Duffin
1090888a09821a98ac0680fad765217302858e70fa4Paul Duffin    @Override
1100888a09821a98ac0680fad765217302858e70fa4Paul Duffin    public int hashCode() {
1110888a09821a98ac0680fad765217302858e70fa4Paul Duffin      return standardHashCode();
1120888a09821a98ac0680fad765217302858e70fa4Paul Duffin    }
1130888a09821a98ac0680fad765217302858e70fa4Paul Duffin
1140888a09821a98ac0680fad765217302858e70fa4Paul Duffin    @Override
1150888a09821a98ac0680fad765217302858e70fa4Paul Duffin    public boolean add(E element) {
1160888a09821a98ac0680fad765217302858e70fa4Paul Duffin      return standardAdd(element);
1170888a09821a98ac0680fad765217302858e70fa4Paul Duffin    }
1180888a09821a98ac0680fad765217302858e70fa4Paul Duffin
1190888a09821a98ac0680fad765217302858e70fa4Paul Duffin    @Override
1200888a09821a98ac0680fad765217302858e70fa4Paul Duffin    public boolean addAll(Collection<? extends E> collection) {
1210888a09821a98ac0680fad765217302858e70fa4Paul Duffin      return standardAddAll(collection);
1220888a09821a98ac0680fad765217302858e70fa4Paul Duffin    }
1230888a09821a98ac0680fad765217302858e70fa4Paul Duffin
1240888a09821a98ac0680fad765217302858e70fa4Paul Duffin    @Override
1250888a09821a98ac0680fad765217302858e70fa4Paul Duffin    public void clear() {
1260888a09821a98ac0680fad765217302858e70fa4Paul Duffin      standardClear();
1270888a09821a98ac0680fad765217302858e70fa4Paul Duffin    }
1280888a09821a98ac0680fad765217302858e70fa4Paul Duffin
1290888a09821a98ac0680fad765217302858e70fa4Paul Duffin    @Override
1300888a09821a98ac0680fad765217302858e70fa4Paul Duffin    public boolean contains(@Nullable Object object) {
1310888a09821a98ac0680fad765217302858e70fa4Paul Duffin      return standardContains(object);
1320888a09821a98ac0680fad765217302858e70fa4Paul Duffin    }
1330888a09821a98ac0680fad765217302858e70fa4Paul Duffin
1340888a09821a98ac0680fad765217302858e70fa4Paul Duffin    @Override
1350888a09821a98ac0680fad765217302858e70fa4Paul Duffin    public boolean containsAll(Collection<?> collection) {
1360888a09821a98ac0680fad765217302858e70fa4Paul Duffin      return standardContainsAll(collection);
1370888a09821a98ac0680fad765217302858e70fa4Paul Duffin    }
1380888a09821a98ac0680fad765217302858e70fa4Paul Duffin
1390888a09821a98ac0680fad765217302858e70fa4Paul Duffin    @Override
1400888a09821a98ac0680fad765217302858e70fa4Paul Duffin    public boolean isEmpty() {
1410888a09821a98ac0680fad765217302858e70fa4Paul Duffin      return standardIsEmpty();
1420888a09821a98ac0680fad765217302858e70fa4Paul Duffin    }
1430888a09821a98ac0680fad765217302858e70fa4Paul Duffin
1440888a09821a98ac0680fad765217302858e70fa4Paul Duffin    @Override
1450888a09821a98ac0680fad765217302858e70fa4Paul Duffin    public Iterator<E> iterator() {
1460888a09821a98ac0680fad765217302858e70fa4Paul Duffin      return standardIterator();
1470888a09821a98ac0680fad765217302858e70fa4Paul Duffin    }
1480888a09821a98ac0680fad765217302858e70fa4Paul Duffin
1490888a09821a98ac0680fad765217302858e70fa4Paul Duffin    @Override
1500888a09821a98ac0680fad765217302858e70fa4Paul Duffin    public boolean remove(@Nullable Object object) {
1510888a09821a98ac0680fad765217302858e70fa4Paul Duffin      return standardRemove(object);
1520888a09821a98ac0680fad765217302858e70fa4Paul Duffin    }
1530888a09821a98ac0680fad765217302858e70fa4Paul Duffin
1540888a09821a98ac0680fad765217302858e70fa4Paul Duffin    @Override
1550888a09821a98ac0680fad765217302858e70fa4Paul Duffin    public boolean removeAll(Collection<?> collection) {
1560888a09821a98ac0680fad765217302858e70fa4Paul Duffin      return standardRemoveAll(collection);
1570888a09821a98ac0680fad765217302858e70fa4Paul Duffin    }
1580888a09821a98ac0680fad765217302858e70fa4Paul Duffin
1590888a09821a98ac0680fad765217302858e70fa4Paul Duffin    @Override
1600888a09821a98ac0680fad765217302858e70fa4Paul Duffin    public boolean retainAll(Collection<?> collection) {
1610888a09821a98ac0680fad765217302858e70fa4Paul Duffin      return standardRetainAll(collection);
1620888a09821a98ac0680fad765217302858e70fa4Paul Duffin    }
1630888a09821a98ac0680fad765217302858e70fa4Paul Duffin
1640888a09821a98ac0680fad765217302858e70fa4Paul Duffin    @Override
1650888a09821a98ac0680fad765217302858e70fa4Paul Duffin    public int size() {
1660888a09821a98ac0680fad765217302858e70fa4Paul Duffin      return standardSize();
1670888a09821a98ac0680fad765217302858e70fa4Paul Duffin    }
1680888a09821a98ac0680fad765217302858e70fa4Paul Duffin
1690888a09821a98ac0680fad765217302858e70fa4Paul Duffin    @Override
1700888a09821a98ac0680fad765217302858e70fa4Paul Duffin    public Object[] toArray() {
1710888a09821a98ac0680fad765217302858e70fa4Paul Duffin      return standardToArray();
1720888a09821a98ac0680fad765217302858e70fa4Paul Duffin    }
1730888a09821a98ac0680fad765217302858e70fa4Paul Duffin
1740888a09821a98ac0680fad765217302858e70fa4Paul Duffin    @Override
1750888a09821a98ac0680fad765217302858e70fa4Paul Duffin    public <T> T[] toArray(T[] array) {
1760888a09821a98ac0680fad765217302858e70fa4Paul Duffin      return standardToArray(array);
1770888a09821a98ac0680fad765217302858e70fa4Paul Duffin    }
1780888a09821a98ac0680fad765217302858e70fa4Paul Duffin  }
1790888a09821a98ac0680fad765217302858e70fa4Paul Duffin
1800888a09821a98ac0680fad765217302858e70fa4Paul Duffin  public static Test suite() {
1810888a09821a98ac0680fad765217302858e70fa4Paul Duffin    TestSuite suite = new TestSuite();
1820888a09821a98ac0680fad765217302858e70fa4Paul Duffin
1830888a09821a98ac0680fad765217302858e70fa4Paul Duffin    suite.addTestSuite(ForwardingSortedMultisetTest.class);
1840888a09821a98ac0680fad765217302858e70fa4Paul Duffin    suite.addTest(SortedMultisetTestSuiteBuilder
1850888a09821a98ac0680fad765217302858e70fa4Paul Duffin        .using(new TestStringMultisetGenerator() {
1860888a09821a98ac0680fad765217302858e70fa4Paul Duffin          @Override
1870888a09821a98ac0680fad765217302858e70fa4Paul Duffin          protected Multiset<String> create(String[] elements) {
1880888a09821a98ac0680fad765217302858e70fa4Paul Duffin            return new StandardImplForwardingSortedMultiset<String>(
1890888a09821a98ac0680fad765217302858e70fa4Paul Duffin                TreeMultiset.create(Arrays.asList(elements)));
1900888a09821a98ac0680fad765217302858e70fa4Paul Duffin          }
1910888a09821a98ac0680fad765217302858e70fa4Paul Duffin
1920888a09821a98ac0680fad765217302858e70fa4Paul Duffin          @Override
1930888a09821a98ac0680fad765217302858e70fa4Paul Duffin          public List<String> order(List<String> insertionOrder) {
1940888a09821a98ac0680fad765217302858e70fa4Paul Duffin            return Ordering.natural().sortedCopy(insertionOrder);
1950888a09821a98ac0680fad765217302858e70fa4Paul Duffin          }
1960888a09821a98ac0680fad765217302858e70fa4Paul Duffin        })
1970888a09821a98ac0680fad765217302858e70fa4Paul Duffin        .named("ForwardingSortedMultiset with standard impls")
1980888a09821a98ac0680fad765217302858e70fa4Paul Duffin        .withFeatures(
1990888a09821a98ac0680fad765217302858e70fa4Paul Duffin            CollectionSize.ANY, CollectionFeature.KNOWN_ORDER, CollectionFeature.GENERAL_PURPOSE,
2000888a09821a98ac0680fad765217302858e70fa4Paul Duffin            CollectionFeature.ALLOWS_NULL_QUERIES)
2010888a09821a98ac0680fad765217302858e70fa4Paul Duffin        .createTestSuite());
2020888a09821a98ac0680fad765217302858e70fa4Paul Duffin
2030888a09821a98ac0680fad765217302858e70fa4Paul Duffin    return suite;
2040888a09821a98ac0680fad765217302858e70fa4Paul Duffin  }
2050888a09821a98ac0680fad765217302858e70fa4Paul Duffin
2060888a09821a98ac0680fad765217302858e70fa4Paul Duffin  @Override
2070888a09821a98ac0680fad765217302858e70fa4Paul Duffin  public void setUp() throws Exception {
2080888a09821a98ac0680fad765217302858e70fa4Paul Duffin    super.setUp();
2090888a09821a98ac0680fad765217302858e70fa4Paul Duffin    /*
2100888a09821a98ac0680fad765217302858e70fa4Paul Duffin     * Class parameters must be raw, so we can't create a proxy with generic type arguments. The
2110888a09821a98ac0680fad765217302858e70fa4Paul Duffin     * created proxy only records calls and returns null, so the type is irrelevant at runtime.
2120888a09821a98ac0680fad765217302858e70fa4Paul Duffin     */
2130888a09821a98ac0680fad765217302858e70fa4Paul Duffin    @SuppressWarnings("unchecked")
2140888a09821a98ac0680fad765217302858e70fa4Paul Duffin    final SortedMultiset<String> sortedMultiset = createProxyInstance(SortedMultiset.class);
2150888a09821a98ac0680fad765217302858e70fa4Paul Duffin    forward = new ForwardingSortedMultiset<String>() {
2160888a09821a98ac0680fad765217302858e70fa4Paul Duffin      @Override
2170888a09821a98ac0680fad765217302858e70fa4Paul Duffin      protected SortedMultiset<String> delegate() {
2180888a09821a98ac0680fad765217302858e70fa4Paul Duffin        return sortedMultiset;
2190888a09821a98ac0680fad765217302858e70fa4Paul Duffin      }
2200888a09821a98ac0680fad765217302858e70fa4Paul Duffin    };
2210888a09821a98ac0680fad765217302858e70fa4Paul Duffin  }
2220888a09821a98ac0680fad765217302858e70fa4Paul Duffin
2230888a09821a98ac0680fad765217302858e70fa4Paul Duffin  public void testComparator() {
2240888a09821a98ac0680fad765217302858e70fa4Paul Duffin    forward().comparator();
2250888a09821a98ac0680fad765217302858e70fa4Paul Duffin    assertEquals("[comparator]", getCalls());
2260888a09821a98ac0680fad765217302858e70fa4Paul Duffin  }
2270888a09821a98ac0680fad765217302858e70fa4Paul Duffin
2280888a09821a98ac0680fad765217302858e70fa4Paul Duffin  public void testFirstEntry() {
2290888a09821a98ac0680fad765217302858e70fa4Paul Duffin    forward().firstEntry();
2300888a09821a98ac0680fad765217302858e70fa4Paul Duffin    assertEquals("[firstEntry]", getCalls());
2310888a09821a98ac0680fad765217302858e70fa4Paul Duffin  }
2320888a09821a98ac0680fad765217302858e70fa4Paul Duffin
2330888a09821a98ac0680fad765217302858e70fa4Paul Duffin  public void testLastEntry() {
2340888a09821a98ac0680fad765217302858e70fa4Paul Duffin    forward().lastEntry();
2350888a09821a98ac0680fad765217302858e70fa4Paul Duffin    assertEquals("[lastEntry]", getCalls());
2360888a09821a98ac0680fad765217302858e70fa4Paul Duffin  }
2370888a09821a98ac0680fad765217302858e70fa4Paul Duffin
2380888a09821a98ac0680fad765217302858e70fa4Paul Duffin  public void testPollFirstEntry() {
2390888a09821a98ac0680fad765217302858e70fa4Paul Duffin    forward().pollFirstEntry();
2400888a09821a98ac0680fad765217302858e70fa4Paul Duffin    assertEquals("[pollFirstEntry]", getCalls());
2410888a09821a98ac0680fad765217302858e70fa4Paul Duffin  }
2420888a09821a98ac0680fad765217302858e70fa4Paul Duffin
2430888a09821a98ac0680fad765217302858e70fa4Paul Duffin  public void testPollLastEntry() {
2440888a09821a98ac0680fad765217302858e70fa4Paul Duffin    forward().pollLastEntry();
2450888a09821a98ac0680fad765217302858e70fa4Paul Duffin    assertEquals("[pollLastEntry]", getCalls());
2460888a09821a98ac0680fad765217302858e70fa4Paul Duffin  }
2470888a09821a98ac0680fad765217302858e70fa4Paul Duffin
2480888a09821a98ac0680fad765217302858e70fa4Paul Duffin  public void testDescendingMultiset() {
2490888a09821a98ac0680fad765217302858e70fa4Paul Duffin    forward().descendingMultiset();
2500888a09821a98ac0680fad765217302858e70fa4Paul Duffin    assertEquals("[descendingMultiset]", getCalls());
2510888a09821a98ac0680fad765217302858e70fa4Paul Duffin  }
2520888a09821a98ac0680fad765217302858e70fa4Paul Duffin
2530888a09821a98ac0680fad765217302858e70fa4Paul Duffin  public void testHeadMultiset() {
2540888a09821a98ac0680fad765217302858e70fa4Paul Duffin    forward().headMultiset("abcd", CLOSED);
2550888a09821a98ac0680fad765217302858e70fa4Paul Duffin    assertEquals("[headMultiset(Object,BoundType)]", getCalls());
2560888a09821a98ac0680fad765217302858e70fa4Paul Duffin  }
2570888a09821a98ac0680fad765217302858e70fa4Paul Duffin
2580888a09821a98ac0680fad765217302858e70fa4Paul Duffin  public void testSubMultiset() {
2590888a09821a98ac0680fad765217302858e70fa4Paul Duffin    forward().subMultiset("abcd", CLOSED, "dcba", OPEN);
2600888a09821a98ac0680fad765217302858e70fa4Paul Duffin    assertEquals("[subMultiset(Object,BoundType,Object,BoundType)]", getCalls());
2610888a09821a98ac0680fad765217302858e70fa4Paul Duffin  }
2620888a09821a98ac0680fad765217302858e70fa4Paul Duffin
2630888a09821a98ac0680fad765217302858e70fa4Paul Duffin  public void testTailMultiset() {
2640888a09821a98ac0680fad765217302858e70fa4Paul Duffin    forward().tailMultiset("last", OPEN);
2650888a09821a98ac0680fad765217302858e70fa4Paul Duffin    assertEquals("[tailMultiset(Object,BoundType)]", getCalls());
2660888a09821a98ac0680fad765217302858e70fa4Paul Duffin  }
2670888a09821a98ac0680fad765217302858e70fa4Paul Duffin
2680888a09821a98ac0680fad765217302858e70fa4Paul Duffin  @Override
2690888a09821a98ac0680fad765217302858e70fa4Paul Duffin  protected SortedMultiset<String> forward() {
2700888a09821a98ac0680fad765217302858e70fa4Paul Duffin    return (SortedMultiset<String>) super.forward();
2710888a09821a98ac0680fad765217302858e70fa4Paul Duffin  }
2720888a09821a98ac0680fad765217302858e70fa4Paul Duffin}
273