68 lines
2.1 KiB
Python
68 lines
2.1 KiB
Python
#!/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()
|