PageRenderTime 45ms CodeModel.GetById 18ms RepoModel.GetById 0ms app.codeStats 0ms

/tools/telemetry/telemetry/value/list_of_scalar_values_unittest.py

https://gitlab.com/jonnialva90/iridium-browser
Python | 277 lines | 238 code | 34 blank | 5 comment | 0 complexity | 88703bf6d9606831c73d3703abb5015e MD5 | raw file
  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
  3. # found in the LICENSE file.
  4. import os
  5. import unittest
  6. from telemetry import story
  7. from telemetry import page as page_module
  8. from telemetry import value
  9. from telemetry.value import improvement_direction
  10. from telemetry.value import list_of_scalar_values
  11. from telemetry.value import none_values
  12. class StatisticComputationTest(unittest.TestCase):
  13. def testVariance(self):
  14. self.assertAlmostEqual(
  15. list_of_scalar_values.Variance([]), 0)
  16. self.assertAlmostEqual(
  17. list_of_scalar_values.Variance([3]), 0)
  18. self.assertAlmostEqual(
  19. list_of_scalar_values.Variance([600, 470, 170, 430, 300]), 27130)
  20. def testStandardDeviation(self):
  21. self.assertAlmostEqual(
  22. list_of_scalar_values.StandardDeviation([]), 0)
  23. self.assertAlmostEqual(
  24. list_of_scalar_values.StandardDeviation([1]), 0)
  25. self.assertAlmostEqual(
  26. list_of_scalar_values.StandardDeviation([600, 470, 170, 430, 300]),
  27. 164.71186, places=4)
  28. def testPooledVariance(self):
  29. self.assertAlmostEqual(
  30. list_of_scalar_values.PooledStandardDeviation([[], [], []]), 0)
  31. self.assertAlmostEqual(
  32. list_of_scalar_values.PooledStandardDeviation([[1], [], [3], []]), 0)
  33. self.assertAlmostEqual(
  34. list_of_scalar_values.PooledStandardDeviation([[1], [2], [3], [4]]), 0)
  35. self.assertAlmostEqual(list_of_scalar_values.PooledStandardDeviation(
  36. [[600, 470, 170, 430, 300], # variance = 27130, std = 164.7
  37. [4000, 4020, 4230], # variance = 16233, std = 127.41
  38. [260, 700, 800, 900, 0, 120, 150]]), # variance = 136348, std = 369.2
  39. 282.7060, # SQRT((27130 4 + 16233*2 + 136348*6)/12)
  40. places=4)
  41. self.assertAlmostEqual(list_of_scalar_values.PooledStandardDeviation(
  42. [[600, 470, 170, 430, 300],
  43. [4000, 4020, 4230],
  44. [260, 700, 800, 900, 0, 120, 150]],
  45. list_of_variances=[100000, 200000, 300000]),
  46. 465.47466, # SQRT((100000*4 + 200000* 2 + 300000*6)/12)
  47. places=4)
  48. class TestBase(unittest.TestCase):
  49. def setUp(self):
  50. story_set = story.StorySet(base_dir=os.path.dirname(__file__))
  51. story_set.AddStory(
  52. page_module.Page('http://www.bar.com/', story_set, story_set.base_dir))
  53. story_set.AddStory(
  54. page_module.Page('http://www.baz.com/', story_set, story_set.base_dir))
  55. story_set.AddStory(
  56. page_module.Page('http://www.foo.com/', story_set, story_set.base_dir))
  57. self.story_set = story_set
  58. @property
  59. def pages(self):
  60. return self.story_set.stories
  61. class ValueTest(TestBase):
  62. def testRepr(self):
  63. page = self.pages[0]
  64. v = list_of_scalar_values.ListOfScalarValues(
  65. page, 'x', 'unit', [10, 9, 9, 7], important=True, description='desc',
  66. tir_label='my_ir', std=42, same_page_merge_policy=value.CONCATENATE,
  67. improvement_direction=improvement_direction.DOWN)
  68. expected = ('ListOfScalarValues(http://www.bar.com/, x, unit, '
  69. '[10, 9, 9, 7], important=True, description=desc, '
  70. 'tir_label=my_ir, std=42, '
  71. 'same_page_merge_policy=CONCATENATE, '
  72. 'improvement_direction=down)')
  73. self.assertEquals(expected, str(v))
  74. def testListSamePageMergingWithSamePageConcatenatePolicy(self):
  75. page0 = self.pages[0]
  76. v0 = list_of_scalar_values.ListOfScalarValues(
  77. page0, 'x', 'unit',
  78. [10, 9, 9, 7], same_page_merge_policy=value.CONCATENATE,
  79. improvement_direction=improvement_direction.DOWN)
  80. v1 = list_of_scalar_values.ListOfScalarValues(
  81. page0, 'x', 'unit',
  82. [300, 302, 303, 304], same_page_merge_policy=value.CONCATENATE,
  83. improvement_direction=improvement_direction.DOWN)
  84. self.assertTrue(v1.IsMergableWith(v0))
  85. vM = (list_of_scalar_values.ListOfScalarValues.
  86. MergeLikeValuesFromSamePage([v0, v1]))
  87. self.assertEquals(page0, vM.page)
  88. self.assertEquals('x', vM.name)
  89. self.assertEquals('unit', vM.units)
  90. self.assertEquals(value.CONCATENATE, vM.same_page_merge_policy)
  91. self.assertEquals(True, vM.important)
  92. self.assertEquals([10, 9, 9, 7, 300, 302, 303, 304], vM.values)
  93. # SQRT((19/12 * 3 + 35/12 * 3)/6) = 1.5
  94. self.assertAlmostEqual(1.5, vM.std)
  95. self.assertEquals(improvement_direction.DOWN, vM.improvement_direction)
  96. def testListSamePageMergingWithPickFirstPolicy(self):
  97. page0 = self.pages[0]
  98. v0 = list_of_scalar_values.ListOfScalarValues(
  99. page0, 'x', 'unit',
  100. [1, 2], same_page_merge_policy=value.PICK_FIRST,
  101. improvement_direction=improvement_direction.UP)
  102. v1 = list_of_scalar_values.ListOfScalarValues(
  103. page0, 'x', 'unit',
  104. [3, 4], same_page_merge_policy=value.PICK_FIRST,
  105. improvement_direction=improvement_direction.UP)
  106. self.assertTrue(v1.IsMergableWith(v0))
  107. vM = (list_of_scalar_values.ListOfScalarValues.
  108. MergeLikeValuesFromSamePage([v0, v1]))
  109. self.assertEquals(page0, vM.page)
  110. self.assertEquals('x', vM.name)
  111. self.assertEquals('unit', vM.units)
  112. self.assertEquals(value.PICK_FIRST, vM.same_page_merge_policy)
  113. self.assertEquals(True, vM.important)
  114. self.assertEquals([1, 2], vM.values)
  115. self.assertEquals(improvement_direction.UP, vM.improvement_direction)
  116. def testListDifferentPageMerging(self):
  117. page0 = self.pages[0]
  118. page1 = self.pages[1]
  119. v0 = list_of_scalar_values.ListOfScalarValues(
  120. page0, 'x', 'unit',
  121. [1, 2], same_page_merge_policy=value.CONCATENATE,
  122. improvement_direction=improvement_direction.DOWN)
  123. v1 = list_of_scalar_values.ListOfScalarValues(
  124. page1, 'x', 'unit',
  125. [3, 4], same_page_merge_policy=value.CONCATENATE,
  126. improvement_direction=improvement_direction.DOWN)
  127. self.assertTrue(v1.IsMergableWith(v0))
  128. vM = (list_of_scalar_values.ListOfScalarValues.
  129. MergeLikeValuesFromDifferentPages([v0, v1]))
  130. self.assertEquals(None, vM.page)
  131. self.assertEquals('x', vM.name)
  132. self.assertEquals('unit', vM.units)
  133. self.assertEquals(value.CONCATENATE, vM.same_page_merge_policy)
  134. self.assertEquals(True, vM.important)
  135. self.assertEquals([1, 2, 3, 4], vM.values)
  136. self.assertEquals(improvement_direction.DOWN, vM.improvement_direction)
  137. def testListWithNoneValueMerging(self):
  138. page0 = self.pages[0]
  139. v0 = list_of_scalar_values.ListOfScalarValues(
  140. page0, 'x', 'unit',
  141. [1, 2], same_page_merge_policy=value.CONCATENATE,
  142. improvement_direction=improvement_direction.UP)
  143. v1 = list_of_scalar_values.ListOfScalarValues(
  144. page0, 'x', 'unit',
  145. None, same_page_merge_policy=value.CONCATENATE, none_value_reason='n',
  146. improvement_direction=improvement_direction.UP)
  147. self.assertTrue(v1.IsMergableWith(v0))
  148. vM = (list_of_scalar_values.ListOfScalarValues.
  149. MergeLikeValuesFromSamePage([v0, v1]))
  150. self.assertEquals(None, vM.values)
  151. self.assertEquals(none_values.MERGE_FAILURE_REASON,
  152. vM.none_value_reason)
  153. self.assertEquals(improvement_direction.UP, vM.improvement_direction)
  154. def testListWithNoneValueMustHaveNoneReason(self):
  155. page0 = self.pages[0]
  156. self.assertRaises(none_values.NoneValueMissingReason,
  157. lambda: list_of_scalar_values.ListOfScalarValues(
  158. page0, 'x', 'unit', None,
  159. improvement_direction=improvement_direction.DOWN))
  160. def testListWithNoneReasonMustHaveNoneValue(self):
  161. page0 = self.pages[0]
  162. self.assertRaises(none_values.ValueMustHaveNoneValue,
  163. lambda: list_of_scalar_values.ListOfScalarValues(
  164. page0, 'x', 'unit', [1, 2],
  165. none_value_reason='n',
  166. improvement_direction=improvement_direction.UP))
  167. def testAsDict(self):
  168. v = list_of_scalar_values.ListOfScalarValues(
  169. None, 'x', 'unit', [1, 2],
  170. same_page_merge_policy=value.PICK_FIRST, important=False,
  171. improvement_direction=improvement_direction.DOWN)
  172. d = v.AsDictWithoutBaseClassEntries()
  173. self.assertEquals(d['values'], [1, 2])
  174. self.assertAlmostEqual(d['std'], 0.7071, places=4)
  175. def testMergedValueAsDict(self):
  176. page0 = self.pages[0]
  177. v0 = list_of_scalar_values.ListOfScalarValues(
  178. page0, 'x', 'unit',
  179. [10, 9, 9, 7], same_page_merge_policy=value.CONCATENATE,
  180. improvement_direction=improvement_direction.DOWN)
  181. v1 = list_of_scalar_values.ListOfScalarValues(
  182. page0, 'x', 'unit',
  183. [300, 302, 303, 304], same_page_merge_policy=value.CONCATENATE,
  184. improvement_direction=improvement_direction.DOWN)
  185. self.assertTrue(v1.IsMergableWith(v0))
  186. vM = (list_of_scalar_values.ListOfScalarValues.
  187. MergeLikeValuesFromSamePage([v0, v1]))
  188. d = vM.AsDict()
  189. self.assertEquals(d['values'], [10, 9, 9, 7, 300, 302, 303, 304])
  190. # SQRT((19/12 * 3 + 35/12 * 3)/6)
  191. self.assertAlmostEqual(d['std'], 1.5)
  192. def testNoneValueAsDict(self):
  193. v = list_of_scalar_values.ListOfScalarValues(
  194. None, 'x', 'unit', None, same_page_merge_policy=value.PICK_FIRST,
  195. important=False, none_value_reason='n',
  196. improvement_direction=improvement_direction.UP)
  197. d = v.AsDictWithoutBaseClassEntries()
  198. self.assertEquals(d, {
  199. 'values': None,
  200. 'none_value_reason': 'n',
  201. 'std': None
  202. })
  203. def testFromDictInts(self):
  204. d = {
  205. 'type': 'list_of_scalar_values',
  206. 'name': 'x',
  207. 'units': 'unit',
  208. 'values': [1, 2],
  209. 'std': 0.7071,
  210. 'improvement_direction': improvement_direction.DOWN
  211. }
  212. v = value.Value.FromDict(d, {})
  213. self.assertTrue(isinstance(v, list_of_scalar_values.ListOfScalarValues))
  214. self.assertEquals(v.values, [1, 2])
  215. self.assertEquals(v.std, 0.7071)
  216. self.assertEquals(improvement_direction.DOWN, v.improvement_direction)
  217. def testFromDictFloats(self):
  218. d = {
  219. 'type': 'list_of_scalar_values',
  220. 'name': 'x',
  221. 'units': 'unit',
  222. 'values': [1.3, 2.7, 4.5, 2.1, 3.4],
  223. 'std': 0.901,
  224. 'improvement_direction': improvement_direction.UP
  225. }
  226. v = value.Value.FromDict(d, {})
  227. self.assertTrue(isinstance(v, list_of_scalar_values.ListOfScalarValues))
  228. self.assertEquals(v.values, [1.3, 2.7, 4.5, 2.1, 3.4])
  229. self.assertEquals(v.std, 0.901)
  230. def testFromDictNoneValue(self):
  231. d = {
  232. 'type': 'list_of_scalar_values',
  233. 'name': 'x',
  234. 'units': 'unit',
  235. 'values': None,
  236. 'std': None,
  237. 'none_value_reason': 'n',
  238. 'improvement_direction': improvement_direction.DOWN
  239. }
  240. v = value.Value.FromDict(d, {})
  241. self.assertTrue(isinstance(v, list_of_scalar_values.ListOfScalarValues))
  242. self.assertEquals(v.values, None)
  243. self.assertEquals(v.none_value_reason, 'n')