1 /*******************************************************************************
2 * Copyright (c) 2013 École Polytechnique de Montréal
4 * All rights reserved. This program and the accompanying materials are made
5 * available under the terms of the Eclipse Public License v1.0 which
6 * accompanies this distribution, and is available at
7 * http://www.eclipse.org/legal/epl-v10.html
10 * Geneviève Bastien - Initial implementation
11 *******************************************************************************/
13 package org
.eclipse
.linuxtools
.tmf
.core
.tests
.synchronization
;
15 import static org
.junit
.Assert
.assertEquals
;
17 import org
.eclipse
.linuxtools
.tmf
.core
.event
.matching
.TmfEventDependency
;
18 import org
.eclipse
.linuxtools
.tmf
.core
.synchronization
.ITmfTimestampTransform
;
19 import org
.eclipse
.linuxtools
.tmf
.core
.synchronization
.SyncAlgorithmFullyIncremental
;
20 import org
.eclipse
.linuxtools
.tmf
.core
.synchronization
.SynchronizationAlgorithm
;
21 import org
.eclipse
.linuxtools
.tmf
.core
.synchronization
.SynchronizationAlgorithm
.SyncQuality
;
22 import org
.eclipse
.linuxtools
.tmf
.core
.synchronization
.TmfTimestampTransform
;
23 import org
.eclipse
.linuxtools
.tmf
.core
.timestamp
.TmfTimestamp
;
24 import org
.eclipse
.linuxtools
.tmf
.tests
.stubs
.event
.TmfSyncEventStub
;
25 import org
.eclipse
.linuxtools
.tmf
.tests
.stubs
.trace
.TmfTraceStub
;
26 import org
.junit
.Before
;
27 import org
.junit
.Test
;
30 * Tests for {@link SynchronizationAlgorithm} and its descendants
32 * @author Geneviève Bastien
34 @SuppressWarnings("nls")
35 public class SyncTest
{
37 private TmfTraceStub t1
, t2
;
38 private TmfTraceStub
[] fTraces
;
41 * Initializing the traces
45 t1
= new TmfTraceStub();
47 t2
= new TmfTraceStub();
49 TmfTraceStub
[] traces
= { t1
, t2
};
54 * Testing fully incremental algorithm with communication between the two
58 public void testFullyIncremental() {
60 SynchronizationAlgorithm syncAlgo
= new SyncAlgorithmFullyIncremental();
62 syncAlgo
.init(fTraces
);
64 assertEquals(SyncQuality
.ABSENT
, syncAlgo
.getSynchronizationQuality(t1
, t2
));
66 new TmfEventDependency(new TmfSyncEventStub(t2
, new TmfTimestamp(1)),
67 new TmfSyncEventStub(t1
, new TmfTimestamp(1))
69 assertEquals("SyncAlgorithmFullyIncremental [Between t1 and t2 [ alpha 1 beta 0 ]]", syncAlgo
.toString());
70 assertEquals(SyncQuality
.INCOMPLETE
, syncAlgo
.getSynchronizationQuality(t1
, t2
));
73 new TmfEventDependency(new TmfSyncEventStub(t1
, new TmfTimestamp(1)),
74 new TmfSyncEventStub(t2
, new TmfTimestamp(3))
76 assertEquals("SyncAlgorithmFullyIncremental [Between t1 and t2 [ alpha 1 beta 0 ]]", syncAlgo
.toString());
77 assertEquals(SyncQuality
.INCOMPLETE
, syncAlgo
.getSynchronizationQuality(t1
, t2
));
80 new TmfEventDependency(new TmfSyncEventStub(t2
, new TmfTimestamp(2)),
81 new TmfSyncEventStub(t1
, new TmfTimestamp(3))
83 assertEquals("SyncAlgorithmFullyIncremental [Between t1 and t2 [ alpha 1 beta 0.5 ]]", syncAlgo
.toString());
84 assertEquals(SyncQuality
.APPROXIMATE
, syncAlgo
.getSynchronizationQuality(t1
, t2
));
87 new TmfEventDependency(new TmfSyncEventStub(t1
, new TmfTimestamp(3)),
88 new TmfSyncEventStub(t2
, new TmfTimestamp(5))
90 assertEquals("SyncAlgorithmFullyIncremental [Between t1 and t2 [ alpha 0.75 beta 1.25 ]]", syncAlgo
.toString());
91 assertEquals(SyncQuality
.ACCURATE
, syncAlgo
.getSynchronizationQuality(t1
, t2
));
94 new TmfEventDependency(new TmfSyncEventStub(t1
, new TmfTimestamp(4)),
95 new TmfSyncEventStub(t2
, new TmfTimestamp(8))
97 assertEquals("SyncAlgorithmFullyIncremental [Between t1 and t2 [ alpha 0.75 beta 1.25 ]]", syncAlgo
.toString());
98 assertEquals(SyncQuality
.ACCURATE
, syncAlgo
.getSynchronizationQuality(t1
, t2
));
101 new TmfEventDependency(new TmfSyncEventStub(t2
, new TmfTimestamp(4)),
102 new TmfSyncEventStub(t1
, new TmfTimestamp(5))
104 assertEquals("SyncAlgorithmFullyIncremental [Between t1 and t2 [ alpha 1.125 beta 0.875 ]]", syncAlgo
.toString());
105 assertEquals(SyncQuality
.ACCURATE
, syncAlgo
.getSynchronizationQuality(t1
, t2
));
108 new TmfEventDependency(new TmfSyncEventStub(t2
, new TmfTimestamp(4)),
109 new TmfSyncEventStub(t1
, new TmfTimestamp(6))
111 assertEquals("SyncAlgorithmFullyIncremental [Between t1 and t2 [ alpha 1.125 beta 0.875 ]]", syncAlgo
.toString());
112 assertEquals(SyncQuality
.ACCURATE
, syncAlgo
.getSynchronizationQuality(t1
, t2
));
115 new TmfEventDependency(new TmfSyncEventStub(t1
, new TmfTimestamp(6)),
116 new TmfSyncEventStub(t2
, new TmfTimestamp(7))
118 assertEquals("SyncAlgorithmFullyIncremental [Between t1 and t2 [ alpha 0.725 beta 1.275 ]]", syncAlgo
.toString());
119 assertEquals(SyncQuality
.ACCURATE
, syncAlgo
.getSynchronizationQuality(t1
, t2
));
121 ITmfTimestampTransform tt2
= syncAlgo
.getTimestampTransform(t2
);
122 ITmfTimestampTransform tt1
= syncAlgo
.getTimestampTransform(t1
);
124 assertEquals(syncAlgo
.getTimestampTransform("t1"), tt1
);
125 assertEquals(TmfTimestampTransform
.IDENTITY
, tt1
);
126 assertEquals(syncAlgo
.getTimestampTransform("t2"), tt2
);
128 /* Make the two hulls intersect */
130 new TmfEventDependency(new TmfSyncEventStub(t1
, new TmfTimestamp(7)),
131 new TmfSyncEventStub(t2
, new TmfTimestamp(4))
134 new TmfEventDependency(new TmfSyncEventStub(t2
, new TmfTimestamp(7)),
135 new TmfSyncEventStub(t1
, new TmfTimestamp(3))
137 assertEquals(SyncQuality
.FAIL
, syncAlgo
.getSynchronizationQuality(t1
, t2
));
141 * Testing the fully incremental synchronization algorithm when
142 * communication goes in only one direction
145 public void testOneHull() {
147 SynchronizationAlgorithm syncAlgo
= new SyncAlgorithmFullyIncremental();
149 syncAlgo
.init(fTraces
);
151 assertEquals(SyncQuality
.ABSENT
, syncAlgo
.getSynchronizationQuality(t1
, t2
));
154 new TmfEventDependency(new TmfSyncEventStub(t1
, new TmfTimestamp(1)),
155 new TmfSyncEventStub(t2
, new TmfTimestamp(3)))
157 assertEquals(SyncQuality
.INCOMPLETE
, syncAlgo
.getSynchronizationQuality(t1
, t2
));
160 new TmfEventDependency(new TmfSyncEventStub(t1
, new TmfTimestamp(2)),
161 new TmfSyncEventStub(t2
, new TmfTimestamp(5)))
164 assertEquals(SyncQuality
.INCOMPLETE
, syncAlgo
.getSynchronizationQuality(t1
, t2
));
167 new TmfEventDependency(new TmfSyncEventStub(t1
, new TmfTimestamp(3)),
168 new TmfSyncEventStub(t2
, new TmfTimestamp(5)))
170 assertEquals(SyncQuality
.INCOMPLETE
, syncAlgo
.getSynchronizationQuality(t1
, t2
));
173 new TmfEventDependency(new TmfSyncEventStub(t1
, new TmfTimestamp(4)),
174 new TmfSyncEventStub(t2
, new TmfTimestamp(7)))
176 assertEquals(SyncQuality
.INCOMPLETE
, syncAlgo
.getSynchronizationQuality(t1
, t2
));
177 assertEquals("SyncAlgorithmFullyIncremental [Between t1 and t2 [ alpha 1 beta 0 ]]", syncAlgo
.toString());
182 * Testing the fully incremental synchronization algorithm when all
183 * communication from trace1 to trace2 happens before all communication from
187 public void testDisjoint() {
189 SynchronizationAlgorithm syncAlgo
= new SyncAlgorithmFullyIncremental();
191 syncAlgo
.init(fTraces
);
193 assertEquals(SyncQuality
.ABSENT
, syncAlgo
.getSynchronizationQuality(t1
, t2
));
196 new TmfEventDependency(new TmfSyncEventStub(t1
, new TmfTimestamp(1)),
197 new TmfSyncEventStub(t2
, new TmfTimestamp(3)))
199 assertEquals(SyncQuality
.INCOMPLETE
, syncAlgo
.getSynchronizationQuality(t1
, t2
));
202 new TmfEventDependency(new TmfSyncEventStub(t1
, new TmfTimestamp(2)),
203 new TmfSyncEventStub(t2
, new TmfTimestamp(5)))
206 assertEquals(SyncQuality
.INCOMPLETE
, syncAlgo
.getSynchronizationQuality(t1
, t2
));
209 new TmfEventDependency(new TmfSyncEventStub(t1
, new TmfTimestamp(3)),
210 new TmfSyncEventStub(t2
, new TmfTimestamp(5)))
212 assertEquals(SyncQuality
.INCOMPLETE
, syncAlgo
.getSynchronizationQuality(t1
, t2
));
215 new TmfEventDependency(new TmfSyncEventStub(t1
, new TmfTimestamp(4)),
216 new TmfSyncEventStub(t2
, new TmfTimestamp(7)))
218 assertEquals(SyncQuality
.INCOMPLETE
, syncAlgo
.getSynchronizationQuality(t1
, t2
));
219 assertEquals("SyncAlgorithmFullyIncremental [Between t1 and t2 [ alpha 1 beta 0 ]]", syncAlgo
.toString());
222 new TmfEventDependency(new TmfSyncEventStub(t2
, new TmfTimestamp(7)),
223 new TmfSyncEventStub(t1
, new TmfTimestamp(6)))
225 assertEquals(SyncQuality
.APPROXIMATE
, syncAlgo
.getSynchronizationQuality(t1
, t2
));
228 new TmfEventDependency(new TmfSyncEventStub(t2
, new TmfTimestamp(8)),
229 new TmfSyncEventStub(t1
, new TmfTimestamp(6)))
231 assertEquals(SyncQuality
.APPROXIMATE
, syncAlgo
.getSynchronizationQuality(t1
, t2
));
234 new TmfEventDependency(new TmfSyncEventStub(t2
, new TmfTimestamp(10)),
235 new TmfSyncEventStub(t1
, new TmfTimestamp(8)))
237 assertEquals(SyncQuality
.APPROXIMATE
, syncAlgo
.getSynchronizationQuality(t1
, t2
));
238 assertEquals("SyncAlgorithmFullyIncremental [Between t1 and t2 [ alpha 1 beta 2.5 ]]", syncAlgo
.toString());