| 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 expected_none_value_reason = ( | 146 expected_none_value_reason = ( |
| 177 'Merging values containing a None value results in a None value. ' | 147 'Merging values containing a None value results in a None value. ' |
| 178 'None values: [ListOfScalarValues(http://www.bar.com/, x, unit, None, ' | 148 'None values: [ListOfScalarValues(http://www.bar.com/, x, unit, None, ' |
| 179 'important=True, description=None, tir_label=None, std=None,' | 149 'important=True, description=None, tir_label=None, std=None,' |
| 180 ' same_page_merge_policy=CONCATENATE, improvement_direction=up, ' | 150 ' improvement_direction=up, grouping_keys={})]') |
| 181 'grouping_keys={})]') | |
| 182 self.assertEquals(expected_none_value_reason, vM.none_value_reason) | 151 self.assertEquals(expected_none_value_reason, vM.none_value_reason) |
| 183 self.assertEquals(improvement_direction.UP, vM.improvement_direction) | 152 self.assertEquals(improvement_direction.UP, vM.improvement_direction) |
| 184 | 153 |
| 185 def testListWithNoneValueMustHaveNoneReason(self): | 154 def testListWithNoneValueMustHaveNoneReason(self): |
| 186 page0 = self.pages[0] | 155 page0 = self.pages[0] |
| 187 self.assertRaises(none_values.NoneValueMissingReason, | 156 self.assertRaises(none_values.NoneValueMissingReason, |
| 188 lambda: list_of_scalar_values.ListOfScalarValues( | 157 lambda: list_of_scalar_values.ListOfScalarValues( |
| 189 page0, 'x', 'unit', None, | 158 page0, 'x', 'unit', None, |
| 190 improvement_direction=improvement_direction.DOWN)) | 159 improvement_direction=improvement_direction.DOWN)) |
| 191 | 160 |
| 192 def testListWithNoneReasonMustHaveNoneValue(self): | 161 def testListWithNoneReasonMustHaveNoneValue(self): |
| 193 page0 = self.pages[0] | 162 page0 = self.pages[0] |
| 194 self.assertRaises(none_values.ValueMustHaveNoneValue, | 163 self.assertRaises(none_values.ValueMustHaveNoneValue, |
| 195 lambda: list_of_scalar_values.ListOfScalarValues( | 164 lambda: list_of_scalar_values.ListOfScalarValues( |
| 196 page0, 'x', 'unit', [1, 2], | 165 page0, 'x', 'unit', [1, 2], |
| 197 none_value_reason='n', | 166 none_value_reason='n', |
| 198 improvement_direction=improvement_direction.UP)) | 167 improvement_direction=improvement_direction.UP)) |
| 199 | 168 |
| 200 def testAsDict(self): | 169 def testAsDict(self): |
| 201 v = list_of_scalar_values.ListOfScalarValues( | 170 v = list_of_scalar_values.ListOfScalarValues( |
| 202 None, 'x', 'unit', [1, 2], | 171 None, 'x', 'unit', [1, 2], |
| 203 same_page_merge_policy=value.PICK_FIRST, important=False, | 172 important=False, improvement_direction=improvement_direction.DOWN) |
| 204 improvement_direction=improvement_direction.DOWN) | |
| 205 d = v.AsDictWithoutBaseClassEntries() | 173 d = v.AsDictWithoutBaseClassEntries() |
| 206 | 174 |
| 207 self.assertEquals(d['values'], [1, 2]) | 175 self.assertEquals(d['values'], [1, 2]) |
| 208 self.assertAlmostEqual(d['std'], 0.7071, places=4) | 176 self.assertAlmostEqual(d['std'], 0.7071, places=4) |
| 209 | 177 |
| 210 def testMergedValueAsDict(self): | 178 def testMergedValueAsDict(self): |
| 211 page0 = self.pages[0] | 179 page0 = self.pages[0] |
| 212 v0 = list_of_scalar_values.ListOfScalarValues( | 180 v0 = list_of_scalar_values.ListOfScalarValues( |
| 213 page0, 'x', 'unit', | 181 page0, 'x', 'unit', |
| 214 [10, 9, 9, 7], same_page_merge_policy=value.CONCATENATE, | 182 [10, 9, 9, 7], improvement_direction=improvement_direction.DOWN) |
| 215 improvement_direction=improvement_direction.DOWN) | |
| 216 v1 = list_of_scalar_values.ListOfScalarValues( | 183 v1 = list_of_scalar_values.ListOfScalarValues( |
| 217 page0, 'x', 'unit', | 184 page0, 'x', 'unit', |
| 218 [300, 302, 303, 304], same_page_merge_policy=value.CONCATENATE, | 185 [300, 302, 303, 304], improvement_direction=improvement_direction.DOWN) |
| 219 improvement_direction=improvement_direction.DOWN) | |
| 220 self.assertTrue(v1.IsMergableWith(v0)) | 186 self.assertTrue(v1.IsMergableWith(v0)) |
| 221 | 187 |
| 222 vM = (list_of_scalar_values.ListOfScalarValues. | 188 vM = (list_of_scalar_values.ListOfScalarValues. |
| 223 MergeLikeValuesFromSamePage([v0, v1])) | 189 MergeLikeValuesFromSamePage([v0, v1])) |
| 224 d = vM.AsDict() | 190 d = vM.AsDict() |
| 225 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]) |
| 226 # Values from the same page use regular standard deviation. | 192 # Values from the same page use regular standard deviation. |
| 227 self.assertAlmostEqual(d['std'], 156.88849, places=4) | 193 self.assertAlmostEqual(d['std'], 156.88849, places=4) |
| 228 | 194 |
| 229 | 195 |
| 230 def testNoneValueAsDict(self): | 196 def testNoneValueAsDict(self): |
| 231 v = list_of_scalar_values.ListOfScalarValues( | 197 v = list_of_scalar_values.ListOfScalarValues( |
| 232 None, 'x', 'unit', None, same_page_merge_policy=value.PICK_FIRST, | 198 None, 'x', 'unit', None, |
| 233 important=False, none_value_reason='n', | 199 important=False, none_value_reason='n', |
| 234 improvement_direction=improvement_direction.UP) | 200 improvement_direction=improvement_direction.UP) |
| 235 d = v.AsDictWithoutBaseClassEntries() | 201 d = v.AsDictWithoutBaseClassEntries() |
| 236 | 202 |
| 237 self.assertEquals(d, { | 203 self.assertEquals(d, { |
| 238 'values': None, | 204 'values': None, |
| 239 'none_value_reason': 'n', | 205 'none_value_reason': 'n', |
| 240 'std': None | 206 'std': None |
| 241 }) | 207 }) |
| 242 | 208 |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 292 'values': None, | 258 'values': None, |
| 293 'std': None, | 259 'std': None, |
| 294 'none_value_reason': 'n', | 260 'none_value_reason': 'n', |
| 295 'improvement_direction': improvement_direction.DOWN | 261 'improvement_direction': improvement_direction.DOWN |
| 296 } | 262 } |
| 297 v = value.Value.FromDict(d, {}) | 263 v = value.Value.FromDict(d, {}) |
| 298 | 264 |
| 299 self.assertTrue(isinstance(v, list_of_scalar_values.ListOfScalarValues)) | 265 self.assertTrue(isinstance(v, list_of_scalar_values.ListOfScalarValues)) |
| 300 self.assertEquals(v.values, None) | 266 self.assertEquals(v.values, None) |
| 301 self.assertEquals(v.none_value_reason, 'n') | 267 self.assertEquals(v.none_value_reason, 'n') |
| OLD | NEW |