+ /**
+ * Test to check ordered iterators
+ */
+ @Test
+ public void testSortedIterator() {
+ List<@NonNull Comparator<ISegment>> comparators = new LinkedList<>();
+ comparators.add(SegmentComparators.INTERVAL_END_COMPARATOR);
+ comparators.add(NonNullUtils.checkNotNull(SegmentComparators.INTERVAL_END_COMPARATOR.reversed()));
+ comparators.add(SegmentComparators.INTERVAL_START_COMPARATOR);
+ comparators.add(NonNullUtils.checkNotNull(SegmentComparators.INTERVAL_START_COMPARATOR.reversed()));
+ comparators.add(SegmentComparators.INTERVAL_LENGTH_COMPARATOR);
+ comparators.add(NonNullUtils.checkNotNull(SegmentComparators.INTERVAL_LENGTH_COMPARATOR.reversed()));
+
+ Iterable<ISegment> iterable;
+ for (Comparator<ISegment> comparator : comparators) {
+ iterable = fSegmentStore.iterator(comparator);
+ verifySortedIterable(iterable, 5, comparator);
+ iterable = fSegmentStore.getIntersectingElements(5, comparator);
+ verifySortedIterable(iterable, 3, comparator);
+ iterable = fSegmentStore.getIntersectingElements(7, 14, comparator);
+ verifySortedIterable(iterable, 3, comparator);
+ }
+ }
+
+ private static void verifySortedIterable(Iterable<ISegment> iterable, int expectedSize, Comparator<ISegment> comparator) {
+ // check its size
+ assertEquals(expectedSize, Iterables.size(iterable));
+ Iterator<ISegment> iterator = iterable.iterator();
+ // check the order
+ ISegment prev, current = iterator.next();
+ while (iterator.hasNext()) {
+ prev = current;
+ current = iterator.next();
+ assertTrue(comparator.compare(prev, current) <= 0);
+ }
+ }