blob: 0529b432ed7967cba0cdd0df75b0ca5ae842e557 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2016 École Polytechnique de Montréal
*
* 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.interfaces;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import java.util.Comparator;
import java.util.Iterator;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.NonNullByDefault;
import org.eclipse.tracecompass.common.core.NonNullUtils;
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.eclipse.tracecompass.segmentstore.core.segment.interfaces.INamedSegment;
import org.eclipse.tracecompass.segmentstore.core.segment.interfaces.SegmentAspects;
import org.eclipse.tracecompass.segmentstore.core.segment.interfaces.SegmentTypeComparators;
import org.junit.Test;
/**
* Test the INamedSegment interface
*
* @author Geneviève Bastien
*/
@NonNullByDefault
public class INamedSegmentTest {
// 5 test segments
private static final BasicSegment BASE_SEGMENT = new BasicSegment(10, 12);
private static final NamedSegment NAMED_SEGMENT1 = new NamedSegment(10, 12, "test");
private static final NamedSegment NAMED_SEGMENT2 = new NamedSegment(12, 13, "abc");
private static final NamedSegment NAMED_SEGMENT3 = new NamedSegment(14, 15, "abc");
private static final NamedSegment NAMED_SEGMENT4 = new NamedSegment(14, 15, "");
/**
* A class for INamedSegment tests
*/
private static class NamedSegment extends BasicSegment implements INamedSegment {
private static final long serialVersionUID = -7955666081972046597L;
private final String fName;
public NamedSegment(long start, long end, String name) {
super(start, end);
fName = name;
}
@Override
public @NonNull String getName() {
return fName;
}
}
/**
* Test the {@link SegmentTypeComparators#NAMED_SEGMENT_COMPARATOR}
* comparator
*/
@Test
public void testComparator() {
Comparator<ISegment> cmp = SegmentTypeComparators.NAMED_SEGMENT_COMPARATOR;
// Verify the comparator with the segments
assertEquals(cmp.compare(NAMED_SEGMENT2, NAMED_SEGMENT3), cmp.compare(NAMED_SEGMENT3, NAMED_SEGMENT2));
assertTrue(cmp.compare(NAMED_SEGMENT1, NAMED_SEGMENT2) > 0);
assertEquals(cmp.compare(NAMED_SEGMENT1, NAMED_SEGMENT2), -1 * cmp.compare(NAMED_SEGMENT2, NAMED_SEGMENT1));
assertTrue(cmp.compare(BASE_SEGMENT, NAMED_SEGMENT2) > 0);
assertTrue(cmp.compare(NAMED_SEGMENT2, BASE_SEGMENT) < 0);
assertTrue(cmp.compare(BASE_SEGMENT, NAMED_SEGMENT4) > 0);
assertTrue(cmp.compare(NAMED_SEGMENT4, BASE_SEGMENT) < 0);
// Add the segments to a segment store
ISegmentStore<BasicSegment> segStore = SegmentStoreFactory.createSegmentStore(SegmentStoreType.Fast);
segStore.add(BASE_SEGMENT);
segStore.add(NAMED_SEGMENT1);
segStore.add(NAMED_SEGMENT2);
segStore.add(NAMED_SEGMENT3);
segStore.add(NAMED_SEGMENT4);
// Iterate with this comparator on the segment store
Iterable<BasicSegment> iterable = segStore.iterator(cmp);
Iterator<BasicSegment> iterator = iterable.iterator();
assertTrue(iterator.hasNext());
BasicSegment current = iterator.next();
BasicSegment prev = current;
int count = 1;
while (iterator.hasNext()) {
current = iterator.next();
assertTrue(cmp.compare(prev, current) <= 0);
prev = current;
count++;
}
assertEquals(5, count);
// Iterate with the reverse comparator
iterable = segStore.iterator(NonNullUtils.checkNotNull(cmp.reversed()));
iterator = iterable.iterator();
assertTrue(iterator.hasNext());
current = iterator.next();
prev = current;
count = 1;
while (iterator.hasNext()) {
current = iterator.next();
assertTrue(cmp.compare(prev, current) >= 0);
prev = current;
count++;
}
assertEquals(5, count);
}
/**
* Test the {@link SegmentAspects} method
*/
@Test
public void testNamedAspect() {
assertNull(SegmentAspects.getName(BASE_SEGMENT));
assertEquals("test", SegmentAspects.getName(NAMED_SEGMENT1));
assertEquals("abc", SegmentAspects.getName(NAMED_SEGMENT2));
assertEquals("", SegmentAspects.getName(NAMED_SEGMENT4));
}
}