blob: 8ccfe233432cc0c49927f2de5092aa0b639dd950 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2016 Ericsson
*
* All rights reserved. This program and the accompanying materials are
* made available under the terms of the Eclipse Public License 2.0 which
* accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*******************************************************************************/
package org.eclipse.tracecompass.segmentstore.core.tests;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.tracecompass.segmentstore.core.BasicSegment;
import org.eclipse.tracecompass.segmentstore.core.ISegment;
import org.eclipse.tracecompass.segmentstore.core.ISegmentStore;
import org.eclipse.tracecompass.segmentstore.core.SegmentStoreFactory;
import org.eclipse.tracecompass.segmentstore.core.SegmentStoreFactory.SegmentStoreType;
import org.junit.Test;
/**
* Segment Store factory test
*
* @author Matthew Khouzam
*
*/
public class SegmentStoreFactoryTest {
/**
* Simplest create function, should always work
*/
@Test
public void simpleCreate() {
assertNotNull(SegmentStoreFactory.createSegmentStore());
}
/**
* Create a fast segment store. Should always return the fastest
* implementation available
*/
@Test
public void createFast() {
assertNotNull(SegmentStoreFactory.createSegmentStore(SegmentStoreType.Fast));
}
/**
* Create a stable segment store, should always return a segment store that
* does not change much its performance memory or cpu
*/
@Test
public void createStable() {
assertNotNull(SegmentStoreFactory.createSegmentStore(SegmentStoreType.Stable));
}
/**
* Create a "set" like segment store
*/
@Test
public void createDistinct() {
ISegmentStore<@NonNull ISegment> fixture = SegmentStoreFactory.createSegmentStore(SegmentStoreType.Distinct);
assertNotNull(fixture);
testDistinct(fixture);
}
/**
* Make sure mixing flags works
*/
@Test
public void createDistinctFast() {
ISegmentStore<@NonNull ISegment> fixture = SegmentStoreFactory.createSegmentStore(SegmentStoreType.Distinct, SegmentStoreType.Fast);
testDistinct(fixture);
}
/**
* Make sure mixing flags works
*/
@Test
public void createDistinctStable() {
ISegmentStore<@NonNull ISegment> fixture = SegmentStoreFactory.createSegmentStore(SegmentStoreType.Distinct, SegmentStoreType.Stable);
testDistinct(fixture);
}
/**
* Make sure mixing flags works
*/
@Test
public void createDoubleDistinct() {
ISegmentStore<@NonNull ISegment> fixture = SegmentStoreFactory.createSegmentStore(SegmentStoreType.Distinct, SegmentStoreType.Distinct);
assertNotNull(fixture);
testDistinct(fixture);
}
/**
* Make sure mixing flags works (power set of all types)
*/
@Test
public void createAllDressed() {
testDistinct(SegmentStoreFactory.createSegmentStore(SegmentStoreType.Distinct, SegmentStoreType.Stable, SegmentStoreType.Fast));
testDistinct(SegmentStoreFactory.createSegmentStore(SegmentStoreType.Distinct, SegmentStoreType.Fast, SegmentStoreType.Stable));
testDistinct(SegmentStoreFactory.createSegmentStore(SegmentStoreType.Stable, SegmentStoreType.Distinct, SegmentStoreType.Fast));
testDistinct(SegmentStoreFactory.createSegmentStore(SegmentStoreType.Stable, SegmentStoreType.Fast, SegmentStoreType.Distinct));
testDistinct(SegmentStoreFactory.createSegmentStore(SegmentStoreType.Fast, SegmentStoreType.Distinct, SegmentStoreType.Stable));
testDistinct(SegmentStoreFactory.createSegmentStore(SegmentStoreType.Fast, SegmentStoreType.Stable, SegmentStoreType.Distinct));
}
/**
* Torture test, add many redundant flags
*/
@SuppressWarnings("null")
@Test
public void createTortureTest() {
Random rnd = new Random();
List<@NonNull SegmentStoreType> args = new ArrayList<>();
rnd.setSeed(1234);
int nbValues = SegmentStoreType.values().length;
args.add(SegmentStoreType.Distinct);
for (int i = 0; i < 1000; i++) {
int nextInt = rnd.nextInt(nbValues);
args.add(SegmentStoreType.values()[nextInt]);
}
SegmentStoreType @NonNull [] array = args.toArray(new SegmentStoreType[args.size()]);
assertNotNull(array);
testDistinct(SegmentStoreFactory.createSegmentStore(array));
}
/**
* Create a pre-loaded fast segment store
*/
@Test
public void createPreloaded() {
ISegment[] data = new ISegment[1];
data[0] = new BasicSegment(0, 0);
ISegmentStore<@NonNull ISegment> segmentStore;
segmentStore = SegmentStoreFactory.createSegmentStore(data);
assertNotNull(segmentStore);
assertEquals(1, segmentStore.size());
segmentStore = SegmentStoreFactory.createSegmentStore(data, SegmentStoreType.Fast);
assertNotNull(segmentStore);
assertEquals(1, segmentStore.size());
segmentStore = SegmentStoreFactory.createSegmentStore(data, SegmentStoreType.Stable);
assertNotNull(segmentStore);
assertEquals(1, segmentStore.size());
segmentStore = SegmentStoreFactory.createSegmentStore(data, SegmentStoreType.Distinct);
assertNotNull(segmentStore);
assertEquals(1, segmentStore.size());
}
private static void testDistinct(ISegmentStore<@NonNull ISegment> fixture) {
// test adding the same object
ISegment seg = new BasicSegment(0, 0);
fixture.add(seg);
fixture.add(seg);
assertEquals(1, fixture.size());
fixture.clear();
// test different equal objects
fixture.add(new BasicSegment(0, 0));
fixture.add(new BasicSegment(0, 0));
assertEquals(1, fixture.size());
}
}