Skip to main content

crashtest.run

Functions to run tests, collect results, and produce run reports.

compare_opcodes

def compare_opcodes(original_code: Bytecode, recompiled_code: Bytecode, class_name: str) -> OpcodeComparison

Compare per-method opcode sequences between original and recompiled bytecode.

file_to_name

def file_to_name(file: str) -> str

gen_id

def gen_id() -> str

Generate a unique ID for a test run.

gen_status

def gen_status(results: List[TestCase]) -> Tuple[str, str]

Generate a status message and color based on test results. Returns a tuple of (status_message, color_hex).

Colors:

  • Green (#22C55E): All tests passed
  • Yellow (#EAB308): < 10% failures
  • Orange (#F97316): 10-20% failures
  • Red-Orange (#EF4444): 20-50% failures
  • Red (#DC2626): > 50% failures
  • Dark Red (#991B1B): All tests failed

get_repo_info

def get_repo_info() -> GitInfo

Get the git branch and commit hash, if available.

op_similarity

def op_similarity(a: List[str], b: List[str]) -> float

Sequence similarity of two opcode name lists, 0.0-1.0.

op_source_lines

def op_source_lines(func: Function) -> List[int]

Per-op source line numbers (1-indexed), parallel to to_asm_resolved's output line-for-line. Each op's debug entry points back into whatever source file was compiled to produce this bytecode (the original .hx for the original function, or the decompiled pseudocode .hx for the recompiled one) — this is what lets the UI match a diffed opcode line up with the source line that produced it. -1 where no debug info is available.

recompile_pseudo

def recompile_pseudo(pseudo_content: str, class_name: str, original_path: Path) -> Tuple[Optional[Bytecode], Optional[str], BehavioralComparison]

Compile pseudo, then compare behavior unless this shipped fixture is exempt.

run

def run() -> bool

Run all tests.

run_case

def run_case(case: str, id: int) -> TestCase

Runs a single test case by decompiling the main class in the file. It generates both class-level pseudocode and a combined IR view of all methods, then recompiles and executes both versions. Opcode similarity is diagnostic only.

run_case_isolated

def run_case_isolated(case: str, id: int) -> TestCase

Runs run_case in a subprocess, enforcing TIME_LIMIT_SECONDS and MEMORY_LIMIT_MB. Exceeding either is reported as a failed case rather than hanging or OOMing the host.

run_single_case

def run_single_case(args: Any) -> bool

Run a single test case by name and print results to the terminal.

sweep

def sweep(bytecode_path: str, count: int, out_path: str) -> None

Decompile the first count functions of a bytecode image to a file.

to_asm_resolved

def to_asm_resolved(func: Function, code: Bytecode) -> str

Like to_asm but resolves constant-pool indices to their actual values.