#!/bin/sh set -eu src="${TMPDIR-/tmp}/mcpu-cpp-fmacro-$$.c" out="${TMPDIR-/tmp}/mcpu-cpp-fmacro-$$.out" trap 'rm -f "$src" "$out"' EXIT HUP INT TERM cat > "$src" <<'EOT' #define min(X, Y) ((X) < (Y) ? (X) : (Y)) #define A 7 #define ZERO() zero-text #define INNER(X) [X] #define OUTER(X, Y) INNER(X) + INNER(Y) #define OBJECT (argument) #define WRAP(X) #define TWICE(X) (X) + \ (X) min(1, 2) min(A, 3) min(min(a, b), c) OUTER(A, min(4, 5)) ZERO () ZERO OBJECT WRAP("a,b") TWICE(3) "min(A, 3)" #lang "diff" #define DERIV(X) X' + X DERIV(y) #endlang EOT "$MCPU_CPP" --no-config "$src" -o "$out" grep '^((1) < (2) ? (1) : (2))$' "$out" >/dev/null grep '^((7) < (3) ? (7) : (3))$' "$out" >/dev/null grep '^((((a) < (b) ? (a) : (b))) < (c) ? (((a) < (b) ? (a) : (b))) : (c))$' "$out" >/dev/null grep '^\[7\] + \[((4) < (5) ? (4) : (5))\]$' "$out" >/dev/null grep '^zero-text$' "$out" >/dev/null grep '^ZERO$' "$out" >/dev/null grep '^(argument)$' "$out" >/dev/null grep '^<"a,b">$' "$out" >/dev/null grep '^(3) + (3)$' "$out" >/dev/null grep '^"min(A, 3)"$' "$out" >/dev/null grep "^y' + y$" "$out" >/dev/null