Ivy is a verifier for the Imp language. This repository now contains:
- Legacy Java baseline (unchanged, used for parity reference)
- Modern C++20 implementation (
Ivy::ivylibrary +ivy_verifyCLI)
- CMake >= 3.24
- C++20 compiler (
g++,clang++, or AppleClang) - Java runtime (for ANTLR code generation)
- Z3 development package (
z3::libz3CMake package) - ANTLR jar at
/Users/nibom/v23/antlr-4.13.2-complete.jar
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build -j./build/ivy_verify TestData/Examples/Abs.impExpected output format:
Method Abs is valid
ctest --test-dir build --output-on-failureFormat:
git ls-files '*.hpp' '*.cpp' | xargs clang-format --dry-run --WerrorStatic analysis (clang-tidy):
cmake -S . -B build-tidy -DCMAKE_BUILD_TYPE=Debug -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DCMAKE_CXX_COMPILER=clang++
cmake --build build-tidy --target ivy_antlr_gen -j2
SDKROOT=$(xcrun --show-sdk-path)
/opt/homebrew/opt/llvm/bin/clang-tidy -p build-tidy --extra-arg=-isysroot --extra-arg=$SDKROOT src/*.cppCoverage gate (parser/typechecker/verifier):
cmake -S . -B build-cov -DCMAKE_BUILD_TYPE=Debug -DIVY_ENABLE_COVERAGE=ON
cmake --build build-cov -j2
find build-cov -name '*.gcda' -delete
ctest --test-dir build-cov --output-on-failure
scripts/coverage_gate.py --build-dir build-cov --line-threshold 85 --branch-threshold 70cmake --install build --prefix /tmp/ivy-installThen consume target Ivy::ivy from /tmp/ivy-install/lib/cmake/Ivy.
A standalone sample consumer is included and links against the installed/public API target:
cmake -S examples/external_consumer -B /tmp/ivy-ext-build -DCMAKE_PREFIX_PATH=/tmp/ivy-install
cmake --build /tmp/ivy-ext-build -j
/tmp/ivy-ext-build/ivy_external_consumermvn test
java -cp lib/com.microsoft.z3.jar:lib/antlr4-runtime-4.13.2.jar:target/classes verification.ImpVerifier TestData/Examples/Abs.imppython3 scripts/parity_check.py --corpus TestData --cpp-cmd build/ivy_verify
python3 scripts/determinism_check.py --binary build/ivy_verify --corpus TestData
python3 scripts/benchmark_corpus.py --corpus TestData --cpp-cmd build/ivy_verifycmake -S . -B build-fuzz -DIVY_ENABLE_FUZZ=ON
cmake --build build-fuzz -j
scripts/run_parser_fuzz.sh build-fuzz/ivy_parser_fuzz