pub(super) struct UsedExpressions {
    some_used_expression_operands: Option<FxHashMap<ExpressionOperandId, Vec<InjectedExpressionId>>>,
    some_unused_expressions: Option<Vec<(CoverageKind, Option<BasicCoverageBlock>, BasicCoverageBlock)>>,
}
Expand description

If enabled, this struct captures additional data used to track whether expressions were used, directly or indirectly, to compute the coverage counts for all CoverageSpans, and any that are not used are retained in the unused_expressions Vec, to be included in debug output (logs and/or a CoverageGraph graphviz output).

Fields§

§some_used_expression_operands: Option<FxHashMap<ExpressionOperandId, Vec<InjectedExpressionId>>>§some_unused_expressions: Option<Vec<(CoverageKind, Option<BasicCoverageBlock>, BasicCoverageBlock)>>

Implementations§

source§

impl UsedExpressions

source

pub fn new() -> Self

source

pub fn enable(&mut self)

source

pub fn is_enabled(&self) -> bool

source

pub fn add_expression_operands(&mut self, expression: &CoverageKind)

source

pub fn expression_is_used(&self, expression: &CoverageKind) -> bool

source

pub fn add_unused_expression_if_not_found( &mut self, expression: &CoverageKind, edge_from_bcb: Option<BasicCoverageBlock>, target_bcb: BasicCoverageBlock )

source

pub fn get_unused_expressions( &self ) -> Vec<(CoverageKind, Option<BasicCoverageBlock>, BasicCoverageBlock)>

Return the list of unused counters (if any) as a tuple with the counter (CoverageKind), optional from_bcb (if it was an edge counter), and target_bcb.

source

pub fn validate( &mut self, bcb_counters_without_direct_coverage_spans: &[(Option<BasicCoverageBlock>, BasicCoverageBlock, CoverageKind)] )

If enabled, validate that every BCB or edge counter not directly associated with a coverage span is at least indirectly associated (it is a dependency of a BCB counter that is associated with a coverage span).

source

pub fn alert_on_unused_expressions(&self, debug_counters: &DebugCounters)

Auto Trait Implementations§

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, 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.

Layout§

Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...) attributes. Please see the Rust Reference’s “Type Layout” chapter for details on type layout guarantees.

Size:56 bytes