| #!/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(['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) |