aboutsummaryrefslogtreecommitdiff
path: root/user_activity_benchmarks/benchmark_metrics_unittest.py
blob: a48361fe296a70e586e1ece213b0a15a1700ae0f (plain)
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
#!/usr/bin/python2

# Copyright 2016 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Unit tests for the benchmark_metrics module."""

import mock
import unittest
import benchmark_metrics


class MetricsComputationTest(unittest.TestCase):
  """Test class for MetricsComputation class."""

  def __init__(self, *args, **kwargs):
    super(MetricsComputationTest, self).__init__(*args, **kwargs)

  def testComputeDistanceForFunction(self):
    child_functions_statistics_sample = {
        'f,file_f': 0.1,
        'g,file_g': 0.2,
        'h,file_h': 0.3,
        'i,file_i': 0.4
    }
    child_functions_statistics_reference = {
        'f,file_f': 0.4,
        'i,file_i': 0.4,
        'h,file_h2': 0.2
    }
    distance = benchmark_metrics.ComputeDistanceForFunction(
        child_functions_statistics_sample, child_functions_statistics_reference)
    self.assertEqual(distance, 2.0)

    distance = benchmark_metrics.ComputeDistanceForFunction({}, {})
    self.assertEqual(distance, 1.0)

    distance = benchmark_metrics.ComputeDistanceForFunction(
        child_functions_statistics_sample, {})
    self.assertEqual(distance, 2.0)

    distance = benchmark_metrics.ComputeDistanceForFunction(
        {}, child_functions_statistics_reference)
    self.assertEqual(distance, 2.0)

  def testComputeScoreForFunction(self):
    score = benchmark_metrics.ComputeScoreForFunction(1.2, 0.3, 0.4)
    self.assertEqual(score, 0.1)

  def testComputeMetricsForComponents(self):
    function_metrics = {
        'func_f,/a/b/file_f': (1.0, 2.3),
        'func_g,/a/b/file_g': (1.1, 1.5),
        'func_h,/c/d/file_h': (2.0, 1.7),
        'func_i,/c/d/file_i': (1.9, 1.8),
        'func_j,/c/d/file_j': (1.8, 1.9),
        'func_k,/e/file_k': (1.2, 2.1),
        'func_l,/e/file_l': (1.3, 3.1)
    }
    cwp_function_groups = [('ab', '/a/b'), ('cd', '/c/d'), ('e', '/e')]
    expected_metrics = {'ab': ('/a/b', 2.0, 2.1, 1.05, 3.8, 1.9),
                        'e': ('/e', 2.0, 2.5, 1.25, 5.2, 2.6),
                        'cd': ('/c/d', 3.0, 5.7, 1.9000000000000001, 5.4, 1.8)}
    result_metrics = benchmark_metrics.ComputeMetricsForComponents(
        cwp_function_groups, function_metrics)

    self.assertDictEqual(expected_metrics, result_metrics)

  def testComputeMetricsForBenchmark(self):
    function_metrics = {'func_f': (1.0, 2.0),
                        'func_g': (1.1, 2.1),
                        'func_h': (1.2, 2.2),
                        'func_i': (1.3, 2.3)}
    expected_benchmark_metrics = \
        (4, 4.6000000000000005, 1.1500000000000001, 8.6, 2.15)
    result_benchmark_metrics = \
        benchmark_metrics.ComputeMetricsForBenchmark(function_metrics)

    self.assertEqual(expected_benchmark_metrics, result_benchmark_metrics)

  def testComputeMetricsForBenchmarkSet(self):
    """TODO(evelinad): Add unit test for ComputeMetricsForBenchmarkSet."""
    pass


if __name__ == '__main__':
  unittest.main()