You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

178 lines
3.9 KiB

import groovy.mock.interceptor.MockFor
import static groovy.test.GroovyAssert.*
import groovy.util.GroovyTestCase
import org.wikimedia.integration.ExecutionGraph
class ExecutionGraphTest extends GroovyTestCase {
void testAncestorsOf() {
def graph = new ExecutionGraph([
["a", "b", "c", "d", "e", "f"],
["x", "d", "y", "f"],
])
assert graph.ancestorsOf("c") == ["b", "a"] as Set
assert graph.ancestorsOf("d") == ["c", "b", "a", "x"] as Set
assert graph.ancestorsOf("f") == ["e", "d", "c", "b", "a", "x", "y"] as Set
}
void testLeaves() {
def graph = new ExecutionGraph([
["a", "b", "c", "d"],
["f", "b", "g"],
])
assert graph.leaves() == ["g", "d"] as Set
}
void testInDegreeOf() {
def graph = new ExecutionGraph([
["a", "b", "c"],
["d", "b", "e"],
["f", "b"],
])
assert graph.inDegreeOf("a") == 0
assert graph.inDegreeOf("d") == 0
assert graph.inDegreeOf("f") == 0
assert graph.inDegreeOf("b") == 3
assert graph.inDegreeOf("e") == 1
assert graph.inDegreeOf("c") == 1
}
void testInTo() {
def graph = new ExecutionGraph([
["a", "b", "c"],
["d", "b", "e"],
["f", "b"],
])
assert graph.inTo("a") == [] as Set
assert graph.inTo("d") == [] as Set
assert graph.inTo("f") == [] as Set
assert graph.inTo("b") == ["a", "d", "f"] as Set
assert graph.inTo("c") == ["b"] as Set
assert graph.inTo("e") == ["b"] as Set
}
void testNodes() {
def graph = new ExecutionGraph([
["a", "b", "c"],
["x", "b", "y"],
["z"],
])
assert graph.nodes() == ["a", "b", "c", "x", "y", "z"] as Set
}
void testOr() {
def graph1 = new ExecutionGraph([
["x", "y", "z"],
])
def graph2 = new ExecutionGraph([
["a", "b", "c"],
["d", "b", "e"],
])
assert (graph1 | graph2) == new ExecutionGraph([
["x", "y", "z"],
["a", "b", "c"],
["d", "b", "e"],
])
}
void testOutDegreeOf() {
def graph = new ExecutionGraph([
["a", "b", "c"],
["d", "b", "e"],
["f", "b"],
])
assert graph.outDegreeOf("a") == 1
assert graph.outDegreeOf("d") == 1
assert graph.outDegreeOf("f") == 1
assert graph.outDegreeOf("b") == 2
assert graph.outDegreeOf("e") == 0
assert graph.outDegreeOf("c") == 0
}
void testOutOf() {
def graph = new ExecutionGraph([
["a", "b", "c"],
["d", "b", "e"],
["f", "b"],
])
assert graph.outOf("a") == ["b"] as Set
assert graph.outOf("d") == ["b"] as Set
assert graph.outOf("f") == ["b"] as Set
assert graph.outOf("b") == ["c", "e"] as Set
assert graph.outOf("c") == [] as Set
assert graph.outOf("e") == [] as Set
}
void testPlus() {
def graph1 = new ExecutionGraph([
["x", "y", "z"],
])
def graph2 = new ExecutionGraph([
["a", "b", "c"],
["d", "b", "e"],
])
assert (graph1 + graph2) == new ExecutionGraph([
["x", "y", "z", "a", "b", "c"],
["x", "y", "z", "d", "b", "e"],
])
}
void testRoots() {
def graph = new ExecutionGraph([
["a", "b", "c", "d", "e"],
["f", "b", "g", "e"],
])
assert graph.roots() == ["a", "f"] as Set
}
void testRootsOfIsolates() {
def graph = new ExecutionGraph([["a"], ["z"]])
assert graph.roots() == ["a", "z"] as Set
}
void testStack() {
def graph = new ExecutionGraph([
["a", "b", "c", "d", "e", "f"],
["x", "d", "y", "f"],
])
assert graph.stack() == [
["a", "x"],
["b"],
["c"],
["d"],
["e", "y"],
["f"],
]
}
void testStack_cycleDetection() {
def graph = new ExecutionGraph([
["a", "b", "c"],
["x", "b", "y", "a"],
])
shouldFail(Exception) {
graph.stack()
}
}
void testToString() {
def graph = new ExecutionGraph([["a", "b", "c"], ["x"]])
assert graph.toString() == "digraph { a -> b; b -> c; x }"
}
}