Py_sax2sab/verify.py
arda.aydin@ontrol.com.tr 3e313f8223 First commit tekrar
Bu dosyalar Claude uzerinden olusturuldu
2026-08-12 20:49:31 +03:00

54 lines
1.9 KiB
Python

"""Regression check: our SAB output must be byte-identical to sedonac.exe's.
Usage: python verify.py [sedona_home]
"""
import os, sys, subprocess, tempfile, shutil
import sab
HERE = os.path.dirname(os.path.abspath(__file__))
HOME = sys.argv[1] if len(sys.argv) > 1 else os.path.join(os.path.dirname(HERE), "sedona")
def check(sax, reference=None):
"""Encode `sax` with sab.py; compare against `reference` or a fresh sedonac run."""
tmp = tempfile.mkdtemp()
try:
if reference is None:
work = os.path.join(tmp, os.path.basename(sax))
shutil.copy(sax, work)
exe = os.path.join(HOME, "bin", "sedonac.exe")
r = subprocess.run([exe, work], capture_output=True, text=True)
if r.returncode != 0:
print(" sedonac failed:\n" + r.stdout + r.stderr)
return False
reference = os.path.splitext(work)[0] + ".sab"
mine = os.path.join(tmp, "mine.sab")
sab.encode(sax, HOME, mine)
a = open(reference, "rb").read()
b = open(mine, "rb").read()
name = os.path.basename(sax)
if a == b:
print(" PASS %-28s %d bytes identical" % (name, len(a)))
return True
diffs = [i for i in range(min(len(a), len(b))) if a[i] != b[i]]
print(" FAIL %-28s sedonac=%d ours=%d, %d byte diffs" % (name, len(a), len(b), len(diffs)))
if diffs:
i = diffs[0]
lo, hi = max(0, i - 12), i + 12
print(" first diff at offset %d" % i)
print(" sedonac %s" % a[lo:hi].hex())
print(" ours %s" % b[lo:hi].hex())
return False
finally:
shutil.rmtree(tmp, ignore_errors=True)
if __name__ == "__main__":
print("sedona home: %s" % HOME)
ok = check(os.path.join(HERE, "test_normal.sax"),
os.path.join(HERE, "test_normal_sedonac.sab"))
sys.exit(0 if ok else 1)