Skip to content

docs: add comprehensive formal verification architecture documentation #52

docs: add comprehensive formal verification architecture documentation

docs: add comprehensive formal verification architecture documentation #52

Workflow file for this run

name: CI
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
env:
CARGO_TERM_COLOR: always
RUST_BACKTRACE: 1
jobs:
format:
name: Format
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
with:
components: rustfmt
- name: Check formatting
run: cargo fmt --all -- --check
clippy:
name: Clippy
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
with:
components: clippy
- uses: Swatinem/rust-cache@v2
- name: Install Z3
run: |
sudo apt-get update
sudo apt-get install -y z3
- name: Run clippy
run: cargo clippy --all-targets --all-features -- -D warnings
test:
name: Test
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
rust: [stable]
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2
- name: Run tests
run: cargo test --all --verbose
build:
name: Build
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2
- name: Build release
run: cargo build --release --verbose
- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: loom-${{ matrix.os }}
path: |
target/release/loom
target/release/loom.exe
validate:
name: Validate WebAssembly Output
runs-on: ubuntu-latest
needs: build
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2
- name: Install wasm-tools
run: cargo install wasm-tools
- name: Build loom
run: cargo build --release
- name: Optimize and validate test fixtures
run: |
mkdir -p /tmp/loom-optimized
validation_passed=true
failed_fixtures=()
for fixture in tests/fixtures/*.wat; do
filename=$(basename "$fixture" .wat)
output_file="/tmp/loom-optimized/${filename}.wasm"
if ! ./target/release/loom optimize "$fixture" -o "$output_file" > /dev/null 2>&1; then
echo "❌ Optimization failed for $filename"
failed_fixtures+=("$filename")
validation_passed=false
continue
fi
if ! wasm-tools validate "$output_file" > /dev/null 2>&1; then
echo "⚠️ Validation failed for $filename (known optimizer correctness issue)"
failed_fixtures+=("$filename")
continue
fi
echo "✅ $filename"
done
echo ""
if [ "$validation_passed" = false ]; then
echo "❌ Some optimizations failed - aborting validation"
exit 1
fi
if [ ${#failed_fixtures[@]} -gt 0 ]; then
echo "Note: ${#failed_fixtures[@]} fixture(s) failed WASM validation (pre-existing optimizer issues):"
for fixture in "${failed_fixtures[@]}"; do
echo " - $fixture"
done
echo "These issues should be tracked separately for optimizer correctness improvements"
else
echo "✅ All fixtures successfully optimized and validated!"
fi
coverage:
name: Code Coverage
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2
- name: Install cargo-tarpaulin
run: cargo install cargo-tarpaulin
- name: Generate coverage
run: cargo tarpaulin --out xml --all-features
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v4
with:
files: ./cobertura.xml
fail_ci_if_error: false
benchmark:
name: Benchmarks
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2
- name: Run benchmarks
run: cargo bench --no-fail-fast
verify:
name: Z3 Verification Build
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2
- name: Install Z3
run: |
sudo apt-get update
sudo apt-get install -y z3
- name: Build with verification feature
run: cargo build --release --features verification
- name: Test verification
run: |
./target/release/loom optimize tests/fixtures/test_input.wat \
-o /tmp/test.wasm --verify --stats
wasm-build:
name: WASM Build (wasm32-wasip2)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
with:
targets: wasm32-wasip2
- uses: Swatinem/rust-cache@v2
- name: Build for wasm32-wasip2
run: cargo build --release --target wasm32-wasip2 --package loom-cli
- name: Upload WASM artifact
uses: actions/upload-artifact@v4
with:
name: loom-wasm
path: target/wasm32-wasip2/release/loom.wasm
self-optimization:
name: Self-Optimization Test
runs-on: ubuntu-latest
needs: [build, wasm-build]
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2
- name: Install wasm-tools
run: cargo install wasm-tools
- name: Download LOOM binary
uses: actions/download-artifact@v4
with:
name: loom-ubuntu-latest
path: ./loom-bin
- name: Download LOOM WASM
uses: actions/download-artifact@v4
with:
name: loom-wasm
path: ./loom-wasm
- name: Make binary executable
run: chmod +x ./loom-bin/loom
- name: Test self-optimization
run: |
echo "Testing LOOM self-optimization (dogfooding)..."
INPUT="./loom-wasm/loom.wasm"
OUTPUT="/tmp/loom-optimized.wasm"
# Verify input is valid
wasm-tools validate "$INPUT" || { echo "Input validation failed"; exit 1; }
# Optimize LOOM with itself
./loom-bin/loom optimize "$INPUT" -o "$OUTPUT" --stats || { echo "Optimization failed"; exit 1; }
# Verify output is valid
wasm-tools validate "$OUTPUT" || { echo "Output validation failed"; exit 1; }
# Calculate size reduction
INPUT_SIZE=$(stat -f%z "$INPUT" 2>/dev/null || stat -c%s "$INPUT")
OUTPUT_SIZE=$(stat -f%z "$OUTPUT" 2>/dev/null || stat -c%s "$OUTPUT")
REDUCTION=$((100 * (INPUT_SIZE - OUTPUT_SIZE) / INPUT_SIZE))
echo "✅ Self-optimization successful!"
echo " Input: $INPUT_SIZE bytes"
echo " Output: $OUTPUT_SIZE bytes"
echo " Reduction: $REDUCTION%"