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:
co-authored by
Claude Opus 5.5
parent
850de27e90
commit
b0030521d8
@@ -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",
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
#!/usr/bin/env bash
|
||||
# Même suite de contrat que tests/test_engine_reference.sh (ADR 0007, point 7),
|
||||
# rejouée sur le moteur compilé en WebAssembly : les 32 positions de
|
||||
# référence aux niveaux 0 et 2 plis, avec le même comparateur
|
||||
# (tests/reference/compare.py) et la même tolérance. Le moteur WebAssembly est
|
||||
# interrogé sous Node par engine-wasm/engine-cli.mjs, qui imite engine-cli.
|
||||
# Tout tourne dans l'image Emscripten, qui contient Node et Python 3.
|
||||
#
|
||||
# Lance `make engine-wasm` (sans effet si tout est à jour). Les arguments sont
|
||||
# passés au comparateur, par exemple --details pour voir tous les nombres.
|
||||
|
||||
set -euo pipefail
|
||||
cd "$(dirname "$0")/.."
|
||||
|
||||
image="${WASM_IMAGE:?lancer via make test}"
|
||||
|
||||
# Lancé depuis `make test` : repartir d'un make indépendant du make parent.
|
||||
unset MAKEFLAGS MFLAGS MAKELEVEL
|
||||
make engine-wasm >/dev/null
|
||||
|
||||
docker run --rm --user "$(id -u):$(id -g)" -e HOME=/tmp -v "$PWD:/src:ro" -w /src "$image" \
|
||||
python3 tests/reference/compare.py --cli "node engine-wasm/engine-cli.mjs" "$@"
|
||||
Reference in New Issue
Block a user