"""Check that repeated evaluation does not retain dead shell state.""" import os from pathlib import Path import resource import subprocess import sys import tempfile shell = str(Path(sys.argv[1] if len(sys.argv) > 1 else "rc2").resolve()) ITERATIONS = 150000 MAX_RSS = 96 * 1024 * 1024 TIMEOUT = float(os.environ.get("RC2_MEMORY_TIMEOUT", "60")) script = "x=kept; fn keep {echo $x}; for (i in " + "x " * ITERATIONS + ") {eval 'y=stable'; fn f {echo replaced}}; keep; f; echo $y" script += "; items=(" + "x " * 12000 + "); fn churn {for (i in $items) {eval 'new=value'; fn replaced {echo new}}}" script += "; x=outer; x=inner {churn; echo $x}; echo $x; echo $new; replaced" script += "; fn active {fn active {echo replacement}; churn; echo original}; active; active" script += "; switch (match) {case match; churn; echo selected; case *; echo wrong}" script += "; /usr/bin/true; echo $status" script += "; fn doc {/bin/cat <