analysis: Add JUnits for control flow entry comparators
[deliverable/tracecompass.git] / analysis / org.eclipse.tracecompass.analysis.os.linux.ui.tests / src / org / eclipse / tracecompass / analysis / os / linux / ui / tests / view / controlflow / ControlFlowEntryComparatorTest.java
diff --git a/analysis/org.eclipse.tracecompass.analysis.os.linux.ui.tests/src/org/eclipse/tracecompass/analysis/os/linux/ui/tests/view/controlflow/ControlFlowEntryComparatorTest.java b/analysis/org.eclipse.tracecompass.analysis.os.linux.ui.tests/src/org/eclipse/tracecompass/analysis/os/linux/ui/tests/view/controlflow/ControlFlowEntryComparatorTest.java
new file mode 100644 (file)
index 0000000..2708498
--- /dev/null
@@ -0,0 +1,442 @@
+/*******************************************************************************
+ * Copyright (c) 2016 Ericsson
+ *
+ * All rights reserved. This program and the accompanying materials are
+ * made available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *******************************************************************************/
+
+package org.eclipse.tracecompass.analysis.os.linux.ui.tests.view.controlflow;
+
+import static org.eclipse.tracecompass.common.core.NonNullUtils.checkNotNull;
+import static org.junit.Assert.assertEquals;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.swt.SWT;
+import org.eclipse.tracecompass.analysis.os.linux.ui.views.controlflow.ControlFlowEntry;
+import org.eclipse.tracecompass.internal.analysis.os.linux.ui.views.controlflow.ControlFlowColumnComparators;
+import org.eclipse.tracecompass.internal.analysis.os.linux.ui.views.controlflow.IControlFlowEntryComparator;
+import org.eclipse.tracecompass.testtraces.ctf.CtfTestTrace;
+import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
+import org.eclipse.tracecompass.tmf.ctf.core.tests.shared.CtfTmfTestTraceUtils;
+import org.eclipse.tracecompass.tmf.ui.views.timegraph.ITimeGraphEntryComparator;
+import org.eclipse.tracecompass.tmf.ui.widgets.timegraph.model.ITimeGraphEntry;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+/**
+ * Test cases for verifying the ControlFlowEntry comparators used in the Control Flow  View.
+ *
+ * @author Bernd Hufmann
+ *
+ */
+public class ControlFlowEntryComparatorTest {
+
+    private static final @NonNull CtfTestTrace TEST_TRACE1 = CtfTestTrace.SYNC_DEST;
+    private static final @NonNull CtfTestTrace TEST_TRACE2 = CtfTestTrace.SYNC_SRC;
+    private static final @NonNull CtfTestTrace TEST_TRACE3 = CtfTestTrace.DEBUG_INFO;
+
+    private static ITmfTrace TRACE1;
+    private static ITmfTrace TRACE2;
+    private static ITmfTrace TRACE3;
+
+    private static final String TRACE_EXEC_NAME1 = "AAA";
+    private static final String TRACE_EXEC_NAME2 = "BBB";
+    private static final String TRACE_EXEC_NAME3 = "CCC";
+
+    private static final int TRACE_TID1 = 1;
+    private static final int TRACE_TID2 = 2;
+    private static final int TRACE_TID3 = 3;
+
+    private static final int TRACE_PTID1 = 1;
+    private static final int TRACE_PTID2 = 2;
+    private static final int TRACE_PTID3 = 3;
+
+    private static final int TRACE_START_TIME1 = 1;
+    private static final int TRACE_START_TIME2 = 2;
+    private static final int TRACE_START_TIME3 = 3;
+
+    private static final int TRACE_END_TIME1 = 4;
+
+
+    /**
+     * Setup test class
+     */
+    @BeforeClass
+    public static void beforeClass() {
+        TRACE1 = CtfTmfTestTraceUtils.getTrace(TEST_TRACE1);
+        TRACE2 = CtfTmfTestTraceUtils.getTrace(TEST_TRACE2);
+        TRACE3 = CtfTmfTestTraceUtils.getTrace(TEST_TRACE3);
+    }
+
+    /**
+     * Test {@link IControlFlowEntryComparator#TRACE_COMPARATOR}
+     */
+    @Test
+    public void traceComparatorTest() {
+        ControlFlowEntry entry1 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
+        ControlFlowEntry entry2 = new ControlFlowEntry(0, checkNotNull(TRACE2), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
+        ControlFlowEntry entry3 = new ControlFlowEntry(0, checkNotNull(TRACE3), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
+        List<ControlFlowEntry> testVec = getListOfEntries(entry1, entry2, entry3);
+        List<ControlFlowEntry> expected = getListOfEntries(entry2, entry1, entry3);
+
+        Collections.sort(testVec, IControlFlowEntryComparator.TRACE_COMPARATOR);
+        assertEquals(expected, testVec);
+    }
+
+    /**
+     * Test {@link IControlFlowEntryComparator#PROCESS_NAME_COMPARATOR}
+     */
+    @Test
+    public void execNameComparatorTest() {
+        ControlFlowEntry trace1Entry1 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
+        ControlFlowEntry trace1Entry2 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME2, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
+        ControlFlowEntry trace1Entry3 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME3, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
+        List<ControlFlowEntry> testVec = getListOfEntries(trace1Entry2, trace1Entry3, trace1Entry1);
+        List<ControlFlowEntry> expected = getListOfEntries(trace1Entry1, trace1Entry2, trace1Entry3);
+
+        Collections.sort(testVec, IControlFlowEntryComparator.PROCESS_NAME_COMPARATOR);
+        assertEquals(expected, testVec);
+    }
+
+    /**
+    * Test {@link IControlFlowEntryComparator#TID_COMPARATOR}
+    */
+   @Test
+   public void tidComparatorTest() {
+       ControlFlowEntry trace1Entry1 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
+       ControlFlowEntry trace1Entry2 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID2, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
+       ControlFlowEntry trace1Entry3 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID3, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
+       List<ControlFlowEntry> testVec = getListOfEntries(trace1Entry2, trace1Entry3, trace1Entry1);
+       List<ControlFlowEntry> expected = getListOfEntries(trace1Entry1, trace1Entry2, trace1Entry3);
+
+       Collections.sort(testVec, IControlFlowEntryComparator.TID_COMPARATOR);
+       assertEquals(expected, testVec);
+   }
+
+   /**
+    * Test {@link IControlFlowEntryComparator#PTID_COMPARATOR}
+    */
+   @Test
+   public void ptidComparatorTest() {
+       ControlFlowEntry trace1Entry1 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
+       ControlFlowEntry trace1Entry2 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID2, TRACE_START_TIME1, TRACE_END_TIME1);
+       ControlFlowEntry trace1Entry3 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID3, TRACE_START_TIME1, TRACE_END_TIME1);
+       List<ControlFlowEntry> testVec = getListOfEntries(trace1Entry2, trace1Entry3, trace1Entry1);
+       List<ControlFlowEntry> expected = getListOfEntries(trace1Entry1, trace1Entry2, trace1Entry3);
+
+       Collections.sort(testVec, IControlFlowEntryComparator.PTID_COMPARATOR);
+       assertEquals(expected, testVec);
+   }
+
+   /**
+    * Test {@link IControlFlowEntryComparator#BIRTH_TIME_COMPARATOR}
+    */
+   @Test
+   public void birthTimeComparatorTest() {
+       ControlFlowEntry trace1Entry1 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
+       ControlFlowEntry trace1Entry2 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME2, TRACE_END_TIME1);
+       ControlFlowEntry trace1Entry3 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME3, TRACE_END_TIME1);
+       List<ControlFlowEntry> testVec = getListOfEntries(trace1Entry2, trace1Entry3, trace1Entry1);
+       List<ControlFlowEntry> expected = getListOfEntries(trace1Entry1, trace1Entry2, trace1Entry3);
+
+       Collections.sort(testVec, IControlFlowEntryComparator.BIRTH_TIME_COMPARATOR);
+       assertEquals(expected, testVec);
+   }
+
+   /**
+    * Test {@link ControlFlowColumnComparators#TRACE_COLUMN_COMPARATOR}
+    *
+    * Note when the trace is the same: The order that is birth time,
+    * TID  and PTID. Note that for secondary comparators the sort
+    * direction is not changed.
+    */
+   @Test
+   public void traceColumnComparatorTest() {
+       ControlFlowEntry entry1 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
+       ControlFlowEntry entry2 = new ControlFlowEntry(0, checkNotNull(TRACE2), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME2, TRACE_END_TIME1);
+       ControlFlowEntry entry3 = new ControlFlowEntry(0, checkNotNull(TRACE3), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME3, TRACE_END_TIME1);
+       List<ControlFlowEntry> testVec = getListOfEntries(entry2, entry3, entry1);
+       List<ControlFlowEntry> expectedDown = getListOfEntries(entry2, entry1, entry3);
+       List<ControlFlowEntry> expectedUp = getListOfEntries(entry3, entry1, entry2);
+       runTest(ControlFlowColumnComparators.TRACE_COLUMN_COMPARATOR, testVec, expectedDown, expectedUp);
+
+       entry1 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
+       entry2 = new ControlFlowEntry(0, checkNotNull(TRACE2), TRACE_EXEC_NAME2, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
+       entry3 = new ControlFlowEntry(0, checkNotNull(TRACE3), TRACE_EXEC_NAME3, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
+       testVec = getListOfEntries(entry2, entry3, entry1);
+       expectedDown = getListOfEntries(entry2, entry1, entry3);
+       expectedUp = getListOfEntries(entry3, entry1, entry2);
+       runTest(ControlFlowColumnComparators.TRACE_COLUMN_COMPARATOR, testVec, expectedDown, expectedUp);
+
+       entry1 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
+       entry2 = new ControlFlowEntry(0, checkNotNull(TRACE2), TRACE_EXEC_NAME1, TRACE_TID2, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
+       entry3 = new ControlFlowEntry(0, checkNotNull(TRACE3), TRACE_EXEC_NAME1, TRACE_TID3, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
+       testVec = getListOfEntries(entry2, entry3, entry1);
+       expectedDown = getListOfEntries(entry2, entry1, entry3);
+       expectedUp = getListOfEntries(entry3, entry1, entry2);
+       runTest(ControlFlowColumnComparators.TRACE_COLUMN_COMPARATOR, testVec, expectedDown, expectedUp);
+
+       entry1 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
+       entry2 = new ControlFlowEntry(0, checkNotNull(TRACE2), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID2, TRACE_START_TIME1, TRACE_END_TIME1);
+       entry3 = new ControlFlowEntry(0, checkNotNull(TRACE3), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID3, TRACE_START_TIME1, TRACE_END_TIME1);
+       testVec = getListOfEntries(entry2, entry3, entry1);
+       expectedDown = getListOfEntries(entry2, entry1, entry3);
+       expectedUp = getListOfEntries(entry3, entry1, entry2);
+       runTest(ControlFlowColumnComparators.TRACE_COLUMN_COMPARATOR, testVec, expectedDown, expectedUp);
+   }
+
+   /**
+    * Test {@link ControlFlowColumnComparators#PROCESS_NAME_COLUMN_COMPARATOR}
+    */
+   @Test
+   public void execNameColumnComparatorTest() {
+       ControlFlowEntry trace1Entry1 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
+       ControlFlowEntry trace1Entry2 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME2, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
+       ControlFlowEntry trace1Entry3 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME3, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
+
+       ControlFlowEntry trace2Entry1 = new ControlFlowEntry(0, checkNotNull(TRACE2), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
+       ControlFlowEntry trace2Entry2 = new ControlFlowEntry(0, checkNotNull(TRACE2), TRACE_EXEC_NAME2, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
+       ControlFlowEntry trace2Entry3 = new ControlFlowEntry(0, checkNotNull(TRACE2), TRACE_EXEC_NAME3, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
+
+       List<ControlFlowEntry> testVec = getListOfEntries(trace1Entry2, trace1Entry3, trace1Entry1, trace2Entry2, trace2Entry3, trace2Entry1);
+       List<ControlFlowEntry> expectedDown = getListOfEntries(trace2Entry1, trace2Entry2, trace2Entry3, trace1Entry1, trace1Entry2, trace1Entry3);
+       List<ControlFlowEntry> expectedUp = getListOfEntries(trace2Entry3, trace2Entry2, trace2Entry1, trace1Entry3, trace1Entry2, trace1Entry1);
+       runTest(ControlFlowColumnComparators.PROCESS_NAME_COLUMN_COMPARATOR, testVec, expectedDown, expectedUp);
+   }
+
+    /**
+     * Test {@link ControlFlowColumnComparators#PROCESS_NAME_COLUMN_COMPARATOR}
+     *
+     * Note, that when the exec name is the same: The order that is birth time,
+     * TID  and PTID. Note that for secondary comparators the sort direction is
+     * not changed.
+     */
+   @Test
+   public void execNameSecondaryTimeColumnComparatorTest() {
+       ControlFlowEntry trace1Entry1 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
+       ControlFlowEntry trace1Entry2 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME2, TRACE_END_TIME1);
+       ControlFlowEntry trace1Entry3 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME3, TRACE_END_TIME1);
+
+       List<ControlFlowEntry> testVec = getListOfEntries(trace1Entry2, trace1Entry3, trace1Entry1);
+       List<ControlFlowEntry> expectedDown = getListOfEntries(trace1Entry1, trace1Entry2, trace1Entry3);
+       List<ControlFlowEntry> expectedUp = getListOfEntries(trace1Entry1, trace1Entry2, trace1Entry3);
+       runTest(ControlFlowColumnComparators.PROCESS_NAME_COLUMN_COMPARATOR, testVec, expectedDown, expectedUp);
+
+       trace1Entry1 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
+       trace1Entry2 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID2, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
+       trace1Entry3 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID3, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
+
+       testVec = getListOfEntries(trace1Entry2, trace1Entry3, trace1Entry1);
+       expectedDown = getListOfEntries(trace1Entry1, trace1Entry2, trace1Entry3);
+       expectedUp = getListOfEntries(trace1Entry1, trace1Entry2, trace1Entry3);
+       runTest(ControlFlowColumnComparators.PROCESS_NAME_COLUMN_COMPARATOR, testVec, expectedDown, expectedUp);
+
+       trace1Entry1 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
+       trace1Entry2 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID2, TRACE_START_TIME1, TRACE_END_TIME1);
+       trace1Entry3 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID3, TRACE_START_TIME1, TRACE_END_TIME1);
+
+       testVec = getListOfEntries(trace1Entry2, trace1Entry3, trace1Entry1);
+       expectedDown = getListOfEntries(trace1Entry1, trace1Entry2, trace1Entry3);
+       expectedUp = getListOfEntries(trace1Entry1, trace1Entry2, trace1Entry3);
+       runTest(ControlFlowColumnComparators.PROCESS_NAME_COLUMN_COMPARATOR, testVec, expectedDown, expectedUp);
+   }
+
+   /**
+    * Test {@link ControlFlowColumnComparators#TID_COLUMN_COMPARATOR}
+    */
+   @Test
+   public void tidColumnComparatorTest() {
+       ControlFlowEntry trace1Entry1 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
+       ControlFlowEntry trace1Entry2 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID2, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
+       ControlFlowEntry trace1Entry3 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID3, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
+
+       ControlFlowEntry trace2Entry1 = new ControlFlowEntry(0, checkNotNull(TRACE2), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
+       ControlFlowEntry trace2Entry2 = new ControlFlowEntry(0, checkNotNull(TRACE2), TRACE_EXEC_NAME1, TRACE_TID2, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
+       ControlFlowEntry trace2Entry3 = new ControlFlowEntry(0, checkNotNull(TRACE2), TRACE_EXEC_NAME1, TRACE_TID3, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
+
+       List<ControlFlowEntry> testVec = getListOfEntries(trace1Entry2, trace1Entry3, trace1Entry1, trace2Entry2, trace2Entry3, trace2Entry1);
+       List<ControlFlowEntry> expectedDown = getListOfEntries(trace2Entry1, trace2Entry2, trace2Entry3, trace1Entry1, trace1Entry2, trace1Entry3);
+       List<ControlFlowEntry> expectedUp = getListOfEntries(trace2Entry3, trace2Entry2, trace2Entry1, trace1Entry3, trace1Entry2, trace1Entry1);
+       runTest(ControlFlowColumnComparators.TID_COLUMN_COMPARATOR, testVec, expectedDown, expectedUp);
+   }
+
+    /**
+     * Test {@link ControlFlowColumnComparators#TID_COLUMN_COMPARATOR}
+     *
+     * Note, that when TID is the same: The order for for that is birth
+     * time, process name and PTID. Note that for secondary comparators the
+     * sort direction is not changed.
+     */
+   @Test
+   public void tidSecondaryTimeColumnComparatorTest() {
+
+       ControlFlowEntry trace1Entry1 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
+       ControlFlowEntry trace1Entry2 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME2, TRACE_END_TIME1);
+       ControlFlowEntry trace1Entry3 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME3, TRACE_END_TIME1);
+
+       List<ControlFlowEntry> testVec = getListOfEntries(trace1Entry2, trace1Entry3, trace1Entry1);
+       List<ControlFlowEntry> expectedDown = getListOfEntries(trace1Entry1, trace1Entry2, trace1Entry3);
+       List<ControlFlowEntry> expectedUp = getListOfEntries(trace1Entry1, trace1Entry2, trace1Entry3);
+       runTest(ControlFlowColumnComparators.TID_COLUMN_COMPARATOR, testVec, expectedDown, expectedUp);
+
+       trace1Entry1 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
+       trace1Entry2 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME2, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
+       trace1Entry3 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME3, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
+
+       testVec = getListOfEntries(trace1Entry2, trace1Entry3, trace1Entry1);
+       expectedDown = getListOfEntries(trace1Entry1, trace1Entry2, trace1Entry3);
+       expectedUp = getListOfEntries(trace1Entry1, trace1Entry2, trace1Entry3);
+       runTest(ControlFlowColumnComparators.TID_COLUMN_COMPARATOR, testVec, expectedDown, expectedUp);
+
+       trace1Entry1 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
+       trace1Entry2 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID2, TRACE_START_TIME1, TRACE_END_TIME1);
+       trace1Entry3 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID3, TRACE_START_TIME1, TRACE_END_TIME1);
+
+       testVec = getListOfEntries(trace1Entry2, trace1Entry3, trace1Entry1);
+       expectedDown = getListOfEntries(trace1Entry1, trace1Entry2, trace1Entry3);
+       expectedUp = getListOfEntries(trace1Entry1, trace1Entry2, trace1Entry3);
+       runTest(ControlFlowColumnComparators.TID_COLUMN_COMPARATOR, testVec, expectedDown, expectedUp);
+   }
+
+   /**
+    * Test {@link ControlFlowColumnComparators#PTID_COLUMN_COMPARATOR}
+    */
+   @Test
+   public void ptidColumnComparatorTest() {
+       ControlFlowEntry trace1Entry1 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
+       ControlFlowEntry trace1Entry2 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID2, TRACE_START_TIME1, TRACE_END_TIME1);
+       ControlFlowEntry trace1Entry3 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID3, TRACE_START_TIME1, TRACE_END_TIME1);
+
+       ControlFlowEntry trace2Entry1 = new ControlFlowEntry(0, checkNotNull(TRACE2), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
+       ControlFlowEntry trace2Entry2 = new ControlFlowEntry(0, checkNotNull(TRACE2), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID2, TRACE_START_TIME1, TRACE_END_TIME1);
+       ControlFlowEntry trace2Entry3 = new ControlFlowEntry(0, checkNotNull(TRACE2), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID3, TRACE_START_TIME1, TRACE_END_TIME1);
+
+       List<ControlFlowEntry> testVec = getListOfEntries(trace1Entry2, trace1Entry3, trace1Entry1, trace2Entry2, trace2Entry3, trace2Entry1);
+       List<ControlFlowEntry> expectedDown = getListOfEntries(trace2Entry1, trace2Entry2, trace2Entry3, trace1Entry1, trace1Entry2, trace1Entry3);
+       List<ControlFlowEntry> expectedUp = getListOfEntries(trace2Entry3, trace2Entry2, trace2Entry1, trace1Entry3, trace1Entry2, trace1Entry1);
+       runTest(ControlFlowColumnComparators.PTID_COLUMN_COMPARATOR, testVec, expectedDown, expectedUp);
+   }
+
+    /**
+     * Test {@link ControlFlowColumnComparators#PTID_COLUMN_COMPARATOR}
+     *
+     * Note, that when PTID is the same: The order for that is birth time,
+     * process name and ptid. Note that for secondary comparators the sort
+     * direction is not changed.
+     */
+   @Test
+   public void ptidSecondaryTimeColumnComparatorTest() {
+       ControlFlowEntry trace1Entry1 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
+       ControlFlowEntry trace1Entry2 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME2, TRACE_END_TIME1);
+       ControlFlowEntry trace1Entry3 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME3, TRACE_END_TIME1);
+
+       List<ControlFlowEntry> testVec = getListOfEntries(trace1Entry2, trace1Entry3, trace1Entry1);
+       List<ControlFlowEntry> expectedDown = getListOfEntries(trace1Entry1, trace1Entry2, trace1Entry3);
+       List<ControlFlowEntry> expectedUp = getListOfEntries(trace1Entry1, trace1Entry2, trace1Entry3);
+       runTest(ControlFlowColumnComparators.PTID_COLUMN_COMPARATOR, testVec, expectedDown, expectedUp);
+
+       trace1Entry1 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
+       trace1Entry2 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME2, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
+       trace1Entry3 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME3, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
+
+       testVec = getListOfEntries(trace1Entry2, trace1Entry3, trace1Entry1);
+       expectedDown = getListOfEntries(trace1Entry1, trace1Entry2, trace1Entry3);
+       expectedUp = getListOfEntries(trace1Entry1, trace1Entry2, trace1Entry3);
+       runTest(ControlFlowColumnComparators.PTID_COLUMN_COMPARATOR, testVec, expectedDown, expectedUp);
+
+       trace1Entry1 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
+       trace1Entry2 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID2, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
+       trace1Entry3 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID3, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
+
+       testVec = getListOfEntries(trace1Entry2, trace1Entry3, trace1Entry1);
+       expectedDown = getListOfEntries(trace1Entry1, trace1Entry2, trace1Entry3);
+       expectedUp = getListOfEntries(trace1Entry1, trace1Entry2, trace1Entry3);
+       runTest(ControlFlowColumnComparators.PTID_COLUMN_COMPARATOR, testVec, expectedDown, expectedUp);
+   }
+
+   /**
+    * Test {@link ControlFlowColumnComparators#BIRTH_TIME_COLUMN_COMPARATOR}
+    */
+   @Test
+   public void birthTimeColumnComparatorTest() {
+       ControlFlowEntry trace1Entry1 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
+       ControlFlowEntry trace1Entry2 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME2, TRACE_END_TIME1);
+       ControlFlowEntry trace1Entry3 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME3, TRACE_END_TIME1);
+
+       ControlFlowEntry trace2Entry1 = new ControlFlowEntry(0, checkNotNull(TRACE2), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
+       ControlFlowEntry trace2Entry2 = new ControlFlowEntry(0, checkNotNull(TRACE2), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME2, TRACE_END_TIME1);
+       ControlFlowEntry trace2Entry3 = new ControlFlowEntry(0, checkNotNull(TRACE2), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME3, TRACE_END_TIME1);
+
+       List<ControlFlowEntry> testVec = getListOfEntries(trace1Entry2, trace1Entry3, trace1Entry1, trace2Entry2, trace2Entry3, trace2Entry1);
+       List<ControlFlowEntry> expectedDown = getListOfEntries(trace2Entry1, trace2Entry2, trace2Entry3, trace1Entry1, trace1Entry2, trace1Entry3);
+       List<ControlFlowEntry> expectedUp = getListOfEntries(trace2Entry3, trace2Entry2, trace2Entry1, trace1Entry3, trace1Entry2, trace1Entry1);
+       runTest(ControlFlowColumnComparators.BIRTH_TIME_COLUMN_COMPARATOR, testVec, expectedDown, expectedUp);
+   }
+
+    /**
+     * Test {@link ControlFlowColumnComparators#BIRTH_TIME_COLUMN_COMPARATOR}
+     *
+     * Note, taht when when birth time is the same: The order for that is
+     * process name, tid and ptid. Note that for secondary comparators the
+     * sort direction is not changed.
+     */
+   @Test
+   public void birthTimeSecondaryTimeColumnComparatorTest() {
+       ControlFlowEntry trace1Entry1 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
+       ControlFlowEntry trace1Entry2 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME2, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
+       ControlFlowEntry trace1Entry3 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME3, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
+
+       List<ControlFlowEntry> testVec = getListOfEntries(trace1Entry2, trace1Entry3, trace1Entry1);
+       List<ControlFlowEntry> expectedDown = getListOfEntries(trace1Entry1, trace1Entry2, trace1Entry3);
+       List<ControlFlowEntry> expectedUp = getListOfEntries(trace1Entry1, trace1Entry2, trace1Entry3);
+       runTest(ControlFlowColumnComparators.BIRTH_TIME_COLUMN_COMPARATOR, testVec, expectedDown, expectedUp);
+
+       trace1Entry1 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
+       trace1Entry2 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID2, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
+       trace1Entry3 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID2, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
+
+       testVec = getListOfEntries(trace1Entry2, trace1Entry3, trace1Entry1);
+       expectedDown = getListOfEntries(trace1Entry1, trace1Entry2, trace1Entry3);
+       expectedUp = getListOfEntries(trace1Entry1, trace1Entry2, trace1Entry3);
+       runTest(ControlFlowColumnComparators.BIRTH_TIME_COLUMN_COMPARATOR, testVec, expectedDown, expectedUp);
+
+       trace1Entry1 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID1, TRACE_START_TIME1, TRACE_END_TIME1);
+       trace1Entry2 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID2, TRACE_START_TIME1, TRACE_END_TIME1);
+       trace1Entry3 = new ControlFlowEntry(0, checkNotNull(TRACE1), TRACE_EXEC_NAME1, TRACE_TID1, TRACE_PTID3, TRACE_START_TIME1, TRACE_END_TIME1);
+
+       testVec = getListOfEntries(trace1Entry2, trace1Entry3, trace1Entry1);
+       expectedDown = getListOfEntries(trace1Entry1, trace1Entry2, trace1Entry3);
+       expectedUp = getListOfEntries(trace1Entry1, trace1Entry2, trace1Entry3);
+       runTest(ControlFlowColumnComparators.BIRTH_TIME_COLUMN_COMPARATOR, testVec, expectedDown, expectedUp);
+
+   }
+
+   private static void runTest(ITimeGraphEntryComparator comparator, List<ControlFlowEntry> testVec, List<ControlFlowEntry> expectedDown, List<ControlFlowEntry> expectedUp) {
+       comparator.setDirection(SWT.DOWN);
+       Collections.sort(testVec, comparator);
+       assertEquals(expectedDown, testVec);
+
+       comparator.setDirection(SWT.UP);
+       Comparator<ITimeGraphEntry> reverseComp = comparator;
+       reverseComp = Collections.reverseOrder(reverseComp);
+       Collections.sort(testVec, reverseComp);
+       assertEquals(expectedUp, testVec);
+   }
+
+    private static List<ControlFlowEntry> getListOfEntries(ControlFlowEntry... entries) {
+        List<ControlFlowEntry> retList = new ArrayList<>();
+        for (ControlFlowEntry entry : entries) {
+            retList.add(entry);
+        }
+        return retList;
+    }
+
+
+}
This page took 0.028437 seconds and 5 git commands to generate.