1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
|
package forge
import forge.Target.test
import utest.assert
import scala.collection.mutable
object TestUtil {
def checkTopological(targets: Seq[Target[_]]) = {
val seen = mutable.Set.empty[Target[_]]
for(t <- targets.reverseIterator){
seen.add(t)
for(upstream <- t.inputs){
assert(!seen(upstream))
}
}
}
def makeGraphs() = {
object singleton {
val single = T{ test() }
}
object pair {
val up = T{ test() }
val down = T{ test(up) }
}
object anonTriple{
val up = T{ test() }
val down = T{ test(test(up)) }
}
object diamond{
val up = T{ test() }
val left = T{ test(up) }
val right = T{ test(up) }
val down = T{ test(left, right) }
}
object anonDiamond{
val up = T{ test() }
val down = T{ test(test(up), test(up)) }
}
// x g-----o
// \ \ \
// x o h-----I---o
// \ / \ / \ / \ \
// A---c--o E o-o \ \
// / \ / \ / \ o---J
// x d o--o o / /
// \ / \ / /
// o o---F---o
// / /
// x--B x
object bigSingleTerminal{
val a = T{ test(test(), test()) }
val b = T{ test(test()) }
val e = T{
val c = test(a)
val d = test(a)
test(test(test(), test(c)), test(test(c, test(d, b))))
}
val f = T{
test(test(test(), test(e)))
}
val i = T{
val g = test()
val h = test(g, e)
test(test(g), test(test(h)))
}
val j = T{
test(test(i), test(i, f), test(f))
}
}
(singleton, pair, anonTriple, diamond, anonDiamond, bigSingleTerminal)
}
}
|