OLD | NEW |
1 # Copyright 2013 The Chromium Authors. All rights reserved. | 1 # Copyright 2013 The Chromium Authors. All rights reserved. |
2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
4 import os | 4 import os |
5 import unittest | 5 import unittest |
6 | 6 |
7 from telemetry import story | 7 from telemetry import story |
8 from telemetry import page as page_module | 8 from telemetry import page as page_module |
9 from telemetry import value | 9 from telemetry import value |
10 from telemetry.value import improvement_direction | 10 from telemetry.value import improvement_direction |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
65 | 65 |
66 @property | 66 @property |
67 def pages(self): | 67 def pages(self): |
68 return self.story_set.stories | 68 return self.story_set.stories |
69 | 69 |
70 class ValueTest(TestBase): | 70 class ValueTest(TestBase): |
71 def testRepr(self): | 71 def testRepr(self): |
72 page = self.pages[0] | 72 page = self.pages[0] |
73 v = list_of_scalar_values.ListOfScalarValues( | 73 v = list_of_scalar_values.ListOfScalarValues( |
74 page, 'x', 'unit', [10, 9, 9, 7], important=True, description='desc', | 74 page, 'x', 'unit', [10, 9, 9, 7], important=True, description='desc', |
75 tir_label='my_ir', std=42, same_page_merge_policy=value.CONCATENATE, | 75 tir_label='my_ir', std=42, |
76 improvement_direction=improvement_direction.DOWN) | 76 improvement_direction=improvement_direction.DOWN) |
77 | 77 |
78 expected = ('ListOfScalarValues(http://www.bar.com/, x, unit, ' | 78 expected = ('ListOfScalarValues(http://www.bar.com/, x, unit, ' |
79 '[10, 9, 9, 7], important=True, description=desc, ' | 79 '[10, 9, 9, 7], important=True, description=desc, ' |
80 'tir_label=my_ir, std=42, ' | 80 'tir_label=my_ir, std=42, ' |
81 'same_page_merge_policy=CONCATENATE, ' | |
82 'improvement_direction=down, grouping_keys={})') | 81 'improvement_direction=down, grouping_keys={})') |
83 | 82 |
84 self.assertEquals(expected, str(v)) | 83 self.assertEquals(expected, str(v)) |
85 | 84 |
86 def testListSamePageMergingWithSamePageConcatenatePolicy(self): | 85 def testListSamePageMerging(self): |
87 page0 = self.pages[0] | 86 page0 = self.pages[0] |
88 v0 = list_of_scalar_values.ListOfScalarValues( | 87 v0 = list_of_scalar_values.ListOfScalarValues( |
89 page0, 'x', 'unit', | 88 page0, 'x', 'unit', |
90 [10, 9, 9, 7], same_page_merge_policy=value.CONCATENATE, | 89 [10, 9, 9, 7], description='list-based metric', |
91 description='list-based metric', | |
92 improvement_direction=improvement_direction.DOWN) | 90 improvement_direction=improvement_direction.DOWN) |
93 v1 = list_of_scalar_values.ListOfScalarValues( | 91 v1 = list_of_scalar_values.ListOfScalarValues( |
94 page0, 'x', 'unit', | 92 page0, 'x', 'unit', |
95 [300, 302, 303, 304], same_page_merge_policy=value.CONCATENATE, | 93 [300, 302, 303, 304], description='list-based metric', |
96 description='list-based metric', | |
97 improvement_direction=improvement_direction.DOWN) | 94 improvement_direction=improvement_direction.DOWN) |
98 self.assertTrue(v1.IsMergableWith(v0)) | 95 self.assertTrue(v1.IsMergableWith(v0)) |
99 | 96 |
100 vM = (list_of_scalar_values.ListOfScalarValues. | 97 vM = (list_of_scalar_values.ListOfScalarValues. |
101 MergeLikeValuesFromSamePage([v0, v1])) | 98 MergeLikeValuesFromSamePage([v0, v1])) |
102 self.assertEquals(page0, vM.page) | 99 self.assertEquals(page0, vM.page) |
103 self.assertEquals('x', vM.name) | 100 self.assertEquals('x', vM.name) |
104 self.assertEquals('unit', vM.units) | 101 self.assertEquals('unit', vM.units) |
105 self.assertEquals(value.CONCATENATE, vM.same_page_merge_policy) | |
106 self.assertEquals(True, vM.important) | 102 self.assertEquals(True, vM.important) |
107 self.assertEquals([10, 9, 9, 7, 300, 302, 303, 304], vM.values) | 103 self.assertEquals([10, 9, 9, 7, 300, 302, 303, 304], vM.values) |
108 # Values from the same page use regular standard deviation. | 104 # Values from the same page use regular standard deviation. |
109 self.assertAlmostEqual(156.88849, vM.std, places=4) | 105 self.assertAlmostEqual(156.88849, vM.std, places=4) |
110 self.assertEquals('list-based metric', vM.description) | 106 self.assertEquals('list-based metric', vM.description) |
111 self.assertEquals(improvement_direction.DOWN, vM.improvement_direction) | 107 self.assertEquals(improvement_direction.DOWN, vM.improvement_direction) |
112 | 108 |
113 def testListSamePageMergingWithPickFirstPolicy(self): | |
114 page0 = self.pages[0] | |
115 v0 = list_of_scalar_values.ListOfScalarValues( | |
116 page0, 'x', 'unit', | |
117 [1, 2], same_page_merge_policy=value.PICK_FIRST, | |
118 improvement_direction=improvement_direction.UP) | |
119 v1 = list_of_scalar_values.ListOfScalarValues( | |
120 page0, 'x', 'unit', | |
121 [3, 4], same_page_merge_policy=value.PICK_FIRST, | |
122 improvement_direction=improvement_direction.UP) | |
123 self.assertTrue(v1.IsMergableWith(v0)) | |
124 | |
125 vM = (list_of_scalar_values.ListOfScalarValues. | |
126 MergeLikeValuesFromSamePage([v0, v1])) | |
127 self.assertEquals(page0, vM.page) | |
128 self.assertEquals('x', vM.name) | |
129 self.assertEquals('unit', vM.units) | |
130 self.assertEquals(value.PICK_FIRST, vM.same_page_merge_policy) | |
131 self.assertEquals(True, vM.important) | |
132 self.assertEquals([1, 2], vM.values) | |
133 self.assertEquals(improvement_direction.UP, vM.improvement_direction) | |
134 | |
135 def testListDifferentPageMerging(self): | 109 def testListDifferentPageMerging(self): |
136 page0 = self.pages[0] | 110 page0 = self.pages[0] |
137 page1 = self.pages[1] | 111 page1 = self.pages[1] |
138 v0 = list_of_scalar_values.ListOfScalarValues( | 112 v0 = list_of_scalar_values.ListOfScalarValues( |
139 page0, 'x', 'unit', | 113 page0, 'x', 'unit', |
140 [10, 9, 9, 7], same_page_merge_policy=value.CONCATENATE, | 114 [10, 9, 9, 7], improvement_direction=improvement_direction.DOWN) |
141 improvement_direction=improvement_direction.DOWN) | |
142 v1 = list_of_scalar_values.ListOfScalarValues( | 115 v1 = list_of_scalar_values.ListOfScalarValues( |
143 page1, 'x', 'unit', | 116 page1, 'x', 'unit', |
144 [300, 302, 303, 304], same_page_merge_policy=value.CONCATENATE, | 117 [300, 302, 303, 304], improvement_direction=improvement_direction.DOWN) |
145 improvement_direction=improvement_direction.DOWN) | |
146 self.assertTrue(v1.IsMergableWith(v0)) | 118 self.assertTrue(v1.IsMergableWith(v0)) |
147 | 119 |
148 vM = (list_of_scalar_values.ListOfScalarValues. | 120 vM = (list_of_scalar_values.ListOfScalarValues. |
149 MergeLikeValuesFromDifferentPages([v0, v1])) | 121 MergeLikeValuesFromDifferentPages([v0, v1])) |
150 self.assertEquals(None, vM.page) | 122 self.assertEquals(None, vM.page) |
151 self.assertEquals('x', vM.name) | 123 self.assertEquals('x', vM.name) |
152 self.assertEquals('unit', vM.units) | 124 self.assertEquals('unit', vM.units) |
153 self.assertEquals(value.CONCATENATE, vM.same_page_merge_policy) | |
154 self.assertEquals(True, vM.important) | 125 self.assertEquals(True, vM.important) |
155 self.assertEquals([10, 9, 9, 7, 300, 302, 303, 304], vM.values) | 126 self.assertEquals([10, 9, 9, 7, 300, 302, 303, 304], vM.values) |
156 # Values from different pages use pooled standard deviation. | 127 # Values from different pages use pooled standard deviation. |
157 # SQRT((19/12 * 3 + 35/12 * 3)/6) = 1.5 | 128 # SQRT((19/12 * 3 + 35/12 * 3)/6) = 1.5 |
158 self.assertAlmostEqual(1.5, vM.std) | 129 self.assertAlmostEqual(1.5, vM.std) |
159 self.assertEquals(improvement_direction.DOWN, vM.improvement_direction) | 130 self.assertEquals(improvement_direction.DOWN, vM.improvement_direction) |
160 | 131 |
161 def testListWithNoneValueMerging(self): | 132 def testListWithNoneValueMerging(self): |
162 page0 = self.pages[0] | 133 page0 = self.pages[0] |
163 v0 = list_of_scalar_values.ListOfScalarValues( | 134 v0 = list_of_scalar_values.ListOfScalarValues( |
164 page0, 'x', 'unit', | 135 page0, 'x', 'unit', |
165 [1, 2], same_page_merge_policy=value.CONCATENATE, | 136 [1, 2], improvement_direction=improvement_direction.UP) |
166 improvement_direction=improvement_direction.UP) | |
167 v1 = list_of_scalar_values.ListOfScalarValues( | 137 v1 = list_of_scalar_values.ListOfScalarValues( |
168 page0, 'x', 'unit', | 138 page0, 'x', 'unit', |
169 None, same_page_merge_policy=value.CONCATENATE, none_value_reason='n', | 139 None, none_value_reason='n', |
170 improvement_direction=improvement_direction.UP) | 140 improvement_direction=improvement_direction.UP) |
171 self.assertTrue(v1.IsMergableWith(v0)) | 141 self.assertTrue(v1.IsMergableWith(v0)) |
172 | 142 |
173 vM = (list_of_scalar_values.ListOfScalarValues. | 143 vM = (list_of_scalar_values.ListOfScalarValues. |
174 MergeLikeValuesFromSamePage([v0, v1])) | 144 MergeLikeValuesFromSamePage([v0, v1])) |
175 self.assertEquals(None, vM.values) | 145 self.assertEquals(None, vM.values) |
176 self.assertEquals(none_values.MERGE_FAILURE_REASON, | 146 expected_none_value_reason = ( |
177 vM.none_value_reason) | 147 'Merging values containing a None value results in a None value. ' |
| 148 'None values: [ListOfScalarValues(http://www.bar.com/, x, unit, None, ' |
| 149 'important=True, description=None, tir_label=None, std=None,' |
| 150 ' improvement_direction=up, grouping_keys={})]') |
| 151 self.assertEquals(expected_none_value_reason, vM.none_value_reason) |
178 self.assertEquals(improvement_direction.UP, vM.improvement_direction) | 152 self.assertEquals(improvement_direction.UP, vM.improvement_direction) |
179 | 153 |
180 def testListWithNoneValueMustHaveNoneReason(self): | 154 def testListWithNoneValueMustHaveNoneReason(self): |
181 page0 = self.pages[0] | 155 page0 = self.pages[0] |
182 self.assertRaises(none_values.NoneValueMissingReason, | 156 self.assertRaises(none_values.NoneValueMissingReason, |
183 lambda: list_of_scalar_values.ListOfScalarValues( | 157 lambda: list_of_scalar_values.ListOfScalarValues( |
184 page0, 'x', 'unit', None, | 158 page0, 'x', 'unit', None, |
185 improvement_direction=improvement_direction.DOWN)) | 159 improvement_direction=improvement_direction.DOWN)) |
186 | 160 |
187 def testListWithNoneReasonMustHaveNoneValue(self): | 161 def testListWithNoneReasonMustHaveNoneValue(self): |
188 page0 = self.pages[0] | 162 page0 = self.pages[0] |
189 self.assertRaises(none_values.ValueMustHaveNoneValue, | 163 self.assertRaises(none_values.ValueMustHaveNoneValue, |
190 lambda: list_of_scalar_values.ListOfScalarValues( | 164 lambda: list_of_scalar_values.ListOfScalarValues( |
191 page0, 'x', 'unit', [1, 2], | 165 page0, 'x', 'unit', [1, 2], |
192 none_value_reason='n', | 166 none_value_reason='n', |
193 improvement_direction=improvement_direction.UP)) | 167 improvement_direction=improvement_direction.UP)) |
194 | 168 |
195 def testAsDict(self): | 169 def testAsDict(self): |
196 v = list_of_scalar_values.ListOfScalarValues( | 170 v = list_of_scalar_values.ListOfScalarValues( |
197 None, 'x', 'unit', [1, 2], | 171 None, 'x', 'unit', [1, 2], |
198 same_page_merge_policy=value.PICK_FIRST, important=False, | 172 important=False, improvement_direction=improvement_direction.DOWN) |
199 improvement_direction=improvement_direction.DOWN) | |
200 d = v.AsDictWithoutBaseClassEntries() | 173 d = v.AsDictWithoutBaseClassEntries() |
201 | 174 |
202 self.assertEquals(d['values'], [1, 2]) | 175 self.assertEquals(d['values'], [1, 2]) |
203 self.assertAlmostEqual(d['std'], 0.7071, places=4) | 176 self.assertAlmostEqual(d['std'], 0.7071, places=4) |
204 | 177 |
205 def testMergedValueAsDict(self): | 178 def testMergedValueAsDict(self): |
206 page0 = self.pages[0] | 179 page0 = self.pages[0] |
207 v0 = list_of_scalar_values.ListOfScalarValues( | 180 v0 = list_of_scalar_values.ListOfScalarValues( |
208 page0, 'x', 'unit', | 181 page0, 'x', 'unit', |
209 [10, 9, 9, 7], same_page_merge_policy=value.CONCATENATE, | 182 [10, 9, 9, 7], improvement_direction=improvement_direction.DOWN) |
210 improvement_direction=improvement_direction.DOWN) | |
211 v1 = list_of_scalar_values.ListOfScalarValues( | 183 v1 = list_of_scalar_values.ListOfScalarValues( |
212 page0, 'x', 'unit', | 184 page0, 'x', 'unit', |
213 [300, 302, 303, 304], same_page_merge_policy=value.CONCATENATE, | 185 [300, 302, 303, 304], improvement_direction=improvement_direction.DOWN) |
214 improvement_direction=improvement_direction.DOWN) | |
215 self.assertTrue(v1.IsMergableWith(v0)) | 186 self.assertTrue(v1.IsMergableWith(v0)) |
216 | 187 |
217 vM = (list_of_scalar_values.ListOfScalarValues. | 188 vM = (list_of_scalar_values.ListOfScalarValues. |
218 MergeLikeValuesFromSamePage([v0, v1])) | 189 MergeLikeValuesFromSamePage([v0, v1])) |
219 d = vM.AsDict() | 190 d = vM.AsDict() |
220 self.assertEquals(d['values'], [10, 9, 9, 7, 300, 302, 303, 304]) | 191 self.assertEquals(d['values'], [10, 9, 9, 7, 300, 302, 303, 304]) |
221 # Values from the same page use regular standard deviation. | 192 # Values from the same page use regular standard deviation. |
222 self.assertAlmostEqual(d['std'], 156.88849, places=4) | 193 self.assertAlmostEqual(d['std'], 156.88849, places=4) |
223 | 194 |
224 | 195 |
225 def testNoneValueAsDict(self): | 196 def testNoneValueAsDict(self): |
226 v = list_of_scalar_values.ListOfScalarValues( | 197 v = list_of_scalar_values.ListOfScalarValues( |
227 None, 'x', 'unit', None, same_page_merge_policy=value.PICK_FIRST, | 198 None, 'x', 'unit', None, |
228 important=False, none_value_reason='n', | 199 important=False, none_value_reason='n', |
229 improvement_direction=improvement_direction.UP) | 200 improvement_direction=improvement_direction.UP) |
230 d = v.AsDictWithoutBaseClassEntries() | 201 d = v.AsDictWithoutBaseClassEntries() |
231 | 202 |
232 self.assertEquals(d, { | 203 self.assertEquals(d, { |
233 'values': None, | 204 'values': None, |
234 'none_value_reason': 'n', | 205 'none_value_reason': 'n', |
235 'std': None | 206 'std': None |
236 }) | 207 }) |
237 | 208 |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
287 'values': None, | 258 'values': None, |
288 'std': None, | 259 'std': None, |
289 'none_value_reason': 'n', | 260 'none_value_reason': 'n', |
290 'improvement_direction': improvement_direction.DOWN | 261 'improvement_direction': improvement_direction.DOWN |
291 } | 262 } |
292 v = value.Value.FromDict(d, {}) | 263 v = value.Value.FromDict(d, {}) |
293 | 264 |
294 self.assertTrue(isinstance(v, list_of_scalar_values.ListOfScalarValues)) | 265 self.assertTrue(isinstance(v, list_of_scalar_values.ListOfScalarValues)) |
295 self.assertEquals(v.values, None) | 266 self.assertEquals(v.values, None) |
296 self.assertEquals(v.none_value_reason, 'n') | 267 self.assertEquals(v.none_value_reason, 'n') |
OLD | NEW |