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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
|
package forge
import forge.Target.Cacher
import forge.TestUtil.test
class TestGraphs(){
// single
object singleton {
val single = test()
}
// up---down
object pair {
val up = test()
val down = test(up)
}
// up---o---down
object anonTriple{
val up = test()
val down = test(test(up))
}
// left
// / \
// up down
// \ /
// right
object diamond{
val up = test()
val left = test(up)
val right = test(up)
val down = test(left, right)
}
// o
// / \
// up down
// \ /
// o
object anonDiamond{
val up = test()
val down = test(test(up), test(up))
}
object defCachedDiamond extends Cacher{
def up = T{ test() }
def left = T{ test(up) }
def right = T{ test(up) }
def down = T{ test(left, right) }
}
object borkedCachedDiamond1 {
def up = T{ test() }
def left = T{ test(up) }
def right = T{ test(up) }
def down = T{ test(left, right) }
}
object borkedCachedDiamond2 extends Cacher {
def up = test()
def left = test(up)
def right = test(up)
def down = test(left, right)
}
object borkedCachedDiamond3 {
def up = test()
def left = test(up)
def right = test(up)
def down = test(left, right)
}
// o g-----o
// \ \ \
// o o h-----I---o
// \ / \ / \ / \ \
// A---c--o E o-o \ \
// / \ / \ / \ o---J
// o d o--o o / /
// \ / \ / /
// o o---F---o
// / /
// o--B o
object bigSingleTerminal{
val a = test(test(), test())
val b = test(test())
val e = {
val c = test(a)
val d = test(a)
test(test(test(), test(c)), test(test(c, test(d, b))))
}
val f = test(test(test(), test(e)))
val i = {
val g = test()
val h = test(g, e)
test(test(g), test(test(h)))
}
val j = test(test(i), test(i, f), test(f))
}
}
|