1#![feature(register_tool)]
6#![register_tool(kanitool)]
7#![feature(rustc_attrs)]
10#![feature(repr_simd)]
12#![feature(generic_const_exprs)]
13#![allow(incomplete_features)]
14#![cfg_attr(test, feature(core_intrinsics, portable_simd))]
16#![allow(internal_features)]
18#![feature(layout_for_ptr)]
20#![feature(ptr_metadata)]
21#![feature(f16)]
22#![feature(f128)]
23#![feature(convert_float_to_int)]
24#![feature(sized_hierarchy)]
25
26extern crate self as kani;
28
29pub mod arbitrary;
30pub mod bounded_arbitrary;
31#[cfg(feature = "concrete_playback")]
32mod concrete_playback;
33pub mod futures;
34pub mod invariant;
35pub mod shadow;
36pub mod vec;
37
38mod models;
39
40#[cfg(feature = "concrete_playback")]
41pub use concrete_playback::concrete_playback_run;
42pub use invariant::Invariant;
43
44#[cfg(not(feature = "concrete_playback"))]
45pub fn concrete_playback_run<F: Fn()>(_: Vec<Vec<u8>>, _: F) {
47 unreachable!("Concrete playback does not work during verification")
48}
49
50pub use futures::{RoundRobin, block_on, block_on_with_spawn, spawn, yield_now};
51
52pub use kani_macros::*;
54
55kani_core::kani_lib!(kani);
57
58#[doc(hidden)]
62#[cfg(not(feature = "concrete_playback"))]
63pub use core::assert as __kani__workaround_core_assert;
64
65#[macro_export]
66macro_rules! cover {
67 () => {
68 kani::cover(true, "cover location");
69 };
70 ($cond:expr $(,)?) => {
71 kani::cover($cond, concat!("cover condition: ", stringify!($cond)));
72 };
73 ($cond:expr, $msg:literal) => {
74 kani::cover($cond, $msg);
75 };
76}
77
78#[macro_export]
84macro_rules! implies {
85 ($premise:expr => $conclusion:expr) => {
86 !($premise) || ($conclusion)
87 };
88}
89
90pub(crate) use kani_macros::unstable_feature as unstable;
91
92pub mod contracts;