package org.eclipse.tracecompass.segmentstore.core.tests.perf;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
import java.io.IOException;
import java.nio.file.Files;
populate(size, fuzz, fSegStore, 0, getSegmentStoreSize());
pMinsertion.stop();
+ if (i == 0) {
+ /**
+ * Assert that the segments are returned in the correct order,
+ * the benchmark will be irrelevant if the contract is not
+ * respected.
+ */
+ assertOrder(fSegStore, SegmentComparators.INTERVAL_START_COMPARATOR);
+ assertOrder(fSegStore, SegmentComparators.INTERVAL_END_COMPARATOR);
+ assertOrder(fSegStore, SegmentComparators.INTERVAL_LENGTH_COMPARATOR);
+ }
+
pMiterateStart.start();
int count = sortedIterate(fSegStore, SegmentComparators.INTERVAL_START_COMPARATOR);
pMiterateStart.stop();
return iterate(iterable);
}
+ private static void assertOrder(ISegmentStore<@NonNull BasicSegment> store, Comparator<@NonNull ISegment> order) {
+ Iterable<@NonNull BasicSegment> iterable = store.iterator(order);
+ BasicSegment prev = null;
+ long count = 0L;
+ for (BasicSegment segment : iterable) {
+ if (prev != null) {
+ assertTrue("Incorrect iteration order at: " + count + ", prev: " + prev + ", current: " + segment, order.compare(prev, segment) <= 0);
+ }
+ prev = segment;
+ count++;
+ }
+ }
+
private static void populate(int size, int[] fuzz, ISegmentStore<@NonNull BasicSegment> store, long low, long high) {
for (long i = low; i < high; i++) {
long start = i + fuzz[(int) (i % size)];