wasm-micro-runtime/tests/requirement-engineering/gc-aot/run.py

104 lines
3.3 KiB
Python
Raw Normal View History

#!/usr/bin/python3
#
# Copyright (C) 2019 Intel Corporation. All rights reserved.
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
#
import os
import argparse
from typing import List, Dict, Tuple
import json
WORK_DIR = os.getcwd()
WAMR_DIR = os.path.join(WORK_DIR, "../../..")
IWASM_CMD = os.path.join(
WORK_DIR, "../../../product-mini/platforms/linux/build/iwasm")
WAMRC_CMD = os.path.join(WORK_DIR, "../../../wamr-compiler/build/wamrc")
SUBREQUIREMENT_DESCRIPTIONS = {
1: ("633", "Modify existing opcodes to conform to the semantics of the GC proposal when needed."),
2: ("634", "Supporting new GC opcodes(semantics of GC MVP proposal spec)."),
3: ("635", "Supporting new GC opcode(semantics of Binaryen GC spec)."),
}
def test_subrequirement(id: int) -> Dict[Tuple[str, str], bool]:
print(f"\n============> test gc aot requirement: {id}")
test_cases = {}
result = {}
with open('test_cases.json') as config_file:
config = json.load(config_file)
for req in config["sub-requirements"]:
if req['req_id'] == id:
test_cases = req['cases']
break
for case in test_cases:
print(case)
print(f"{case['name']}.aot")
exit_status = os.system(
f"python runtest.py --aot --wast2wasm spec/interpreter/wasm --interpreter {IWASM_CMD} --aot-compiler {WAMRC_CMD} --gc wasm-apps/{case['name']}.wast"
)
if exit_status == 0:
result[case['name'], case['description']] = True
else:
result[case['name'], case['description']] = False
return result
def run(
output_dir: str, subrequirement_ids: List[int]
) -> Dict[int, Dict[Tuple[str, str], bool]]:
# key: value -> subrequirement id: dict[tuple(test_case_name, test_case_description), is_success]
result_dict: Dict[int, Dict[Tuple[str, str], bool]] = {}
# Default run all subrequirement
if not subrequirement_ids:
subrequirement_ids = [1, 2, 3]
for subrequirement_id in subrequirement_ids:
if subrequirement_id not in SUBREQUIREMENT_DESCRIPTIONS.keys():
print(
f"Subrequirement id invalid! It should be a value in {[_ for _ in SUBREQUIREMENT_DESCRIPTIONS.keys()]}"
)
continue
result_dict[subrequirement_id] = test_subrequirement(subrequirement_id)
return result_dict
if __name__ == "__main__":
print("============> test GC AOT")
# Create the parser
parser = argparse.ArgumentParser(
description="A script to process sub-requirement ids, run corresponding test cases, and compile wamrc, iwasm if requested."
)
# The argparse module handles -h and --help by default, no needs to add it
# Add an output option `-o` as a flag that, when specified, sets the variable to True
parser.add_argument(
"-o",
"--output",
type=str,
required=False,
help="Specify the output file name. If provided, the script will write the results to <file name>.csv",
)
# Add positional arguments for integers
parser.add_argument(
"integers",
metavar="N",
type=int,
nargs="*",
help="an integer for the sub-requirement ids",
)
# Parse arguments
args = parser.parse_args()
run(args.output, args.integers)