Skip to main content

Simulation

Struct Simulation 

Source
pub struct Simulation<A = StreamAuthorityStore<MemoryStream>, O = ProviderObjectStore<MemoryObjects>> { /* private fields */ }
Expand description

Shared deterministic simulator and its two backend handles.

Implementations§

Source§

impl Simulation<StreamAuthorityStore<MemoryStream>, ProviderObjectStore<MemoryObjects>>

Source

pub fn new(options: SimulationOptions) -> Result<Self, SimulationError>

Creates a bounded simulator over fresh deterministic memory primitives.

§Errors

Rejects any zero hard bound before allocating simulator state.

Source§

impl<A, O> Simulation<A, O>

Source

pub fn wrap( authority: A, objects: O, options: SimulationOptions, ) -> Result<Self, SimulationError>

Wraps explicit backends with one bounded deterministic schedule.

This is the black-box qualification seam for future infrastructure adapters. The simulator does not inspect or replace backend state.

§Errors

Rejects any zero hard bound before retaining the supplied backends.

Source

pub fn stores(&self) -> (SimulatedAuthorityStore<A>, SimulatedObjectStore<O>)

Returns independently cloneable authority and object handles sharing one schedule.

Source

pub fn schedule( &self, scheduled: ScheduledSimulationFault, ) -> Result<(), SimulationError>

Schedules one exact one-based interception point.

§Errors

Rejects zero occurrences, incompatible behavior, duplicate identities, poisoned state, or a full bounded schedule.

Source

pub fn schedule_next( &self, operation: SimulationOperation, fault: SimulationFault, ) -> Result<ScheduledSimulationFault, SimulationError>

Atomically schedules the next occurrence of one operation family.

This is useful for deterministic black-box runners after setup traffic. Concurrent runners should retain the returned absolute occurrence in their evidence rather than assume which request consumes it.

§Errors

Rejects incompatible behavior, occurrence exhaustion, poisoned state, or a full bounded schedule.

Source

pub fn trace(&self) -> Result<Vec<SimulationTrace>, SimulationError>

Returns the complete bounded trace collected so far.

§Errors

Returns a poisoned-state failure instead of silently discarding evidence.

Source§

impl<A, O: AsyncObjectStore> Simulation<A, O>

Source

pub async fn flush_object_visibility( &self, budget: WorkBudget, cancellation: &CancellationToken, ) -> ObjectResult<u64>

Publishes delayed immutable objects in canonical identity order.

Only one pending entry is retained outside the simulator lock at a time, so flushing does not allocate or copy the delayed object set. Bytes cloning retains the same immutable allocation until backend admission.

§Errors

Returns exact immutable-store, cancellation, budget, or poisoned-state failures. Successfully published entries are removed; the first failed entry and every later entry remain pending for an idempotent retry.

Trait Implementations§

Source§

impl<A: Clone, O: Clone> Clone for Simulation<A, O>

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

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

Performs copy-assignment from source. Read more
Source§

impl Default for Simulation

Source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

§

impl<A, O> Freeze for Simulation<A, O>
where Arc<A>: Freeze, Arc<O>: Freeze,

§

impl<A, O> RefUnwindSafe for Simulation<A, O>

§

impl<A, O> Send for Simulation<A, O>
where Arc<A>: Send, Arc<O>: Send,

§

impl<A, O> Sync for Simulation<A, O>
where Arc<A>: Sync, Arc<O>: Sync,

§

impl<A, O> Unpin for Simulation<A, O>
where Arc<A>: Unpin, Arc<O>: Unpin,

§

impl<A, O> UnsafeUnpin for Simulation<A, O>
where Arc<A>: UnsafeUnpin, Arc<O>: UnsafeUnpin,

§

impl<A, O> UnwindSafe for Simulation<A, O>
where Arc<A>: UnwindSafe, Arc<O>: UnwindSafe,

Blanket Implementations§

Source§

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

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

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

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

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

Source§

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

Mutably borrows from an owned value. Read more
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> FromRef<T> for T
where T: Clone,

Source§

fn from_ref(input: &T) -> T

Converts to this type from a reference to the input type.
Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self> ⓘ

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where 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> IntoRequest<T> for T

Source§

fn into_request(self) -> Request<T>

Wrap the input message T in a tonic::Request
Source§

impl<L> LayerExt<L> for L

Source§

fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>
where L: Layer<S>,

Applies the layer to a service and wraps it in Layered.
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> StorageFuture for T
where T: Send,

Source§

impl<T> StorageProvider for T
where T: Send + Sync + ?Sized,

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

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 T
where U: Into<T>,

Source§

type Error = !

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

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

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

Source§

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.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more