phase: 20.49 COMPLETE; 20.50 Flow+String minimal reps; 20.51 selfhost v0/v1 minimal (Option A/B); hv1-inline binop/unop/copy; docs + run_all + CURRENT_TASK -> 21.0
This commit is contained in:
70
tools/selfhost/bootstrap_s1_s2.sh
Normal file
70
tools/selfhost/bootstrap_s1_s2.sh
Normal file
@ -0,0 +1,70 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
# bootstrap_s1_s2.sh — Self‑Hosting S1/S2 helper
|
||||
# S1: emit‑only 再生成 → 正規化ハッシュ一致
|
||||
# S2: 1‑pass Fixpoint → もう一度一致
|
||||
#
|
||||
# 使い方(2通り)
|
||||
# 1) 既存の v1 JSON ファイル同士を比較(S1/S2の結果を与える)
|
||||
# tools/selfhost/bootstrap_s1_s2.sh --in1 a.json --in2 b.json
|
||||
#
|
||||
# 2) コマンドから v1 JSON を生成して比較(emit コマンドを渡す)
|
||||
# tools/selfhost/bootstrap_s1_s2.sh --cmd1 'bash gen_v1_once.sh' --cmd2 'bash gen_v1_twice.sh'
|
||||
# (各コマンドは v1 JSON を stdout に出力すること)
|
||||
|
||||
ROOT="$(cd "$(dirname "$0")/../.." && pwd)"
|
||||
LIB_TR="$ROOT/tools/smokes/v2/lib/test_runner.sh"
|
||||
if [ -f "$LIB_TR" ]; then source "$LIB_TR"; else echo "[FAIL] missing $LIB_TR" >&2; exit 2; fi
|
||||
|
||||
require_env >/dev/null || true
|
||||
|
||||
IN1=""
|
||||
IN2=""
|
||||
CMD1=""
|
||||
CMD2=""
|
||||
while [ $# -gt 0 ]; do
|
||||
case "$1" in
|
||||
--in1) IN1="$2"; shift 2 ;;
|
||||
--in2) IN2="$2"; shift 2 ;;
|
||||
--cmd1) CMD1="$2"; shift 2 ;;
|
||||
--cmd2) CMD2="$2"; shift 2 ;;
|
||||
*) echo "[FAIL] unknown arg: $1" >&2; exit 2 ;;
|
||||
esac
|
||||
done
|
||||
|
||||
tmp1="/tmp/hako_s1_$$.json"
|
||||
tmp2="/tmp/hako_s2_$$.json"
|
||||
cleanup(){ rm -f "$tmp1" "$tmp2" 2>/dev/null || true; }
|
||||
trap cleanup EXIT
|
||||
|
||||
if [ -n "$IN1" ] && [ -n "$IN2" ]; then
|
||||
cp "$IN1" "$tmp1"
|
||||
cp "$IN2" "$tmp2"
|
||||
elif [ -n "$CMD1" ] && [ -n "$CMD2" ]; then
|
||||
eval "$CMD1" > "$tmp1"
|
||||
eval "$CMD2" > "$tmp2"
|
||||
else
|
||||
echo "[FAIL] provide --in1/--in2 or --cmd1/--cmd2" >&2
|
||||
exit 2
|
||||
fi
|
||||
|
||||
if ! jq -e . < "$tmp1" >/dev/null 2>&1 || ! jq -e . < "$tmp2" >/dev/null 2>&1; then
|
||||
echo "[FAIL] invalid JSON input(s)" >&2
|
||||
exit 2
|
||||
fi
|
||||
|
||||
echo "[S1/S2] hashing v1 JSON (normalized) ..." >&2
|
||||
h1=$(v1_normalized_hash "$tmp1")
|
||||
h2=$(v1_normalized_hash "$tmp2")
|
||||
echo "[S1] $h1" >&2
|
||||
echo "[S2] $h2" >&2
|
||||
|
||||
if [ "$h1" = "$h2" ]; then
|
||||
echo "[PASS] S1/S2 normalized hashes match"
|
||||
exit 0
|
||||
else
|
||||
echo "[FAIL] S1/S2 normalized hashes differ" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
Reference in New Issue
Block a user