Files
OSACA/tests/test_kerncraftAPI.py
2021-03-11 12:02:45 +01:00

92 lines
2.6 KiB
Python
Executable File

#!/usr/bin/env python3
"""
Unit tests for OSACA Kerncraft API
"""
import os
import unittest
from collections import OrderedDict
from osaca.api import KerncraftAPI
from osaca.parser import ParserAArch64, ParserX86ATT
class TestKerncraftAPI(unittest.TestCase):
@classmethod
def setUpClass(self):
# set up parser and kernels
self.parser_x86 = ParserX86ATT()
self.parser_AArch64 = ParserAArch64()
with open(self._find_file("triad_x86_iaca.s")) as f:
self.code_x86 = f.read()
with open(self._find_file("triad_arm_iaca.s")) as f:
self.code_AArch64 = f.read()
###########
# Tests
###########
def test_kerncraft_API_x86(self):
kapi = KerncraftAPI("csx", self.code_x86)
kapi.create_output()
self.assertEqual(kapi.get_unmatched_instruction_ratio(), 0.0)
port_occupation = OrderedDict(
[
("0", 1.25),
("0DV", 0.0),
("1", 1.25),
("2", 2.0),
("2D", 1.5),
("3", 2.0),
("3D", 1.5),
("4", 1.0),
("5", 0.75),
("6", 0.75),
("7", 0.0),
]
)
self.assertEqual(kapi.get_port_occupation_cycles(), port_occupation)
self.assertEqual(kapi.get_total_throughput(), 2.0)
# TODO: LCD would be 2 with OF flag LCD --> still to discuss
self.assertEqual(kapi.get_latency(), (1.0, 8.0))
def test_kerncraft_API_AArch64(self):
kapi = KerncraftAPI("tx2", self.code_AArch64)
kapi.create_output()
self.assertEqual(kapi.get_unmatched_instruction_ratio(), 0.0)
port_occupation = OrderedDict(
[
("0", 34.0),
("0DV", 0.0),
("1", 34.0),
("1DV", 0.0),
("2", 3.0),
("3", 64.0),
("4", 64.0),
("5", 32.0),
]
)
self.assertEqual(kapi.get_port_occupation_cycles(), port_occupation)
self.assertEqual(kapi.get_total_throughput(), 64.0)
# TODO add missing latency values
# self.assertEqual(kapi.get_latency(kernel), 20.0)
##################
# Helper functions
##################
@staticmethod
def _find_file(name):
testdir = os.path.dirname(__file__)
name = os.path.join(testdir, "test_files", name)
assert os.path.exists(name)
return name
if __name__ == "__main__":
suite = unittest.TestLoader().loadTestsFromTestCase(TestKerncraftAPI)
unittest.TextTestRunner(verbosity=2).run(suite)