summaryrefslogtreecommitdiff
path: root/core/src/test/scala/forge/TestGraphs.scala
blob: 9709979d5fd2f48bfd6cb42a249127774c982300 (plain) (blame)
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
package forge

import forge.define.Task.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 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))
  }
}