# μCOBS development tasks
# default: list all recipes
default:
@just --list
# run ALL quality gates (tests, clippy, fmt check, doc, fuzz, miri)
test: test-unit test-clippy test-fmt test-doc test-fuzz test-miri
# quick compile check (no tests)
check:
cargo check
# unit + integration + proptest tests (via nextest for parallelism)
test-unit:
cargo nextest run
cargo test --doc
# clippy with all warnings as errors
test-clippy:
cargo clippy -- -D warnings
# check formatting
test-fmt:
cargo fmt -- --check
# doc build (catches broken doc links)
test-doc:
cargo doc --no-deps
# fuzz all targets (60s each, requires nightly + cargo-fuzz)
test-fuzz:
cd fuzz && cargo +nightly fuzz run fuzz_decode -- -max_total_time=60
cd fuzz && cargo +nightly fuzz run fuzz_roundtrip -- -max_total_time=60
cd fuzz && cargo +nightly fuzz run fuzz_small_dest -- -max_total_time=60
# run tests under miri (catches UB, requires nightly + miri component)
# proptest is excluded — its file-persistence layer calls getcwd which miri does not support
test-miri:
cargo +nightly miri test -- --skip proptests
# run criterion benchmarks (ucobs vs cobs vs corncobs)
bench:
cargo bench
# run python cobs benchmarks (requires: pip install cobs)
bench-python:
python3 bench_python.py
# run all benchmarks (rust + python)
bench-all: bench bench-python
# format code
fmt:
cargo fmt
# build in release mode
build:
cargo build --release
# clean all build artifacts
clean:
cargo clean
rm -rf fuzz/target fuzz/corpus fuzz/artifacts