#![feature(register_tool)]
#![register_tool(kanitool)]
#![feature(rustc_attrs)]
#![feature(repr_simd)]
#![feature(generic_const_exprs)]
#![allow(incomplete_features)]
#![cfg_attr(test, feature(core_intrinsics, portable_simd))]
#![allow(internal_features)]
#![feature(layout_for_ptr)]
#![feature(ptr_metadata)]
#![feature(f16)]
#![feature(f128)]
#![feature(convert_float_to_int)]
extern crate self as kani;
pub mod arbitrary;
#[cfg(feature = "concrete_playback")]
mod concrete_playback;
pub mod futures;
pub mod invariant;
pub mod shadow;
pub mod vec;
mod models;
#[cfg(feature = "concrete_playback")]
pub use concrete_playback::concrete_playback_run;
pub use invariant::Invariant;
#[cfg(not(feature = "concrete_playback"))]
pub fn concrete_playback_run<F: Fn()>(_: Vec<Vec<u8>>, _: F) {
unreachable!("Concrete playback does not work during verification")
}
pub use futures::{RoundRobin, block_on, block_on_with_spawn, spawn, yield_now};
pub use kani_macros::*;
kani_core::kani_lib!(kani);
#[doc(hidden)]
#[cfg(not(feature = "concrete_playback"))]
pub use core::assert as __kani__workaround_core_assert;
#[macro_export]
macro_rules! cover {
() => {
kani::cover(true, "cover location");
};
($cond:expr $(,)?) => {
kani::cover($cond, concat!("cover condition: ", stringify!($cond)));
};
($cond:expr, $msg:literal) => {
kani::cover($cond, $msg);
};
}
#[macro_export]
macro_rules! implies {
($premise:expr => $conclusion:expr) => {
!($premise) || ($conclusion)
};
}
pub(crate) use kani_macros::unstable_feature as unstable;
pub mod contracts;