blob: 1e1345d64cb4dcc851972bda902abf0f77f75f71 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2019 É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 v1.0 which
* accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*******************************************************************************/
package org.eclipse.tracecompass.incubator.analysis.core.tests.weighted.diff;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import org.eclipse.jdt.annotation.NonNullByDefault;
import org.eclipse.tracecompass.incubator.analysis.core.weighted.tree.WeightedTree;
import org.eclipse.tracecompass.incubator.analysis.core.weighted.tree.diff.DifferentialWeightedTree;
import org.eclipse.tracecompass.incubator.internal.analysis.core.weighted.tree.DifferentialPalette;
import org.eclipse.tracecompass.tmf.core.model.OutputElementStyle;
import org.eclipse.tracecompass.tmf.core.util.Pair;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;
import com.google.common.collect.ImmutableList;
/**
* Test the {@link DifferentialPalette} class
*
* @author Geneviève Bastien
*/
@NonNullByDefault
@RunWith(Parameterized.class)
public class DifferentialPaletteTest {
private static final String NO_DIFF_STYLE = "equal";
private static final String LESS_STYLES = "less"; //$NON-NLS-1$
private static final String MORE_STYLES = "more"; //$NON-NLS-1$
private static final int MAX_VALUE = 5;
/**
* @return The arrays of parameters
*/
@Parameters(name = "{index}: {0}")
public static Iterable<Object[]> getParameters() {
return Arrays.asList(new Object[][] {
{ "Default Palette", DifferentialPalette.getInstance(), Collections.singletonList(0), ImmutableList.of(1, 0.04),
ImmutableList.of(new Pair<>(0.00001, 1), new Pair<>(0.009, 1), new Pair<>(0.01, 2), new Pair<>(0.015, 2), new Pair<>(0.03, 4), new Pair<>(0.030000000001, 4), new Pair<>(0.02999999999, 3)) },
{ "Palette With Threshold", DifferentialPalette.create(10, 100), ImmutableList.of(0, 0.01, 0.0999999, 0.05, 0.1), ImmutableList.of(1, 10),
ImmutableList.of(new Pair<>(0.10000000001, 1), new Pair<>(0.9, 4), new Pair<>(0.33, 2), new Pair<>(0.53, 2), new Pair<>(0.55, 3), new Pair<>(0.75, 3), new Pair<>(0.78, 4), new Pair<>(0.98, 4)) },
{ "Palette With Small Threshold", DifferentialPalette.create(0, 1), Collections.singletonList(0), ImmutableList.of(0.01, 0.1, 1),
ImmutableList.of(new Pair<>(0.0000000001, 1), new Pair<>(0.00999999999, 4), new Pair<>(0.0025, 2), new Pair<>(0.0049999999, 2), new Pair<>(0.00500001, 3), new Pair<>(0.0075, 4), new Pair<>(0.0078, 4)) },
});
}
private final String fTestName;
private final DifferentialPalette fPalette;
private final List<Number> fNoDiffValues;
private final List<Number> fMaxDiffValues;
private final List<Pair<Number, Integer>> fTestValues;
/**
* Constructor
*
* @param testName
* The name of the current test case
* @param palette
* The palette to test
* @param noDiffValues
* The values for which there should be no difference shown
* @param maxDiffValues
* The values for which there should be maximum difference heat
* shown
* @param testMap
* A map of value and their expected heat
*/
public DifferentialPaletteTest(String testName, DifferentialPalette palette, List<Number> noDiffValues, List<Number> maxDiffValues, List<Pair<Number, Integer>> testMap) {
fTestName = testName;
fPalette = palette;
fNoDiffValues = noDiffValues;
fMaxDiffValues = maxDiffValues;
fTestValues = testMap;
}
/**
* Test the differential palette with the default constructor values
*/
@Test
public void testDefaultDiffPalette() {
Map<String, OutputElementStyle> styles = fPalette.getStyles();
WeightedTree<String> original = new WeightedTree<>("test", 100);
// Test a difference of 0
for (Number diff : fNoDiffValues) {
DifferentialWeightedTree<String> diffTree = new DifferentialWeightedTree<>(original, original.getObject(), original.getWeight(), diff.doubleValue());
OutputElementStyle style = fPalette.getStyleFor(diffTree);
assertEquals(fTestName + ": No diff style " + diff, NO_DIFF_STYLE, style.getParentKey());
assertTrue(fTestName + ": Style present for " + diff, styles.containsKey(style.getParentKey()));
}
// Test the maximum difference above the threshold, negative and positive
for (Number diff : fMaxDiffValues) {
// Test the positive value
DifferentialWeightedTree<String> diffTree = new DifferentialWeightedTree<>(original, original.getObject(), original.getWeight(), Math.abs(diff.doubleValue()));
OutputElementStyle style = fPalette.getStyleFor(diffTree);
assertEquals(fTestName + ": Max diff positive " + diff, MORE_STYLES + MAX_VALUE, style.getParentKey());
assertTrue(fTestName + ": Style present " + diff, styles.containsKey(style.getParentKey()));
// Test the negative value
diffTree = new DifferentialWeightedTree<>(original, original.getObject(), original.getWeight(), -Math.abs(diff.doubleValue()));
style = fPalette.getStyleFor(diffTree);
assertEquals(fTestName + ": Max diff negative " + diff, LESS_STYLES + MAX_VALUE, style.getParentKey());
assertTrue(fTestName + ": Style present " + diff, styles.containsKey(style.getParentKey()));
}
// Test the various values in between the thresholds
for (Pair<Number, Integer> diffEntry : fTestValues) {
Number diff = diffEntry.getFirst();
Integer expectedHeat = diffEntry.getSecond();
// Test he positive value
DifferentialWeightedTree<String> diffTree = new DifferentialWeightedTree<>(original, original.getObject(), original.getWeight(), Math.abs(diff.doubleValue()));
OutputElementStyle style = fPalette.getStyleFor(diffTree);
assertEquals(fTestName + ": positive diff " + diff, MORE_STYLES + expectedHeat, style.getParentKey());
assertTrue(fTestName + ": Style present " + diff, styles.containsKey(style.getParentKey()));
// Test the negative value
diffTree = new DifferentialWeightedTree<>(original, original.getObject(), original.getWeight(), -Math.abs(diff.doubleValue()));
style = fPalette.getStyleFor(diffTree);
assertEquals(fTestName + ": negative diff " + diff, LESS_STYLES + expectedHeat, style.getParentKey());
assertTrue(fTestName + ": Style present " + diff, styles.containsKey(style.getParentKey()));
}
}
}