makepad/tools/run/fixture/random_state.sh

24 lines
1.2 KiB
Bash
Executable file

#!/bin/sh
# Two processes get different RandomState keys (real std: OS randomness per process): runs
# diff/random_state.rs twice under `makepad test`, each from a fresh home, and requires its D lines
# all true and the two processes' `K` lines (a RandomState's hash of 42) to differ.
# Run from the workspace root after `cargo build --release -p makepad-run`. TARGET (default target/release).
T=${TARGET:-target/release}
here=$(cd "$(dirname "$0")" && pwd)
root=$(cd "$here/../../.." && pwd)
export MAKEPAD_RUN_STD=${MAKEPAD_RUN_STD:-$root/libs/relax/compiler/std}
dir=$(mktemp -d "${TMPDIR:-/tmp}/random_state.XXXXXX") || exit 2
for i in 1 2; do
mkdir -p "$dir/h$i"
MAKEPAD_RUN_HOME=$dir/h$i MAKEPAD_RUN_CACHE_DIR=$dir/h$i/cache MAKEPAD_HIDE_WINDOWS=1 SANDBOX_MUTE=1 \
"$T/makepad" test "$here/diff/random_state.rs" > "$dir/out$i" 2> "$dir/err$i"
done
k1=$(grep '^K ' "$dir/out1"); k2=$(grep '^K ' "$dir/out2")
bad=$(cat "$dir/out1" "$dir/out2" | grep '^D ' | grep -cv ': true$')
if [ -n "$k1" ] && [ -n "$k2" ] && [ "$k1" != "$k2" ] && [ "$bad" = 0 ] && [ "$(grep -c '^D ' "$dir/out1")" -gt 0 ]; then
echo "random_state: ok ($k1 / $k2)"
rm -rf "$dir"
else
echo "random_state: FAIL (K '$k1' / '$k2', $bad false D lines; logs in $dir)"
exit 1
fi