[package]
name = "delaunay"
version = "0.7.6"
edition = "2024"
rust-version = "1.95"
authors = [ "Adam Getchell <adam@adamgetchell.org>" ]
homepage = "https://github.com/acgetchell/delaunay"
documentation = "https://docs.rs/delaunay"
repository = "https://github.com/acgetchell/delaunay"
description = "D-dimensional Delaunay triangulations and convex hulls in Rust, with exact predicates, multi-level validation, and bistellar flips"
license = "BSD-3-Clause"
keywords = [ "delaunay", "triangulation", "geometry", "convex-hull", "simplicial-complex" ]
categories = [ "algorithms", "mathematics", "science" ]
readme = "README.md"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
allocation-counter = { version = "0.8.1", optional = true } # for memory profiling
arc-swap = "1.9.1"
la-stack = { version = "0.4.1", features = [ "exact" ] }
tracing = "0.1.44"
rustc-hash = "2.1.2" # Fast non-cryptographic hashing for performance
smallvec = { version = "1.15.1", features = [ "serde" ] } # Stack allocation for small collections
num-traits = "0.2.19"
ordered-float = { version = "5.3.0", features = [ "serde" ] }
rand = "0.10.1"
serde = { version = "1.0.228", features = [ "derive" ] }
slotmap = { version = "1.1.1", features = [ "serde" ] }
thiserror = "2.0.18"
uuid = { version = "1.23.1", features = [ "v4", "serde", "fast-rng" ] }

[dev-dependencies]
approx = "0.5.1"
criterion = { version = "0.8.2", features = [ "html_reports" ] }
pastey = "0.2.2"
proptest = "1.11.0"
serde_json = "1.0.149"
sysinfo = "0.38.4" # Process memory monitoring for benchmarks
tracing-subscriber = { version = "0.3.23", features = [ "env-filter" ] }

[features]
# Default feature set: prefer DenseSlotMap for better construction + iteration performance.
# Use `--no-default-features` to benchmark or run with SlotMap.
default = [ "dense-slotmap" ]

count-allocations = [ "allocation-counter" ]
bench = [  ] # Enable benchmark-style tests and performance analysis
bench-logging = [  ] # Enable extra benchmark logging for CI diagnostics
test-debug = [  ] # Enable verbose debug output in tests for development
dense-slotmap = [  ] # Use DenseSlotMap-backed internal storage (default)
slow-tests = [
] # Enable slow-running integration tests (100+ vertices, multiple dimensions)

# Performance profile for benchmark baselines, comparisons, summaries, and
# profiling. Comprehensive CI validation intentionally uses Cargo's default
# release profile for compile checks because it is catching errors, not
# producing benchmark measurements.
[profile.perf]
inherits = "release"
lto = "thin"
codegen-units = 1
debug = "line-tables-only"

[[bench]]
name = "circumsphere_containment"
path = "benches/circumsphere_containment.rs"
harness = false

[[bench]]
name = "microbenchmarks"
path = "benches/microbenchmarks.rs"
harness = false

[[bench]]
name = "topology_guarantee_construction"
path = "benches/topology_guarantee_construction.rs"
harness = false

[[bench]]
name = "ci_performance_suite"
path = "benches/ci_performance_suite.rs"
harness = false

[[bench]]
name = "profiling_suite"
path = "benches/profiling_suite.rs"
harness = false

[[bench]]
name = "large_scale_performance"
path = "benches/large_scale_performance.rs"
harness = false

[[bench]]
name = "cold_path_predicates"
path = "benches/cold_path_predicates.rs"
harness = false

[lints.rust]
# Per RFC 3389: lint groups must use a lower (more negative) priority so specific
# lints at default priority 0 deterministically override the group level.
warnings = { level = "deny", priority = -1 }
unsafe_code = "forbid"
dead_code = { level = "warn", priority = 0 }
missing_docs = { level = "warn", priority = 0 }

[lints.clippy]
extra_unused_type_parameters = "warn"
pedantic = { level = "warn", priority = -1 }
