-
Notifications
You must be signed in to change notification settings - Fork 44
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Update
generate-regression-tests.sh
work with modern evm-semantics (#…
…3687) Fixes #3686 This PR does the following - Updates `generate-regression-tests.sh` to work with modern versions of evm-semantics which no longer use a Makefile-based build system. - Fixes all issues reported by `shellcheck`. - Runs the new script and updates all the `regression-evm` tests. --- ###### Review checklist The author performs the actions on the checklist. The reviewer evaluates the work and checks the boxes as they are completed. - [ ] **Summary.** Write a summary of the changes. Explain what you did to fix the issue, and why you did it. Present the changes in a logical order. Instead of writing a summary in the pull request, you may push a clean Git history. - [ ] **Documentation.** Write documentation for new functions. Update documentation for functions that changed, or complete documentation where it is missing. - [ ] **Tests.** Write unit tests for every change. Write the unit tests that were missing before the changes. Include any examples from the reported issue as integration tests. - [ ] **Clean up.** The changes are already clean. Clean up anything near the changes that you noticed while working. This does not mean only spatially near the changes, but logically near: any code that interacts with the changes! --------- Co-authored-by: rv-jenkins <[email protected]>
- v0.1.115
- v0.1.114
- v0.1.113
- v0.1.112
- v0.1.111
- v0.1.110
- v0.1.109
- v0.1.108
- v0.1.107
- v0.1.106
- v0.1.105
- v0.1.104
- v0.1.103
- v0.1.102
- v0.1.101
- v0.1.100
- v0.1.99
- v0.1.98
- v0.1.97
- v0.1.96
- v0.1.95
- v0.1.94
- v0.1.93
- v0.1.92
- v0.1.91
- v0.1.90
- v0.1.89
- v0.1.88
- v0.1.87
- v0.1.86
- v0.1.85
- v0.1.84
- v0.1.83
- v0.1.82
- v0.1.81
- v0.1.80
- v0.1.79
- v0.1.78
- v0.1.77
- v0.1.76
- v0.1.75
- v0.1.74
- v0.1.73
- v0.1.72
- v0.1.71
- v0.1.70
- v0.1.69
- v0.1.68
- v0.1.67
- v0.1.66
- v0.1.65
- v0.1.64
- v0.1.63
- v0.1.62
- v0.1.61
- v0.1.60
- v0.1.59
- v0.1.58
- v0.1.57
- v0.1.56
- v0.1.55
- v0.1.54
- v0.1.53
- v0.1.52
- v0.1.51
- v0.1.50
- v0.1.49
- v0.1.48
- v0.1.47
- v0.1.46
- v0.1.45
- v0.1.44
- v0.1.43
- v0.1.42
- v0.1.41
- v0.1.40
- v0.1.39
- v0.1.38
- v0.1.37
- v0.1.36
- v0.1.35
- v0.1.34
- v0.1.33
- v0.1.32
- v0.1.31
- v0.1.30
- v0.1.29
- v0.1.28
- v0.1.27
- v0.1.26
- v0.1.25
- v0.1.24
- v0.1.23
- v0.1.22
- v0.1.21
- v0.1.20
- v0.1.19
- v0.1.17
- v0.1.16
- v0.1.15
- v0.1.14
- v0.1.13
- v0.1.12
- v0.1.11
- v0.1.10
- v0.1.9
- v0.1.8
- v0.1.7
- v0.1.6
- release-0.1.115
- release-0.1.114
- release-0.1.113
- release-0.1.112
- release-0.1.111
- release-0.1.110
- release-0.1.109
- release-0.1.108
- release-0.1.107
- release-0.1.106
- release-0.1.105
- release-0.1.104
- release-0.1.103
- release-0.1.102
- release-0.1.101
- release-0.1.100
- release-0.1.99
- release-0.1.98
- release-0.1.97
- release-0.1.96
- release-0.1.95
- release-0.1.94
- release-0.1.93
- release-0.1.92
- release-0.1.91
- release-0.1.90
- release-0.1.89
- release-0.1.88
- release-0.1.87
- release-0.1.86
- release-0.1.85
- release-0.1.84
- release-0.1.83
- release-0.1.82
- release-0.1.81
- release-0.1.80
- release-0.1.79
- release-0.1.78
- release-0.1.77
- release-0.1.76
- release-0.1.75
- release-0.1.74
- release-0.1.73
- release-0.1.72
- release-0.1.71
- release-0.1.70
- release-0.1.69
- release-0.1.68
- release-0.1.67
- release-0.1.66
- release-0.1.65
- release-0.1.64
- release-0.1.63
- release-0.1.62
- release-0.1.61
- release-0.1.60
- release-0.1.59
- release-0.1.58
- release-0.1.57
- release-0.1.56
- release-0.1.55
- release-0.1.54
- release-0.1.53
- release-0.1.52
- release-0.1.51
- release-0.1.50
- release-0.1.49
- release-0.1.48
- release-0.1.47
- release-0.1.46
- release-0.1.45
- release-0.1.44
1 parent
eebe4e9
commit 6ea6932
Showing
22 changed files
with
151,300 additions
and
80,045 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -45,14 +45,14 @@ err() { | |
|
||
# working directory | ||
if [ -z "$KORE" ]; then | ||
KORE=$(cd $(dirname $0)/.. && pwd) | ||
KORE=$(cd "$(dirname "$0")"/.. && pwd) | ||
log "No working directory, defaulting to $KORE" warn | ||
else | ||
KORE=$(realpath $KORE) | ||
KORE=$(realpath "$KORE") | ||
[ -d "$KORE" ] || err "$KORE: no such directory" | ||
fi | ||
|
||
pushd $KORE | ||
pushd "$KORE" | ||
trap popd EXIT | ||
|
||
case $(uname) in | ||
|
@@ -72,136 +72,155 @@ which git > /dev/null || err "git not available" | |
if [ -z "${EVM_SEMANTICS}" ]; then | ||
log "No evm-semantics directory provided, using $KORE/evm-semantics" info | ||
EVM_SEMANTICS=$KORE/evm-semantics | ||
git clone [email protected]:runtimeverification/evm-semantics.git $EVM_SEMANTICS || \ | ||
[ -f "${EVM_SEMANTICS}/include/kframework/evm.md" ] || \ | ||
git clone [email protected]:runtimeverification/evm-semantics.git "$EVM_SEMANTICS" || \ | ||
[ -f "${EVM_SEMANTICS}/kevm-pyk/src/kevm_pyk/kproj/evm-semantics/evm.md" ] || \ | ||
err "Unable to use $KORE/evm-semantics directory" | ||
(cd $EVM_SEMANTICS && git submodule update --init --recursive) | ||
else | ||
EVM_SEMANTICS=$(realpath ${EVM_SEMANTICS}) | ||
EVM_SEMANTICS=$(realpath "${EVM_SEMANTICS}") | ||
log "Using directory ${EVM_SEMANTICS} for evm-semantics" info | ||
[ -f "$EVM_SEMANTICS/include/kframework/evm.md" ] || \ | ||
[ -f "$EVM_SEMANTICS/kevm-pyk/src/kevm_pyk/kproj/evm-semantics/evm.md" ] || \ | ||
err "Provided evm-semantics directory '${EVM_SEMANTICS}' appears damaged" | ||
fi | ||
|
||
# determine K version to use from $KORE/deps/k, unless provided | ||
# deps/k_release contains a version number, the tag has a prefix 'v' | ||
if [ -z "${K_VERSION}" ]; then | ||
[ -f $KORE/deps/k_release ] && K_VERSION=v$(cat $KORE/deps/k_release) | ||
[ -f "$KORE"/deps/k_release ] && K_VERSION=v$(cat "$KORE"/deps/k_release) | ||
log "K version set to ${K_VERSION}" | ||
fi | ||
|
||
# build evm-semantics | ||
log "Checking out and building ${EVM_VERSION:-latest master} in ${EVM_SEMANTICS}" | ||
cd ${EVM_SEMANTICS} | ||
cd "${EVM_SEMANTICS}" | ||
git fetch | ||
git checkout ${EVM_VERSION:-master} | ||
git pull | ||
git checkout "${EVM_VERSION:-master}" | ||
git submodule update --init --recursive | ||
log "Manually setting K dependency to ${K_VERSION}" | ||
|
||
log "Cleaning ${EVM_SEMANTICS}" | ||
make clean | ||
log "Checking out and building K ${K_VERSION} in ${EVM_SEMANTICS}/deps/k" | ||
# if we are under a nix develop shell (NIX variable set), don't build K | ||
if [ -z "$NIX" ]; then | ||
(cd deps/k && git checkout ${K_VERSION} && git submodule update --init --recursive) | ||
make deps | ||
export PATH=$(pwd)/.build/usr/lib/kevm/kframework/bin:$PATH | ||
cd deps | ||
if [ ! -d k ]; then | ||
git clone [email protected]:runtimeverification/k.git | ||
fi | ||
cd k | ||
git fetch | ||
git checkout "$K_VERSION" | ||
git submodule update --init --recursive | ||
mvn package -DskipTests || err "Unable to build K ${K_VERSION}" | ||
PATH=$(pwd)/k-distribution/target/release/k/bin:$PATH | ||
export PATH | ||
which kore-exec | ||
cd "${EVM_SEMANTICS}" | ||
else | ||
log "Testing nix-provided K (kompile --version)" | ||
kompile --version && log "(^^^ nix-provided K ^^^)" || err "K unavailable but NIX=$NIX" | ||
kompile --version || err "K unavailable but NIX=$NIX" | ||
fi | ||
|
||
log "Building evm-semantics with dependencies" | ||
make plugin-deps poetry kevm-pyk | ||
export PATH=$(pwd)/.build/usr/bin:$PATH | ||
make build-kevm build-haskell | ||
make poetry | ||
poetry -C kevm-pyk run kevm-dist clean | ||
poetry -C kevm-pyk run kevm-dist build plugin | ||
poetry -C kevm-pyk run kevm-dist build -j"$(nproc)" | ||
|
||
kollect() { | ||
local name="$1" | ||
|
||
local archive=kevm-bug-$name.tar.gz | ||
local script=test-$name.sh | ||
local def=test-$name-definition.kore | ||
local spec=test-$name-spec.kore | ||
local tmp=$name-tmp | ||
|
||
cd ${EVM_SEMANTICS} | ||
pushd "${EVM_SEMANTICS}"/"$name" | ||
|
||
mkdir $tmp | ||
mv $archive $tmp | ||
cd $tmp | ||
tar -xf $archive | ||
mkdir "$tmp" | ||
cp kevm-bug-*.tar.gz "$tmp" | ||
cd "$tmp" | ||
tar -xf kevm-bug-*.tar.gz | ||
rm ./!(kore-exec.sh|spec.kore|vdefinition.kore) | ||
mv kore-exec.sh $script | ||
mv vdefinition.kore $def | ||
mv spec.kore $spec | ||
mv kore-exec.sh "$script" | ||
mv vdefinition.kore "$def" | ||
mv spec.kore "$spec" | ||
|
||
$sed -i \ | ||
-e "s,/nix/store/[a-z0-9]*-k-[^/]*maven/include/kframework/,evm-semantics/,g" \ | ||
-e "s,${EVM_SEMANTICS}/.build/usr/lib/kevm/kframework/include/kframework/,evm-semantics/,g" \ | ||
-e "s,${EVM_SEMANTICS}/.build/usr/lib/kevm/include/kframework/,evm-semantics/,g" \ | ||
-e "s,${EVM_SEMANTICS}/,evm-semantics/,g" \ | ||
*.kore | ||
-e "s,${EVM_SEMANTICS}/deps/k/k-distribution/target/release/k/include/kframework/,evm-semantics/,g" \ | ||
-e "s,${EVM_SEMANTICS}/kevm-pyk/src/kevm_pyk/kproj/evm-semantics/,evm-semantics/,g" \ | ||
-e "s,${EVM_SEMANTICS}/kevm-pyk/src/kevm_pyk/kproj/plugin/plugin/,evm-semantics/plugin/,g" \ | ||
-e "s,${EVM_SEMANTICS}/tests,evm-semantics/tests,g" \ | ||
./*.kore "$script" | ||
$sed -i -e "s/result.kore/$script.out/g" \ | ||
-e "s/vdefinition.kore/$def/g" \ | ||
-e "s/spec.kore/$spec/g" \ | ||
$script | ||
-e "s/vdefinition.kore/$def/g" \ | ||
-e "s/spec.kore/$spec/g" \ | ||
-e "/^\s*--log \\\/,+1d;/^\s*--log\s/d" \ | ||
"$script" | ||
|
||
cd .. | ||
mv $tmp/* . | ||
rmdir $tmp | ||
mv "$tmp"/* "${EVM_SEMANTICS}" | ||
rmdir "$tmp" | ||
popd | ||
} | ||
|
||
# test paths will be prefixed with tests/specs, and suffixed with -spec.k.prove | ||
ALL_TESTS="\ | ||
examples/sum-to-n \ | ||
functional/lemmas \ | ||
benchmarks/storagevar03 \ | ||
erc20/ds/totalSupply \ | ||
mcd/flipper-addu48u48-fail-rough \ | ||
mcd/dsvalue-peek-pass-rough \ | ||
benchmarks/functional \ | ||
" | ||
# conecutive entries from a pair indicating the test name followed by its main module | ||
ALL_TESTS=( | ||
"examples/sum-to-n" "VERIFICATION" | ||
"functional/lemmas" "VERIFICATION" | ||
"benchmarks/storagevar03" "VERIFICATION" | ||
"erc20/ds/totalSupply" "VERIFICATION" | ||
"mcd/flipper-addu48u48-fail-rough" "VERIFICATION" | ||
"mcd/dsvalue-peek-pass-rough" "VERIFICATION" | ||
"benchmarks/functional" "FUNCTIONAL-SPEC-SYNTAX" | ||
) | ||
|
||
generate-evm() { | ||
TARGETS=$@ | ||
|
||
if [ -z "$TARGETS" ]; then | ||
TARGETS=$ALL_TESTS | ||
fi | ||
TARGETS=( "$@" ) | ||
|
||
log "Generating test data for tests $TARGETS" | ||
if [ ${#TARGETS[@]} -eq 0 ]; then | ||
TARGETS=( "${ALL_TESTS[@]}" ) | ||
fi | ||
|
||
cd ${EVM_SEMANTICS} | ||
log "Generating test data for tests ${TARGETS[*]}" | ||
|
||
# check that test files actually exist before running anything | ||
for TEST in $TARGETS; do | ||
for (( idx=0 ; idx<${#TARGETS[@]} ; idx+=2 )); do | ||
TEST=${TARGETS[idx]} | ||
log "Checking tests/specs/$TEST-spec.k" | ||
[ -f tests/specs/$TEST-spec.k ] || err "$TEST's K file does not exist" | ||
[ -f "${EVM_SEMANTICS}"/tests/specs/"$TEST"-spec.k ] || err "$TEST's K file does not exist" | ||
done | ||
|
||
for TEST in $TARGETS; do | ||
for (( idx=0 ; idx<${#TARGETS[@]} ; idx+=2 )); do | ||
TEST=${TARGETS[idx]} | ||
MOD=${TARGETS[idx+1]} | ||
log "Running $TEST" | ||
make tests/specs/$TEST-spec.k.prove KPROVE_OPTS=--bug-report CHECK=true | ||
local testabs=${EVM_SEMANTICS}/tests/specs/$TEST-spec.k | ||
local testdir | ||
testdir=${EVM_SEMANTICS}/$(basename "$TEST") | ||
mkdir "$testdir" | ||
pushd "$testdir" | ||
poetry -C "${EVM_SEMANTICS}"/kevm-pyk run kevm-pyk kompile "$testabs" --target haskell --syntax-module "$MOD" --main-module "$MOD" --output . | ||
poetry -C "${EVM_SEMANTICS}"/kevm-pyk run kevm-pyk prove-legacy "$testabs" --definition . --bug-report-legacy | ||
log "Collecting data for $TEST" | ||
kollect $(basename $TEST) | ||
kollect "$(basename "$TEST")" | ||
popd | ||
rm -rf "$testdir" | ||
done | ||
} | ||
|
||
replace-tests() { | ||
local testdir=$KORE/$1 | ||
local tests=$2/test-* | ||
local tests=("$2"/test-*) | ||
|
||
if [ ! -d $testdir ] | ||
if [ ! -d "$testdir" ] | ||
then | ||
mkdir $testdir | ||
echo "include \$(CURDIR)/../include.mk" > $testdir/Makefile | ||
echo "" >> $testdir/Makefile | ||
echo "test-%.sh.out: \$(TEST_DIR)/test-%-*" >> $testdir/Makefile | ||
mkdir "$testdir" | ||
echo "include \$(CURDIR)/../include.mk" > "$testdir"/Makefile | ||
echo "" >> "$testdir"/Makefile | ||
echo "test-%.sh.out: \$(TEST_DIR)/test-%-*" >> "$testdir"/Makefile | ||
fi | ||
mv $tests $testdir | ||
mv "${tests[@]}" "$testdir" | ||
} | ||
|
||
generate-evm $@ | ||
replace-tests "test/regression-evm" ${EVM_SEMANTICS} | ||
rm -rf $KORE/evm-semantics | ||
generate-evm "$@" | ||
replace-tests "test/regression-evm" "${EVM_SEMANTICS}" | ||
rm -rf "$KORE"/evm-semantics |
Oops, something went wrong.