File: test_taskengine.py

package info (click to toggle)
pypy 7.0.0%2Bdfsg-3
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 107,216 kB
  • sloc: python: 1,201,787; ansic: 62,419; asm: 5,169; cpp: 3,017; sh: 2,534; makefile: 545; xml: 243; lisp: 45; awk: 4
file content (150 lines) | stat: -rw-r--r-- 4,199 bytes parent folder | download | duplicates (9)
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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
from rpython.translator.tool.taskengine import SimpleTaskEngine

def test_simple():

    class ABC(SimpleTaskEngine):

        def task_A(self):
            pass

        task_A.task_deps = ['B', '?C']

        def task_B(self):
            pass

        def task_C(self):
            pass

        task_C.task_deps = ['B']

        def task_D(self):
            pass
        task_D.task_deps = ['E']

        def task_E(self):
            pass
        task_E.task_deps = ['F']

        def task_F(self):
            pass

    abc = ABC()

    assert abc._plan('B') == ['B']
    assert abc._plan('C') == ['B', 'C']
    assert abc._plan('A') == ['B', 'C', 'A']
    assert abc._plan('A', skip=['C']) == ['B', 'A']

    assert abc._depending_on('C') == []
    assert dict.fromkeys(abc._depending_on('B'), True) == {'A':True, 'C':True}
    assert abc._depending_on('A') == []
   
    assert abc._depending_on('F') == ['E']
    assert abc._depending_on('E') == ['D']
    assert abc._depending_on('D') == []

    assert abc._depending_on_closure('C') == ['C']
    assert dict.fromkeys(abc._depending_on_closure('B'), True) == {'A':True, 'C':True, 'B': True}
    assert abc._depending_on_closure('A') == ['A']
   
    assert dict.fromkeys(abc._depending_on_closure('F'), True) == {'D':True, 'E':True, 'F': True}
    assert dict.fromkeys(abc._depending_on_closure('E'), True) == {'D':True, 'E':True}
    assert abc._depending_on_closure('D') == ['D']


def test_execute():

    class ABC(SimpleTaskEngine):

        def __init__(self):
            SimpleTaskEngine.__init__(self)
            self.done = []

        def task_A(self):
            self.done.append('A')

        task_A.task_deps = ['B', '?C']

        def task_B(self):
            self.done.append('B')

        def task_C(self):
            self.done.append('C')

        task_C.task_deps = ['B']

        def _event(self, kind, goal, taskcallable):
            self.done.append((kind, goal))

    def test(goals, task_skip=[]):
        if isinstance(goals, str):
            goals = [goals]
        abc = ABC()
        abc._execute(goals, task_skip=task_skip)
        return abc.done

    def trace(goals):
        t = []
        for goal in goals:
            t.append(('planned', goal))
        for goal in goals:
            t.extend([('pre', goal), goal, ('post', goal)])
        return t

    assert test('B') == trace('B')
    assert test('C') == trace(['B', 'C'])
    assert test('A') == trace(['B', 'C', 'A'])
    assert test('A', ['C']) == trace(['B', 'A'])
    assert test(['B', 'C']) == trace(['B', 'C'])
    assert test(['C', 'B']) == trace(['B', 'C'])
    assert test(['B', 'A']) == trace(['B', 'C', 'A'])
    assert test(['B', 'A'], ['C']) == trace(['B', 'A'])
    assert test(['B', 'A', 'C']) == trace(['B', 'C', 'A'])
    assert test(['B', 'A', 'C'], ['C']) == trace(['B', 'C', 'A'])

def test_driver():
    class Drv(SimpleTaskEngine):

        def task_A():
            pass
        task_A.task_deps = []

        def task_R():
            pass
        task_R.task_deps = ['A']

        def task_b():
            pass
        task_b.task_deps = ['R']

        def task_H():
            pass
        task_H.task_deps = ['b']

        def task_T():
            pass
        task_T.task_deps = ['H']

        def task_B():
            pass
        task_B.task_deps = ['R', '??T']

        def task_D():
            pass
        task_D.task_deps = ['R', '?B', '?A', '??T']

    drv = Drv()
    assert drv._plan(['R']) == ['A', 'R']
    assert drv._plan(['B']) == ['A', 'R', 'B']
    assert drv._plan(['D']) == ['A', 'R', 'B', 'D']
    assert drv._plan(['D'], skip=['B']) == ['A', 'R', 'D']
    assert drv._plan(['D', 'R']) == ['A', 'R', 'B', 'D']


    assert drv._plan(['H', 'R']) == ['A', 'R', 'b', 'H']
    assert drv._plan(['H']) == ['A', 'R', 'b', 'H']
    assert drv._plan(['T', 'B']) == ['A', 'R', 'b', 'H', 'T', 'B']
    assert drv._plan(['D', 'T']) == ['A', 'R', 'b', 'H', 'T', 'B', 'D']
    assert drv._plan(['D', 'T', 'R']) == ['A', 'R', 'b', 'H', 'T', 'B', 'D']
    assert drv._plan(['D', 'T']) == ['A', 'R', 'b', 'H', 'T', 'B', 'D']
    assert drv._plan(['D', 'T'], skip=['B']) == ['A', 'R', 'b', 'H', 'T', 'D']