blob: 8bf52a3ad121c993f8f0c3ede7863520b2fa503b [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2009, 2014 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
*
* Contributors:
* Francois Chouinard - Initial API and implementation
* Francois Chouinard - Adjusted for new Event Model
* Alexandre Montplaisir - Port to JUnit4
*******************************************************************************/
package org.eclipse.tracecompass.tmf.core.tests.event;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import org.eclipse.tracecompass.tmf.core.timestamp.ITmfTimestamp;
import org.eclipse.tracecompass.tmf.core.timestamp.TmfTimeRange;
import org.eclipse.tracecompass.tmf.core.timestamp.TmfTimestamp;
import org.junit.Test;
/**
* Test suite for the TmfTimeRange class.
*/
@SuppressWarnings("javadoc")
public class TmfTimeRangeTest {
// ------------------------------------------------------------------------
// Constructors
// ------------------------------------------------------------------------
@Test
public void testConstructor() {
final ITmfTimestamp ts1 = new TmfTimestamp(12345);
final ITmfTimestamp ts2 = new TmfTimestamp(12350);
final TmfTimeRange range = new TmfTimeRange(ts1, ts2);
assertEquals("startTime", ts1, range.getStartTime());
assertEquals("endTime", ts2, range.getEndTime());
}
@Test
public void testBadConstructor() {
try {
new TmfTimeRange(TmfTimestamp.BIG_BANG, null);
fail("TmfTimeRange: bad end time");
} catch (final IllegalArgumentException e) {
// Success
}
try {
new TmfTimeRange(null, TmfTimestamp.BIG_CRUNCH);
fail("TmfTimeRange: bad start time");
} catch (final IllegalArgumentException e) {
// Success
}
}
@Test
public void testOpenRange1() {
final ITmfTimestamp ts2 = new TmfTimestamp(12350);
final TmfTimeRange range = new TmfTimeRange(TmfTimestamp.BIG_BANG, ts2);
assertEquals("startTime", TmfTimestamp.BIG_BANG, range.getStartTime());
assertEquals("endTime", ts2, range.getEndTime());
}
@Test
public void testOpenRange2() {
final ITmfTimestamp ts1 = new TmfTimestamp(12345);
final TmfTimeRange range = new TmfTimeRange(ts1, TmfTimestamp.BIG_CRUNCH);
assertEquals("startTime", ts1, range.getStartTime());
assertEquals("endTime", TmfTimestamp.BIG_CRUNCH, range.getEndTime());
}
@Test
public void testOpenRange3() {
final TmfTimeRange range = new TmfTimeRange(TmfTimestamp.BIG_BANG, TmfTimestamp.BIG_CRUNCH);
assertEquals("startTime", TmfTimestamp.BIG_BANG, range.getStartTime());
assertEquals("endTime", TmfTimestamp.BIG_CRUNCH, range.getEndTime());
}
@Test
public void testCopyConstructor() {
final ITmfTimestamp ts1 = new TmfTimestamp(12345);
final ITmfTimestamp ts2 = new TmfTimestamp(12350);
final TmfTimeRange range0 = new TmfTimeRange(ts1, ts2);
final TmfTimeRange range1 = new TmfTimeRange(range0);
assertEquals("startTime", ts1, range1.getStartTime());
assertEquals("endTime", ts2, range1.getEndTime());
final TmfTimeRange range2 = new TmfTimeRange(TmfTimestamp.BIG_BANG, TmfTimestamp.BIG_CRUNCH);
final TmfTimeRange range3 = new TmfTimeRange(range2);
assertEquals("startTime", TmfTimestamp.BIG_BANG, range3.getStartTime());
assertEquals("endTime", TmfTimestamp.BIG_CRUNCH, range3.getEndTime());
}
@Test
public void testCopyConstructor2() {
try {
new TmfTimeRange(null);
fail("TmfTimeRange: null argument");
} catch (final IllegalArgumentException e) {
// Success
}
}
// ------------------------------------------------------------------------
// hashCode
// ------------------------------------------------------------------------
@Test
public void testHashCode() {
final ITmfTimestamp ts1 = new TmfTimestamp(12345);
final ITmfTimestamp ts2 = new TmfTimestamp(12350);
final TmfTimeRange range1 = new TmfTimeRange(ts1, ts2);
final TmfTimeRange range1b = new TmfTimeRange(range1);
final TmfTimeRange range2 = new TmfTimeRange(TmfTimestamp.BIG_BANG, TmfTimestamp.BIG_CRUNCH);
final TmfTimeRange range2b = new TmfTimeRange(range2);
assertTrue("hashCode", range1.hashCode() == range1b.hashCode());
assertTrue("hashCode", range2.hashCode() == range2b.hashCode());
assertTrue("hashCode", range1.hashCode() != range2.hashCode());
}
// ------------------------------------------------------------------------
// equals
// ------------------------------------------------------------------------
@Test
public void testEqualsReflexivity() {
final ITmfTimestamp ts1 = new TmfTimestamp(12345);
final ITmfTimestamp ts2 = new TmfTimestamp(12350);
final TmfTimeRange range1 = new TmfTimeRange(ts1, ts2);
final TmfTimeRange range2 = new TmfTimeRange(TmfTimestamp.BIG_BANG, TmfTimestamp.BIG_CRUNCH);
assertTrue("equals", range1.equals(range1));
assertTrue("equals", range2.equals(range2));
assertTrue("equals", !range1.equals(range2));
assertTrue("equals", !range2.equals(range1));
}
@Test
public void testEqualsSymmetry() {
final ITmfTimestamp ts1 = new TmfTimestamp(12345);
final ITmfTimestamp ts2 = new TmfTimestamp(12350);
final TmfTimeRange range1a = new TmfTimeRange(ts1, ts2);
final TmfTimeRange range1b = new TmfTimeRange(ts1, ts2);
final TmfTimeRange range2a = new TmfTimeRange(TmfTimestamp.BIG_BANG, TmfTimestamp.BIG_CRUNCH);
final TmfTimeRange range2b = new TmfTimeRange(TmfTimestamp.BIG_BANG, TmfTimestamp.BIG_CRUNCH);
assertTrue("equals", range1a.equals(range1b));
assertTrue("equals", range1b.equals(range1a));
assertTrue("equals", range2a.equals(range2b));
assertTrue("equals", range2b.equals(range2a));
}
@Test
public void testEqualsTransivity() {
final ITmfTimestamp ts1 = new TmfTimestamp(12345);
final ITmfTimestamp ts2 = new TmfTimestamp(12350);
final TmfTimeRange range1a = new TmfTimeRange(ts1, ts2);
final TmfTimeRange range1b = new TmfTimeRange(ts1, ts2);
final TmfTimeRange range1c = new TmfTimeRange(ts1, ts2);
assertTrue("equals", range1a.equals(range1b));
assertTrue("equals", range1b.equals(range1c));
assertTrue("equals", range1a.equals(range1c));
}
@Test
public void testEqualsNull() {
final ITmfTimestamp ts1 = new TmfTimestamp(12345);
final ITmfTimestamp ts2 = new TmfTimestamp(12350);
final TmfTimeRange range1 = new TmfTimeRange(ts1, ts2);
assertTrue("equals", !range1.equals(null));
}
@Test
public void testEqualsBadType() {
final ITmfTimestamp ts1 = new TmfTimestamp(12345);
final ITmfTimestamp ts2 = new TmfTimestamp(12350);
final TmfTimeRange range1 = new TmfTimeRange(ts1, ts2);
assertTrue("equals", !range1.equals(ts1));
}
@Test
public void testEqualStartTime() {
final ITmfTimestamp ts1 = new TmfTimestamp(12345);
final ITmfTimestamp ts2 = new TmfTimestamp(12350);
final ITmfTimestamp ts3 = new TmfTimestamp(12355);
final TmfTimeRange range1 = new TmfTimeRange(ts1, ts3);
final TmfTimeRange range2 = new TmfTimeRange(ts2, ts3);
final TmfTimeRange range3 = new TmfTimeRange(ts1, ts2);
assertTrue("equals", !range1.equals(range2));
assertTrue("equals", !range1.equals(range3));
}
@Test
public void testEqualsEndTime() {
final ITmfTimestamp ts1 = new TmfTimestamp(12345);
final ITmfTimestamp ts2 = new TmfTimestamp(12350);
final ITmfTimestamp ts3 = new TmfTimestamp(12355);
final TmfTimeRange range1 = new TmfTimeRange(ts1, ts2);
final TmfTimeRange range2 = new TmfTimeRange(ts1, ts3);
final TmfTimeRange range3 = new TmfTimeRange(ts2, ts3);
assertTrue("equals", !range1.equals(range2));
assertTrue("equals", !range1.equals(range3));
}
// ------------------------------------------------------------------------
// toString
// ------------------------------------------------------------------------
@Test
public void testToString() {
final ITmfTimestamp ts1 = new TmfTimestamp(12345);
final ITmfTimestamp ts2 = new TmfTimestamp(12350);
final TmfTimeRange range = new TmfTimeRange(ts1, ts2);
final String expected = "TmfTimeRange [fStartTime=" + ts1 + ", fEndTime=" + ts2 + "]";
assertEquals("toString", expected, range.toString());
}
// ------------------------------------------------------------------------
// contains
// ------------------------------------------------------------------------
@Test
public void testContainsTimestamp() {
final ITmfTimestamp ts1 = new TmfTimestamp(12345);
final ITmfTimestamp ts2 = new TmfTimestamp(12350);
final TmfTimeRange range = new TmfTimeRange(ts1, ts2);
assertTrue("contains (lower bound)", range.contains(new TmfTimestamp(12345)));
assertTrue("contains (higher bound)", range.contains(new TmfTimestamp(12350)));
assertTrue("contains (within bounds)", range.contains(new TmfTimestamp(12346)));
assertFalse("contains (low value)", range.contains(new TmfTimestamp(12340)));
assertFalse("contains (high value)", range.contains(new TmfTimestamp(12351)));
}
@Test
public void testContainsRange() {
final ITmfTimestamp ts1 = new TmfTimestamp(10);
final ITmfTimestamp ts2 = new TmfTimestamp(20);
final ITmfTimestamp ts3 = new TmfTimestamp(30);
final ITmfTimestamp ts4 = new TmfTimestamp(40);
final ITmfTimestamp ts5 = new TmfTimestamp(50);
final ITmfTimestamp ts6 = new TmfTimestamp(60);
final ITmfTimestamp ts7 = new TmfTimestamp(70);
final ITmfTimestamp ts8 = new TmfTimestamp(80);
// Reference range
final TmfTimeRange range0 = new TmfTimeRange(ts3, ts6);
// Start time below range
final TmfTimeRange range1 = new TmfTimeRange(ts1, ts2);
final TmfTimeRange range2 = new TmfTimeRange(ts2, ts3);
final TmfTimeRange range3 = new TmfTimeRange(ts2, ts4);
final TmfTimeRange range4 = new TmfTimeRange(ts2, ts6);
final TmfTimeRange range5 = new TmfTimeRange(ts2, ts7);
assertFalse("contains", range0.contains(range1));
assertFalse("contains", range0.contains(range2));
assertFalse("contains", range0.contains(range3));
assertFalse("contains", range0.contains(range4));
assertFalse("contains", range0.contains(range5));
// End time above range
final TmfTimeRange range6 = new TmfTimeRange(ts3, ts7);
final TmfTimeRange range7 = new TmfTimeRange(ts4, ts7);
final TmfTimeRange range8 = new TmfTimeRange(ts6, ts7);
final TmfTimeRange range9 = new TmfTimeRange(ts7, ts8);
assertFalse("contains", range0.contains(range6));
assertFalse("contains", range0.contains(range7));
assertFalse("contains", range0.contains(range8));
assertFalse("contains", range0.contains(range9));
// Within range
final TmfTimeRange range10 = new TmfTimeRange(ts3, ts4);
final TmfTimeRange range11 = new TmfTimeRange(ts3, ts6);
final TmfTimeRange range12 = new TmfTimeRange(ts4, ts5);
final TmfTimeRange range13 = new TmfTimeRange(ts4, ts6);
assertTrue("contains", range0.contains(range10));
assertTrue("contains", range0.contains(range11));
assertTrue("contains", range0.contains(range12));
assertTrue("contains", range0.contains(range13));
}
// ------------------------------------------------------------------------
// getIntersection
// ------------------------------------------------------------------------
@Test
public void testGetIntersection() {
final ITmfTimestamp ts1a = new TmfTimestamp(1000);
final ITmfTimestamp ts1b = new TmfTimestamp(2000);
final TmfTimeRange range1 = new TmfTimeRange(ts1a, ts1b);
final ITmfTimestamp ts2a = new TmfTimestamp(2000);
final ITmfTimestamp ts2b = new TmfTimestamp(3000);
final TmfTimeRange range2 = new TmfTimeRange(ts2a, ts2b);
final ITmfTimestamp ts3a = new TmfTimestamp(3000);
final ITmfTimestamp ts3b = new TmfTimestamp(4000);
final TmfTimeRange range3 = new TmfTimeRange(ts3a, ts3b);
final ITmfTimestamp ts4a = new TmfTimestamp(1500);
final ITmfTimestamp ts4b = new TmfTimestamp(2500);
final TmfTimeRange range4 = new TmfTimeRange(ts4a, ts4b);
final ITmfTimestamp ts5a = new TmfTimestamp(1500);
final ITmfTimestamp ts5b = new TmfTimestamp(2000);
final TmfTimeRange range5 = new TmfTimeRange(ts5a, ts5b);
final ITmfTimestamp ts6a = new TmfTimestamp(2000);
final ITmfTimestamp ts6b = new TmfTimestamp(2500);
final TmfTimeRange range6 = new TmfTimeRange(ts6a, ts6b);
final ITmfTimestamp ts7a = new TmfTimestamp(1500);
final ITmfTimestamp ts7b = new TmfTimestamp(3500);
final TmfTimeRange range7 = new TmfTimeRange(ts7a, ts7b);
final ITmfTimestamp ts8a = new TmfTimestamp(2250);
final ITmfTimestamp ts8b = new TmfTimestamp(2750);
final TmfTimeRange range8 = new TmfTimeRange(ts8a, ts8b);
assertEquals("getIntersection (below - not contiguous)", null, range1.getIntersection(range3));
assertEquals("getIntersection (above - not contiguous)", null, range3.getIntersection(range1));
assertEquals("getIntersection (below - contiguous)", new TmfTimeRange(ts1b, ts1b), range1.getIntersection(range2));
assertEquals("getIntersection (above - contiguous)", new TmfTimeRange(ts3a, ts3a), range3.getIntersection(range2));
assertEquals("getIntersection (below - overlap)", new TmfTimeRange(ts2a, ts4b), range2.getIntersection(range4));
assertEquals("getIntersection (above - overlap)", new TmfTimeRange(ts2a, ts4b), range4.getIntersection(range2));
assertEquals("getIntersection (within - overlap1)", range6, range2.getIntersection(range6));
assertEquals("getIntersection (within - overlap2)", range6, range6.getIntersection(range2));
assertEquals("getIntersection (within - overlap3)", range5, range1.getIntersection(range5));
assertEquals("getIntersection (within - overlap4)", range5, range5.getIntersection(range1));
assertEquals("getIntersection (within - overlap5)", range8, range2.getIntersection(range8));
assertEquals("getIntersection (within - overlap6)", range8, range8.getIntersection(range2));
assertEquals("getIntersection (accross1)", range2, range2.getIntersection(range7));
assertEquals("getIntersection (accross2)", range2, range7.getIntersection(range2));
}
}