blob: a25c440592f513f4796383afebf7e90f291bddb8 [file] [log] [blame]
#!/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)