mirror of
https://github.com/zeldaret/botw
synced 2026-07-12 22:55:27 -04:00
Compare non-matching functions against expected output
This makes it possible to catch regressions for non-matching functions, especially those that only have minor issues. This also reclassifies some minor non-matchings as major non-matchings whenever it's really not obvious to see that they are equivalent.
This commit is contained in:
+14
-2
@@ -3,6 +3,7 @@ import argparse
|
||||
from collections import defaultdict
|
||||
from colorama import Back, Fore, Style
|
||||
import enum
|
||||
from pathlib import Path
|
||||
import utils
|
||||
from utils import FunctionStatus
|
||||
import typing as tp
|
||||
@@ -14,6 +15,8 @@ parser.add_argument("--print-eq", "-e", action="store_true",
|
||||
help="Print non-matching functions with minor issues")
|
||||
parser.add_argument("--print-ok", "-m", action="store_true",
|
||||
help="Print matching functions")
|
||||
parser.add_argument("--hide-nonmatchings-with-dumps", "-H", help="Hide non-matching functions that have expected "
|
||||
"output dumps", action="store_true")
|
||||
args = parser.parse_args()
|
||||
|
||||
|
||||
@@ -31,6 +34,15 @@ counts: tp.DefaultDict[FunctionStatus, int] = defaultdict(int)
|
||||
ai_counts: tp.DefaultDict[AIClassType, int] = defaultdict(int)
|
||||
ai_counts_done: tp.DefaultDict[AIClassType, int] = defaultdict(int)
|
||||
|
||||
nonmatching_fns_with_dump = {p.stem for p in (Path(__file__).parent.parent / "expected").glob("*.bin")}
|
||||
|
||||
|
||||
def should_hide_nonmatching(name: str) -> bool:
|
||||
if not args.hide_nonmatchings_with_dumps:
|
||||
return False
|
||||
return name in nonmatching_fns_with_dump
|
||||
|
||||
|
||||
for info in utils.get_functions():
|
||||
code_size_total += info.size
|
||||
num_total += 1
|
||||
@@ -57,10 +69,10 @@ for info in utils.get_functions():
|
||||
code_size[info.status] += info.size
|
||||
|
||||
if info.status == FunctionStatus.NonMatching:
|
||||
if args.print_nm:
|
||||
if args.print_nm and not should_hide_nonmatching(info.decomp_name):
|
||||
print(f"{Fore.RED}NM{Fore.RESET} {utils.format_symbol_name(info.decomp_name)}")
|
||||
elif info.status == FunctionStatus.Equivalent:
|
||||
if args.print_eq:
|
||||
if args.print_eq and not should_hide_nonmatching(info.decomp_name):
|
||||
print(f"{Fore.YELLOW}EQ{Fore.RESET} {utils.format_symbol_name(info.decomp_name)}")
|
||||
elif info.status == FunctionStatus.Matching:
|
||||
if args.print_ok:
|
||||
|
||||
Reference in New Issue
Block a user