// This product is provided under the terms of EPL (Eclipse Public License)
// version 1.0.
//
// The full license text can be read from: http://www.eclipse.org/org/documents/epl-v10.php
package org.dtangler.core.dsmengine;
import static org.junit.Assert.assertEquals;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import org.dtangler.core.dependencies.Dependable;
import org.dtangler.core.dependencies.DependencyGraph;
import org.dtangler.core.dependencies.TestDependable;
import org.junit.Test;
public class InstabilityComparatorTest {
private static final Dependable XOO = new TestDependable("xoo");
private static final Dependable BAY = new TestDependable("bay");
private static final Dependable BAR = new TestDependable("bar");
private static final Dependable FOO = new TestDependable("foo");
private static final Dependable XYZ = new TestDependable("xyz");
@Test
public void testSortOrder() {
DependencyGraph deps = new DependencyGraph(null, new HashSet(Arrays
.asList(FOO, BAR, BAY, XOO)));
deps.addDependency(FOO, BAR);
deps.addDependency(FOO, BAY);
deps.addDependency(XOO, FOO);
deps.addDependency(XOO, BAR);
List<Dependable> items = new ArrayList(Arrays
.asList(FOO, BAR, BAY, XOO));
Collections.sort(items, new InstabilityComparator(deps));
assertEquals(XOO, items.get(0)); // ce = 2, ca = 1
assertEquals(FOO, items.get(1)); // ce = 2 ca = 0
assertEquals(BAR, items.get(2)); // ce = 0 ca = 2
assertEquals(BAY, items.get(3)); // ce = 0 ca = 1
}
@Test
public void testSortOrderForEqualWeight() {
DependencyGraph deps = createDepsWithEqualInstability();
List<Dependable> items = new ArrayList(Arrays.asList(FOO, BAR, BAY,
XOO, XYZ));
Collections.sort(items, new InstabilityComparator(deps));
// Instability = 0 for both
assertEquals(BAR, items.get(3)); // R comes before Y
assertEquals(BAY, items.get(4));
}
@Test
public void testSortOrderForEqualInstability() {
DependencyGraph deps = createDepsWithEqualInstability();
List<Dependable> items = new ArrayList(Arrays.asList(FOO, BAR, BAY,
XOO, XYZ));
Collections.sort(items, new InstabilityComparator(deps));
assertEquals(XYZ, items.get(0)); // I = 1
assertEquals(XOO, items.get(1)); // I = 0.66, ce weight = 3
assertEquals(FOO, items.get(2)); // I = 0.66, ce weight = 2
}
private DependencyGraph createDepsWithEqualInstability() {
DependencyGraph deps = new DependencyGraph(null, new HashSet(Arrays
.asList(FOO, BAR, BAY, XOO, XYZ)));
deps.addDependency(FOO, BAR);
deps.addDependency(FOO, BAY);
deps.addDependency(XOO, FOO);
deps.addDependency(XOO, BAR);
deps.addDependency(XOO, BAR);
deps.addDependency(XYZ, XOO);
return deps;
}
}