Struct stateright::Property

source ·
pub struct Property<M: Model> {
    pub expectation: Expectation,
    pub name: &'static str,
    pub condition: fn(_: &M, _: &M::State) -> bool,
}
Expand description

A named predicate, such as “an epoch sometimes has no leader” (for which the the model checker would find an example) or “an epoch always has at most one leader” (for which the model checker would find a counterexample) or “a proposal is eventually accepted” (for which the model checker would find a counterexample path leading from the initial state through to a terminal state).

Fields§

§expectation: Expectation§name: &'static str§condition: fn(_: &M, _: &M::State) -> bool

Implementations§

source§

impl<M: Model> Property<M>

source

pub fn always( name: &'static str, condition: fn(_: &M, _: &M::State) -> bool ) -> Property<M>

An invariant that defines a safety property. The model checker will try to discover a counterexample.

source

pub fn eventually( name: &'static str, condition: fn(_: &M, _: &M::State) -> bool ) -> Property<M>

An invariant that defines a liveness property. The model checker will try to discover a counterexample path leading from the initial state through to a terminal state.

Note that in this implementation eventually properties only work correctly on acyclic paths (those that end in either states with no successors or checking boundaries). A path ending in a cycle is not viewed as terminating in that cycle, as the checker does not differentiate cycles from DAG joins, and so an eventually property that has not been met by the cycle-closing edge will ignored – a false negative.

source

pub fn sometimes( name: &'static str, condition: fn(_: &M, _: &M::State) -> bool ) -> Property<M>

Something that should be possible in the model. The model checker will try to discover an example.

Trait Implementations§

source§

impl<M: Model> Clone for Property<M>

source§

fn clone(&self) -> Self

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more

Auto Trait Implementations§

§

impl<M> RefUnwindSafe for Property<M>

§

impl<M> Send for Property<M>

§

impl<M> Sync for Property<M>

§

impl<M> Unpin for Property<M>

§

impl<M> UnwindSafe for Property<M>

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for Twhere U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T> ToOwned for Twhere T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for Twhere U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for Twhere V: MultiLane<T>,

§

fn vzip(self) -> V