// Copyright © 2024 Rot127 // SPDX-License-Identifier: BSD-3 #ifndef TESTRUN_H #define TESTRUN_H #include "test_case.h" #include typedef enum { TEST_RUN_SUCCESS = 0, ///< All test cases succeeded. TEST_RUN_FAILURE = 1, ///< At least one test case failed. TEST_RUN_ERROR = 2, ///< Test run had errors. } TestRunResult; typedef struct { uint32_t valid_test_files; ///< Total number of test files. uint32_t invalid_files; ///< Number of invalid files. uint32_t tc_total; ///< Total number of test cases. uint32_t successful; ///< Number of successful test cases. uint32_t failed; ///< Number of failed test cases. uint32_t errors; ///< Number errors (parsing errors etc). uint32_t skipped; ///< Number skipped test cases. uint32_t decoded_insns; ///< Number of total decoded instructions. } TestRunStats; typedef struct { uint32_t case_cnt; TestCase *cases; } TestRun; /* CYAML configuration. */ static const cyaml_config_t cyaml_config = { .log_fn = cyaml_log, /* Use the default logging function. */ .mem_fn = cyaml_mem, /* Use the default memory allocator. */ .log_level = CYAML_LOG_WARNING, /* Logging errors and warnings only. */ }; typedef struct { size_t arch_bits; ///< Bits of the architecture. TestCase *tcase; ///< The test case to check. csh handle; ///< The Capstone instance for this test. Setup and teared down by the cmocka handlers. uint32_t decoded_insns; ///< Counts the number of decoded instructions of this test case. } UnitTestState; TestRunResult cstest_run_tests(char **test_file_paths, uint32_t path_count, TestRunStats *stats); #endif // TESTRUN_H