#[cfg(feature = "z3-solver")]
pub mod traits;
#[cfg(all(feature = "z3-solver", feature = "arm"))]
pub mod arm_semantics;
#[cfg(feature = "z3-solver")]
pub mod wasm_semantics;
#[cfg(all(feature = "z3-solver", feature = "arm"))]
pub mod translation_validator;
#[cfg(all(feature = "z3-solver", feature = "arm"))]
pub mod validator_pattern;
pub mod properties;
pub use properties::CompilerProperties;
#[cfg(all(feature = "z3-solver", feature = "arm"))]
pub use arm_semantics::{ArmSemantics, ArmState};
#[cfg(all(feature = "z3-solver", feature = "arm"))]
pub use translation_validator::{TranslationValidator, ValidationResult, VerificationError};
#[cfg(all(feature = "z3-solver", feature = "arm"))]
pub use validator_pattern::{
CertifiedSelection, SolverResultKind, ValidationError as PatternValidationError, Validator,
Witness, Z3ArmValidator,
};
#[cfg(feature = "z3-solver")]
pub use wasm_semantics::WasmSemantics;
#[cfg(feature = "z3-solver")]
use z3::{Config, Solver};
#[cfg(feature = "z3-solver")]
pub fn with_z3_context<F, R>(f: F) -> R
where
F: FnOnce() -> R + Send + Sync,
R: Send + Sync,
{
let mut cfg = Config::new();
cfg.set_timeout_msec(30000); cfg.set_model_generation(true);
z3::with_z3_config(&cfg, f)
}
#[cfg(feature = "z3-solver")]
pub fn create_solver() -> Solver {
Solver::new()
}
#[cfg(all(test, feature = "z3-solver"))]
mod tests {
use super::*;
#[test]
fn test_z3_context_creation() {
with_z3_context(|| {
let solver = create_solver();
assert_eq!(solver.check(), z3::SatResult::Sat);
});
}
}