Files
lean4/tests/pkg/ver_clash/run_test.sh
Garmelon 49715fe63c chore: improve how test suite interacts with stages (#12913)
The tests need to run with certain environment variables set that only
cmake really knows and that differ between stages. Cmake could just set
the variables directly when running the tests and benchmarks, but that
would leave no good way to manually run a single benchmark. So cmake
generates some stage-specific scripts instead that set the required
environment variables.

Previously, those scripts were sourced directly by the individual
`run_*` scripts, so the env scripts of different stages would overwrite
each other. This PR changes the setup so they can instead be generated
next to each other. This also simplifies the `run_*` scripts themselves
a bit, and makes `tests/bench/build` less of a hack.
2026-03-16 15:20:03 +00:00

114 lines
2.7 KiB
Bash

# This directory contains a unified version of the "ring example"
# developed by Kim across the following 4 repositories:
#
# * https://github.com/kim-em/DiamondExample-A
# * https://github.com/kim-em/DiamondExample-B
# * https://github.com/kim-em/DiamondExample-C
# * https://github.com/kim-em/DiamondExample-D
#
# The top-level package, `D`, depends on two intermediate packages, `B` and `C`,
# which each require semantically different versions of another package, `A`.
# The portion of `A` that `B` and `C` publicly use (i.e., `Ring`) is unchanged
# across the versions, but they both privately make use of changed API (i.e.,
# `poorly_named_lemma` and its rename, `add_left_comm`).
#
# Currently, this causes a version clash, which is tested here.
# ---
# Setup
# ---
# Since committing a Git repository to a Git repository is not well-supported,
# We reinitialize the repositories on each test.
# Stolen from the lake test suite
UNAME="$(uname)"
if [ "$UNAME" = Darwin ] || [ "$UNAME" = FreeBSD ]; then
sed_i() { sed -i '' "$@"; }
else
sed_i() { sed -i "$@"; }
fi
# Stolen from the lake test suite
init_git() {
echo "# initialize test repository"
set -x
git init
git checkout -b master
git config user.name test
git config user.email test@example.com
git add --all
git commit -m "initial commit"
set +x
}
./clean.sh
pushd DiamondExample-A
sed_i s/add_left_comm/poorly_named_lemma/ DiamondExampleA/Ring/Lemmas.lean
lake update
init_git
git tag v1
sed_i s/poorly_named_lemma/add_left_comm/ DiamondExampleA/Ring/Lemmas.lean
git commit -am "rename lemma"
git tag v2
popd
pushd DiamondExample-B
lake update
init_git
popd
pushd DiamondExample-C
sed_i s/v2/v1/ lakefile.toml
sed_i s/add_left_comm/poorly_named_lemma/ DiamondExampleC/MainResult.lean
lake update
init_git
git tag v1
sed_i s/v1/v2/ lakefile.toml
sed_i s/poorly_named_lemma/add_left_comm/ DiamondExampleC/MainResult.lean
lake update
git commit -am "use v2"
git tag v2
popd
pushd DiamondExample-D
sed_i s/v2/v1/ lakefile.toml
lake update
init_git
git tag v1
sed_i s/v1/v2/ lakefile.toml
lake update
git commit -am "use v2"
git tag v2
popd
# ---
# Main tests
# ---
pushd DiamondExample-D
# Test build succeeds on v1
git switch v1 --detach
run lake build
# Test build fails on v2
git switch v2 --detach
capture_fail lake build
check_out_contains 'Unknown identifier `poorly_named_lemma`'
# Test build with different package names
sed_i '/name/ s/A/A-v1/' .lake/packages/DiamondExample-B/lakefile.toml
sed_i '/name/ s/A/A-v2/' .lake/packages/DiamondExample-C/lakefile.toml
run lake update
capture_fail lake build
check_out_contains 'could not disambiguate the module `DiamondExampleA.Ring.Lemmas`'
popd
# Cleanup
rm -rf DiamondExample-*/.git
rm -rf DiamondExample-*/.lake