/*******************************************************************************
* 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.timing.core.tests.segmentstore.statistics;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import java.util.Collections;
import java.util.Map;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.tracecompass.analysis.timing.core.segmentstore.statistics.AbstractSegmentStatisticsAnalysis;
import org.eclipse.tracecompass.analysis.timing.core.statistics.IStatistics;
import org.eclipse.tracecompass.segmentstore.core.ISegment;
import org.eclipse.tracecompass.tmf.core.exceptions.TmfAnalysisException;
import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
import org.eclipse.tracecompass.tmf.tests.stubs.trace.xml.TmfXmlTraceStub;
import org.eclipse.tracecompass.tmf.tests.stubs.trace.xml.TmfXmlTraceStubNs;
import org.junit.Test;
import com.google.common.collect.ImmutableSet;
/**
* Test class to test the {@link AbstractSegmentStatisticsAnalysis} class
*
* @author Matthew Khouzam
*/
public class AbstractStatsAnalysisTest {
/**
* Test execution with no trace
*
* @throws TmfAnalysisException
* should not happen
*/
@Test
public void testExecuteNoTrace() throws TmfAnalysisException {
StubSegmentStatisticsAnalysis fixture = new StubSegmentStatisticsAnalysis();
assertFalse(fixture.executeAnalysis(new NullProgressMonitor()));
fixture.dispose();
}
/**
* Test execution with no dependent analyses
*
* @throws TmfAnalysisException
* should not happen
*/
@Test
public void testExecuteNoDepend() throws TmfAnalysisException {
StubSegmentStatisticsAnalysis fixture = new StubSegmentStatisticsAnalysis();
TmfXmlTraceStub trace = new TmfXmlTraceStubNs();
fixture.setTrace(trace);
assertFalse(fixture.executeAnalysis(new NullProgressMonitor()));
trace.dispose();
fixture.dispose();
}
/**
* Test good execution
*
* @throws TmfAnalysisException
* should not happen
*/
@Test
public void testExecute() throws TmfAnalysisException {
StubSegmentStatisticsAnalysis fixture = new StubSegmentStatisticsAnalysis();
TmfXmlTraceStub trace = new TmfXmlTraceStubNs();
fixture.setTrace(trace);
fixture.getDependentAnalyses();
assertTrue(fixture.executeAnalysis(new NullProgressMonitor()));
trace.dispose();
fixture.dispose();
}
/**
* Test total statistics
*
* @throws TmfAnalysisException
* should not happen
*
*/
@Test
public void testTotalStats() throws TmfAnalysisException {
TmfXmlTraceStub trace = new TmfXmlTraceStubNs();
StubSegmentStatisticsAnalysis fixture = getValidSegmentStats(trace);
IStatistics<@NonNull ISegment> totalStats = fixture.getStatsTotal();
assertNotNull(totalStats);
// no need to test the content much as it is tested in the other test.
assertEquals(StubSegmentStatisticsAnalysis.SIZE, totalStats.getNbElements());
trace.dispose();
fixture.dispose();
}
/**
* Test per-type statistics
*
* @throws TmfAnalysisException
* should not happen
*
*/
@Test
public void testPerTypeStats() throws TmfAnalysisException {
TmfXmlTraceStub trace = new TmfXmlTraceStubNs();
StubSegmentStatisticsAnalysis fixture = getValidSegmentStats(trace);
Map<@NonNull String, IStatistics<@NonNull ISegment>> perTypeStats = fixture.getStatsPerType();
assertNotNull(perTypeStats);
// no need to test the content much as it is tested in the other test.
assertEquals(2, perTypeStats.size());
assertEquals(ImmutableSet.<String> of("odd", "even"), perTypeStats.keySet());
IStatistics<@NonNull ISegment> segmentStoreStatistics = perTypeStats.get("even");
assertNotNull(segmentStoreStatistics);
// starts with 0 so size + 1
assertEquals(StubSegmentStatisticsAnalysis.SIZE / 2 + 1, segmentStoreStatistics.getNbElements());
trace.dispose();
fixture.dispose();
}
/**
* Test the partial statistics
*
* @throws TmfAnalysisException
* should not happen
*
*/
@Test
public void testPartialStats() throws TmfAnalysisException {
TmfXmlTraceStub trace = new TmfXmlTraceStubNs();
StubSegmentStatisticsAnalysis fixture = getValidSegmentStats(trace);
IStatistics<@NonNull ISegment> totalStats = fixture.getStatsForRange(100, 1100, new NullProgressMonitor());
assertNotNull(totalStats);
// no need to test the content much as it is tested in the other test.
// 1051 = 1001 where start is between start and end + 50 overlapping
// start
assertEquals(1051, totalStats.getNbElements());
trace.dispose();
fixture.dispose();
}
/**
* Test the partial per type statistic
*
* @throws TmfAnalysisException
* should not happen
*
*/
@Test
public void testPartialPerTypeStats() throws TmfAnalysisException {
TmfXmlTraceStub trace = new TmfXmlTraceStubNs();
StubSegmentStatisticsAnalysis fixture = getValidSegmentStats(trace);
Map<@NonNull String, IStatistics<@NonNull ISegment>> perTypeStats = fixture.getStatsPerTypeForRange(100, 1100, new NullProgressMonitor());
assertNotNull(perTypeStats);
// no need to test the content much as it is tested in the other test.
assertEquals(2, perTypeStats.size());
assertEquals(ImmutableSet.<String> of("odd", "even"), perTypeStats.keySet());
IStatistics<@NonNull ISegment> segmentStoreStatistics = perTypeStats.get("even");
assertNotNull(segmentStoreStatistics);
// 526 = 1051/2+1 = see explanation of 1051 in #testPartialStats
assertEquals(526, segmentStoreStatistics.getNbElements());
trace.dispose();
fixture.dispose();
}
/**
* Test the cancel operation
*
* @throws TmfAnalysisException
* should not happen
*/
@Test
public void testPartialPerTypeStatsCancel() throws TmfAnalysisException {
TmfXmlTraceStub trace = new TmfXmlTraceStubNs();
StubSegmentStatisticsAnalysis fixture = getValidSegmentStats(trace);
NullProgressMonitor monitor = new NullProgressMonitor();
monitor.setCanceled(true);
Map<@NonNull String, IStatistics<@NonNull ISegment>> perTypeStats = fixture.getStatsPerTypeForRange(100, 1100, monitor);
assertEquals(Collections.emptyMap(), perTypeStats);
trace.dispose();
fixture.dispose();
}
private static StubSegmentStatisticsAnalysis getValidSegmentStats(@NonNull ITmfTrace trace) throws TmfAnalysisException {
StubSegmentStatisticsAnalysis fixture = new StubSegmentStatisticsAnalysis();
fixture.setTrace(trace);
fixture.getDependentAnalyses();
fixture.executeAnalysis(new NullProgressMonitor());
return fixture;
}
}