/* __ __ __ __ __ ___ * \ \ / / \ \ / / __/ * \ \/ / /\ \ \/ / / * \____/__/ \__\____/__/.ɪᴏ * ᶜᵒᵖʸʳᶦᵍʰᵗ ᵇʸ ᵛᵃᵛʳ ⁻ ˡᶦᶜᵉⁿˢᵉᵈ ᵘⁿᵈᵉʳ ᵗʰᵉ ᵃᵖᵃᶜʰᵉ ˡᶦᶜᵉⁿˢᵉ ᵛᵉʳˢᶦᵒⁿ ᵗʷᵒ ᵈᵒᵗ ᶻᵉʳᵒ */ package io.vavr.collection; import org.junit.Ignore; import org.junit.Test; import java.math.BigDecimal; import java.util.Comparator; import java.util.Spliterator; import static java.util.Comparator.naturalOrder; import static java.util.Comparator.reverseOrder; import static io.vavr.TestComparators.toStringComparator; public abstract class AbstractSortedSetTest extends AbstractSetTest { @Override abstract protected <T> SortedSet<T> empty(); @Override abstract protected <T> SortedSet<T> emptyWithNull(); @Override abstract protected <T> SortedSet<T> of(T element); abstract protected <T> SortedSet<T> of(Comparator<? super T> comparator, T element); @SuppressWarnings("unchecked") abstract protected <T> SortedSet<T> of(Comparator<? super T> comparator, T... elements); // -- static narrow @Test public void shouldNarrowSortedSet() { final SortedSet<Double> doubles = of(toStringComparator(), 1.0d); final SortedSet<Number> numbers = SortedSet.narrow(doubles); final int actual = numbers.add(new BigDecimal("2.0")).sum().intValue(); assertThat(actual).isEqualTo(3); } @Test public void shouldReturnComparator() { assertThat(of(1).comparator()).isNotNull(); } @Override @Test public void shouldPreserveSingletonInstanceOnDeserialization() { // not possible, because the empty instance stores information about the underlying comparator } @Override @Test public void shouldScanWithNonComparable() { // makes no sense because sorted sets contain ordered elements } @Override @Test public void shouldNarrowSet() { // makes no sense because disjoint types share not the same ordering } @Override @Test public void shouldNarrowTraversable() { // makes no sense because disjoint types share not the same ordering } // -- equals @Test public void shouldBeEqualWhenHavingSameElementsAndDifferentOrder() { final SortedSet<Integer> set1 = of(naturalOrder(), 1, 2, 3); final SortedSet<Integer> set2 = of(reverseOrder(), 3, 2, 1); assertThat(set1).isEqualTo(set2); } // -- toSortedSet @Override @Test(expected = ClassCastException.class) @Ignore("SortedSet in test always created with working comparator, and because method toSortedSet() return same object will never throw ClassCastException") public void shouldThrowOnConvertToSortedSetWithoutComparatorOnNonComparable() { super.shouldThrowOnConvertToSortedSetWithoutComparatorOnNonComparable(); } // -- spliterator @Test public void shouldHaveSortedSpliterator() { assertThat(of(1, 2, 3).spliterator().hasCharacteristics(Spliterator.SORTED)).isTrue(); } @Test public void shouldHaveOrderedSpliterator() { assertThat(of(1, 2, 3).spliterator().hasCharacteristics(Spliterator.ORDERED)).isTrue(); } // -- isSequential() @Test public void shouldReturnFalseWhenIsSequentialCalled() { assertThat(of(1, 2, 3).isSequential()).isFalse(); } }