From 4229e4259e6489266bc5e30d2601cfc8ff37839c Mon Sep 17 00:00:00 2001 From: Selfhosting Dev Date: Sat, 20 Sep 2025 01:29:02 +0900 Subject: [PATCH] macro(if normalize): add print-if normalization golden and runner --- apps/tests/macro_golden_if_print.nyash | 2 ++ .../test/golden/macro/if_print.expanded.json | 8 +++++ .../macro/if_print_user_macro_golden.sh | 32 +++++++++++++++++++ 3 files changed, 42 insertions(+) create mode 100644 apps/tests/macro_golden_if_print.nyash create mode 100644 tools/test/golden/macro/if_print.expanded.json create mode 100644 tools/test/golden/macro/if_print_user_macro_golden.sh diff --git a/apps/tests/macro_golden_if_print.nyash b/apps/tests/macro_golden_if_print.nyash new file mode 100644 index 00000000..36ef0bbf --- /dev/null +++ b/apps/tests/macro_golden_if_print.nyash @@ -0,0 +1,2 @@ +print(if (1 < 2) { 10 } else { 20 }) + diff --git a/tools/test/golden/macro/if_print.expanded.json b/tools/test/golden/macro/if_print.expanded.json new file mode 100644 index 00000000..c3e46f6f --- /dev/null +++ b/tools/test/golden/macro/if_print.expanded.json @@ -0,0 +1,8 @@ +{"kind":"Program","statements":[ + {"kind":"If","condition":{"kind":"BinaryOp","op":"<","left":{"kind":"Literal","value":{"type":"int","value":1}},"right":{"kind":"Literal","value":{"type":"int","value":2}}},"then":[ + {"kind":"Print","expression":{"kind":"Literal","value":{"type":"int","value":10}}} + ],"else":[ + {"kind":"Print","expression":{"kind":"Literal","value":{"type":"int","value":20}}} + ]} +]} + diff --git a/tools/test/golden/macro/if_print_user_macro_golden.sh b/tools/test/golden/macro/if_print_user_macro_golden.sh new file mode 100644 index 00000000..dbf7710a --- /dev/null +++ b/tools/test/golden/macro/if_print_user_macro_golden.sh @@ -0,0 +1,32 @@ +#!/usr/bin/env bash +set -euo pipefail + +root=$(cd "$(dirname "$0")"/../../../.. && pwd) +bin="$root/target/release/nyash" +src="apps/tests/macro_golden_if_print.nyash" +golden="$root/tools/test/golden/macro/if_print.expanded.json" + +if [ ! -x "$bin" ]; then + echo "nyash binary not found at $bin; build first (cargo build --release)" >&2 + exit 1 +fi + +export NYASH_MACRO_ENABLE=1 +export NYASH_MACRO_PATHS="apps/macros/examples/if_match_normalize_macro.nyash" + +normalize_json() { + python3 -c 'import sys,json; print(json.dumps(json.loads(sys.stdin.read()), sort_keys=True, separators=(",",":")))' +} + +out_raw=$("$bin" --dump-expanded-ast-json "$src") +out_norm=$(printf '%s' "$out_raw" | normalize_json) +gold_norm=$(normalize_json < "$golden") + +if [ "$out_norm" != "$gold_norm" ]; then + echo "Golden mismatch (if-print normalization)" >&2 + diff -u <(echo "$out_norm") <(echo "$gold_norm") || true + exit 2 +fi + +echo "[OK] golden if-print normalization matched" +