26 lines
1.9 KiB
Python
26 lines
1.9 KiB
Python
#!/usr/bin/env python3
|
|
import importlib.util,json,re,subprocess,sys,tempfile
|
|
from pathlib import Path
|
|
ROOT=Path(__file__).resolve().parents[1]
|
|
reference=Path(sys.argv[1]);template=ROOT/'tests/ava2_core_test.cpp'
|
|
# Compare the generated 13-stage table with both upstream server and Python UI tables.
|
|
spec=importlib.util.spec_from_file_location('import_ava2',ROOT/'import_ava2.py');module=importlib.util.module_from_spec(spec);spec.loader.exec_module(module)
|
|
rows=module.extract(reference);catalog=json.loads((ROOT/'catalog.json').read_text())
|
|
assert len(rows)==14 and len(catalog)==13
|
|
for row,c in zip(rows[1:],catalog):
|
|
assert row[:6]==[c['level'],c['material'],c['count'],c['cooldown'],c['chance'],c['stone']]
|
|
ui=ROOT.parents[2]/'src/platform/ScriptLib/BiologScript.inc';source=ui.read_text();data=re.search(r'^CATALOG = (.*)$',source,re.M).group(1)
|
|
import ast
|
|
assert ast.literal_eval(data)=={c['index']:c for c in catalog}
|
|
points=sorted({v for row in rows for v in row if isinstance(v,str)})
|
|
raw=(reference/'cmd_general.cpp').read_bytes().decode('latin1').replace('\r','');start=raw.index('ACMD(do_bio)\n');end=raw.index('\n#endif',start)
|
|
original=raw[start:end].replace('ACMD(do_bio)','static ACMD(reference_do_bio)')
|
|
code=template.read_text().replace('POINT_ENUMS','enum {'+', '.join([points[0]+'=1']+points[1:]+['POINT_GOLD'])+'};').replace('REFERENCE_COMMAND',original)
|
|
with tempfile.TemporaryDirectory(prefix='biolog-ava2-') as folder:
|
|
folder=Path(folder);cpp=folder/'test.cpp';cpp.write_text(code)
|
|
# Keep relative production include paths resolvable when compiling the generated source.
|
|
cpp.write_text(cpp.read_text().replace('#include "../biolog_remote.h"','#include "'+str(ROOT/'biolog_remote.h')+'"'))
|
|
subprocess.run(['c++','-std=c++17','-I'+str(ROOT/'tests'),str(cpp),'-o',str(folder/'test')],check=True)
|
|
subprocess.run([str(folder/'test')],check=True)
|
|
print('PASS: 13-stage catalog and embedded client table match extracted AVA2 server constants')
|