Moteur en WebAssembly : make engine-wasm et suite de contrat

Le moteur et engine-cli sont compilés avec Emscripten (image figée
emscripten/emsdk:3.1.64), en C générique, sans threads ; les données
de build/data/ sont incluses dans engine.data. Le JavaScript appelle
engine_init une fois puis main pour chaque commande : la sortie est le
JSON d'engine-cli, sans code de mise en forme dupliqué.

tests/test_wasm_reference.sh rejoue les 32 positions de référence sous
Node avec le même comparateur (option --cli) et la même tolérance.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Pierre MARTIN
2026-11-02 19:07:01 +01:00
co-authored by Claude Opus 5.5
parent 850de27e90
commit b0030521d8
9 changed files with 265 additions and 9 deletions
+10 -2
View File
@@ -11,12 +11,19 @@ tests/test_engine_reference.sh) :
python3 tests/reference/compare.py [--cli build/engine-cli]
[--results tests/reference/results] [--tolerance 0.002] [--details]
--cli choisit le programme interrogé, qui doit imiter engine-cli ; ce peut
être une commande avec ses arguments. Pour le moteur WebAssembly
(tests/test_wasm_reference.sh, dans l'image Emscripten qui contient Node) :
python3 tests/reference/compare.py --cli "node engine-wasm/engine-cli.mjs"
"""
import argparse
import glob
import json
import os
import shlex
import subprocess
import sys
@@ -55,7 +62,7 @@ class Report:
def run_engine(cli, position, ply):
command = [cli, "--ply", str(ply), "reference", position["position_id"],
command = shlex.split(cli) + ["--ply", str(ply), "reference", position["position_id"],
position["match_id"]]
dice = position["context"]["dice"]
if dice:
@@ -142,7 +149,8 @@ def print_table(lines):
def main():
here = os.path.dirname(os.path.abspath(__file__))
parser = argparse.ArgumentParser(description="Compare engine-cli aux références de gnubg.")
parser.add_argument("--cli", default="build/engine-cli")
parser.add_argument("--cli", default="build/engine-cli",
help="programme interrogé, éventuellement avec ses arguments")
parser.add_argument("--results", default=os.path.join(here, "results"))
parser.add_argument("--tolerance", type=float, default=TOLERANCE)
parser.add_argument("--details", action="store_true",