aboutsummaryrefslogtreecommitdiff
path: root/scripts/incremental_build/perf_metrics_test.py
blob: 119bdc10dc371cc121e262577b7d9d2804cc2956 (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
#!/usr/bin/env python3

# Copyright (C) 2022 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import dataclasses
import unittest

from perf_metrics import _get_column_headers


def to_row(concatenated_keys: str) -> dict:
  return {c: None for c in concatenated_keys}


class PerfMetricsTest(unittest.TestCase):
  """Tests utility functions. This is not Perf Test itself."""

  def test_get_column_headers(self):

    @dataclasses.dataclass
    class Example:
      # each string = concatenated keys of the row object
      row_keysets: list[str]
      # concatenated headers
      expected_headers: str

    examples: list[Example] = [
      Example(['a'], 'a'),
      Example(['ac', 'bd'], 'abcd'),
      Example(['abe', 'cde'], 'abcde'),
      Example(['ab', 'ba'], 'ab'),
      Example(['abcde', 'edcba'], 'abcde'),
      Example(['ac', 'abc'], 'abc')
    ]
    for e in examples:
      rows = [to_row(kz) for kz in e.row_keysets]
      expected_headers = [*e.expected_headers]
      with self.subTest(rows=rows, expected_headers=expected_headers):
        self.assertEqual(_get_column_headers(rows, allow_cycles=True),
                         expected_headers)

  def test_cycles(self):
    examples = [
      (['ab', 'ba'], 'a->b->a'),
      (['abcd', 'db'], 'b->c->d->b')
    ]
    for (e, cycle) in examples:
      rows = [to_row(kz) for kz in e]
      with self.subTest(rows=rows, cycle=cycle):
        with self.assertRaisesRegex(ValueError,
                                    f'event ordering has a cycle {cycle}'):
          _get_column_headers(rows, allow_cycles=False)


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