segmentstore: fix incorrect iteration order in segment history
[deliverable/tracecompass.git] / statesystem / org.eclipse.tracecompass.segmentstore.core.tests / perf / org / eclipse / tracecompass / segmentstore / core / tests / perf / SegmentStoreBenchmark.java
index 6930b9d4093c04b5c153243700f4eb52b66f7d6f..5892d0fb9315b5a10bc77c37ad45d4b979ea5490 100644 (file)
@@ -10,6 +10,7 @@
 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;
@@ -188,6 +189,17 @@ public class SegmentStoreBenchmark {
             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();
@@ -259,6 +271,19 @@ public class SegmentStoreBenchmark {
         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)];
This page took 0.02439 seconds and 5 git commands to generate.