| """TOSA test runner module for the Reference Model.""" |
| # Copyright (c) 2020-2022, ARM Limited. |
| # SPDX-License-Identifier: Apache-2.0 |
| from enum import IntEnum |
| from enum import unique |
| |
| from runner.run_command import run_sh_command |
| from runner.run_command import RunShCommandError |
| from runner.tosa_test_runner import TosaTestRunner |
| |
| |
| @unique |
| class TosaRefReturnCode(IntEnum): |
| """Return codes from the Tosa Reference Model.""" |
| |
| VALID = 0 |
| UNPREDICTABLE = 1 |
| ERROR = 2 |
| |
| |
| class TosaSUTRunner(TosaTestRunner): |
| """TOSA Reference Model runner.""" |
| |
| def __init__(self, args, runnerArgs, testDirPath): |
| """Initialize using the given test details.""" |
| super().__init__(args, runnerArgs, testDirPath) |
| |
| def runTestGraph(self): |
| """Run the test on the reference model.""" |
| # Build up the TOSA reference command line |
| # Uses arguments from the argParser args, not the runnerArgs |
| args = self.args |
| |
| # Call Reference model with description file to provide all file details |
| cmd = [ |
| args.ref_model_path, |
| "--tosa_level={}".format(args.tosa_level), |
| "--operator_fbs={}".format(args.operator_fbs), |
| "--test_desc={}".format(self.descFile), |
| ] |
| |
| # Specific debug options for reference model |
| if args.ref_debug: |
| cmd.extend(["-d", "ALL", "-l", args.ref_debug]) |
| |
| if args.ref_intermediates: |
| cmd.extend(["--dump_intermediates", str(args.ref_intermediates)]) |
| |
| if args.precise_mode: |
| cmd.extend(["--precise_mode=1"]) |
| |
| # Run command and interpret tosa graph result via process return codes |
| graphMessage = None |
| try: |
| run_sh_command(cmd, self.args.verbose, capture_output=True) |
| graphResult = TosaTestRunner.TosaGraphResult.TOSA_VALID |
| except RunShCommandError as e: |
| graphMessage = e.stderr |
| if e.return_code == TosaRefReturnCode.ERROR: |
| graphResult = TosaTestRunner.TosaGraphResult.TOSA_ERROR |
| elif e.return_code == TosaRefReturnCode.UNPREDICTABLE: |
| graphResult = TosaTestRunner.TosaGraphResult.TOSA_UNPREDICTABLE |
| else: |
| graphResult = TosaTestRunner.TosaGraphResult.OTHER_ERROR |
| if not self.args.verbose: |
| print(e) |
| except Exception as e: |
| print(e) |
| graphMessage = str(e) |
| graphResult = TosaTestRunner.TosaGraphResult.OTHER_ERROR |
| |
| # Return graph result and message |
| return graphResult, graphMessage |