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
151
152
|
#!/usr/bin/python
# Copyright 2011 Google Inc. All Rights Reserved.
import math
class Column(object):
def __init__(self, name):
self.name = name
def _ContainsString(self, results):
for result in results:
if isinstance(result, str):
return True
return False
def _StripNone(self, results):
res = []
for result in results:
if result is not None:
res.append(result)
return res
class MinColumn(Column):
def Compute(self, results, baseline_results):
if self._ContainsString(results):
return "-"
results = self._StripNone(results)
if not results:
return "-"
return min(results)
class MaxColumn(Column):
def Compute(self, results, baseline_results):
if self._ContainsString(results):
return "-"
results = self._StripNone(results)
if not results:
return "-"
return max(results)
class MeanColumn(Column):
def Compute(self, results, baseline_results):
all_pass = True
all_fail = True
if self._ContainsString(results):
for result in results:
if result != "PASSED":
all_pass = False
if result != "FAILED":
all_fail = False
if all_pass:
return "ALL PASS"
elif all_fail:
return "ALL FAIL"
else:
return "-"
results = self._StripNone(results)
if not results:
return "-"
return float(sum(results)) / len(results)
class StandardDeviationColumn(Column):
def __init__(self, name):
super(StandardDeviationColumn, self).__init__(name)
def Compute(self, results, baseline_results):
if self._ContainsString(results):
return "-"
results = self._StripNone(results)
if not results:
return "-"
n = len(results)
average = sum(results) / n
total = 0
for result in results:
total += (result - average) ** 2
return math.sqrt(total / n)
class RatioColumn(Column):
def __init__(self, name):
super(RatioColumn, self).__init__(name)
def Compute(self, results, baseline_results):
if self._ContainsString(results) or self._ContainsString(baseline_results):
return "-"
results = self._StripNone(results)
baseline_results = self._StripNone(baseline_results)
if not results or not baseline_results:
return "-"
result_mean = sum(results) / len(results)
baseline_mean = sum(baseline_results) / len(baseline_results)
if not baseline_mean:
return "-"
return result_mean / baseline_mean
class DeltaColumn(Column):
def __init__(self, name):
super(DeltaColumn, self).__init__(name)
def Compute(self, results, baseline_results):
if self._ContainsString(results) or self._ContainsString(baseline_results):
return "-"
results = self._StripNone(results)
baseline_results = self._StripNone(baseline_results)
if not results or not baseline_results:
return "-"
result_mean = sum(results) / len(results)
baseline_mean = sum(baseline_results) / len(baseline_results)
if not baseline_mean:
return "-"
res = 100 * (result_mean - baseline_mean) / baseline_mean
return res
class IterationsCompleteColumn(Column):
def __init__(self, name):
super(IterationsCompleteColumn, self).__init__(name)
def Compute(self, results, baseline_results):
return len(self._StripNone(results))
class IterationColumn(Column):
def __init__(self, name, iteration):
super(IterationColumn, self).__init__(name)
self.iteration = iteration
def Compute(self, results, baseline_results):
if self.iteration > len(results):
return ""
res = results[self.iteration - 1]
if not res:
return "-"
return res
|