Files
RustNotMC/tools/test_stop_sound_wire_parity.py
SashegDev 874b6f20c2 Клиент: начальный импорт кодовой базы
Основа — Horizon (MIT). История апстрима не переносится: этот репозиторий ведёт свою.
2026-10-29 22:04:28 +03:00

36 lines
1.9 KiB
Python

#!/usr/bin/env python3
"""Stop-sound packet bytes and selections against the native Java codec."""
import json
import os
try:
from . import lab, test_rust_parity as base, oracle_harness as harness
except ImportError:
import lab
import test_rust_parity as base
import oracle_harness as harness
def main():
build=lab.LOCAL/'stop-sound-wire-parity'; build.mkdir(exist_ok=True)
(build/'report.json').unlink(missing_ok=True)
lock,jars,libraries=base.verify_artifacts()
cp=os.pathsep.join(map(str,[jars['server'],*libraries])); classes=build/'classes';classes.mkdir(exist_ok=True)
source=lab.ROOT/'mods/horizon/src/test/java/dev/horizonlab/parity/VanillaStopSoundWireOracle.java'
sources=[source,lab.ROOT/'crates/horizon-protocol/src/packets/play.rs',lab.ROOT/'crates/horizon-client/src/game/remote.rs']
tested=base.source_hashes(sources)
run=lambda cmd,name:harness.run_logged(cmd,build,name)
run(['javac','--release',lock['minecraft']['java_major'],'-proc:none','-cp',cp,'-d',classes,source],'compile-java')
run(['java','-cp',str(classes)+os.pathsep+cp,'dev.horizonlab.parity.VanillaStopSoundWireOracle',build/'java.jsonl'],'java')
run(['cargo','build','-p','horizon-protocol','--example','stop_sound_probe'],'compile-rust')
run([lab.cargo_target()/'debug/examples/stop_sound_probe',build/'java.jsonl',build/'rust.jsonl'],'rust')
java=[json.loads(x) for x in (build/'java.jsonl').read_text().splitlines()]
rust=[json.loads(x) for x in (build/'rust.jsonl').read_text().splitlines()]
assert len(java)==len(rust)==36
assert all({'source':a.get('source'),'sound':a.get('sound')}==b for a,b in zip(java,rust))
base.ensure_sources_unchanged(sources,tested)
lab.write_json(build/'report.json',{'pass':True,'cases':len(java),'sources_sha256':tested})
print(f'Stop sound: {len(java)} native wire selections match and re-encode byte for byte')
if __name__=='__main__':main()