pub struct DdminInput<C> { /* private fields */ }Expand description
Input for one DDMin reduction run.
Implementations§
Source§impl<C> DdminInput<C>
impl<C> DdminInput<C>
Sourcepub const fn new(candidates: Vec<C>, options: DdminOptions) -> Self
pub const fn new(candidates: Vec<C>, options: DdminOptions) -> Self
Create a DDMin input from ordered candidates and execution options.
Examples found in repository?
examples/basic.rs (line 4)
3fn main() {
4 let input = DdminInput::new(vec![1_u8, 2, 3, 4], DdminOptions::default());
5 let mut oracle = |remaining: &[u8]| {
6 if remaining.contains(&2) && remaining.contains(&4) {
7 OracleOutcome::Interesting
8 } else {
9 OracleOutcome::NotInteresting
10 }
11 };
12
13 let output = ddmin(input, &mut oracle);
14 assert_eq!(output.remaining(), &[2, 4], "DDMin should keep the required values");
15 assert_eq!(output.removed(), &[1, 3], "DDMin should remove the irrelevant values");
16}More examples
examples/budgeted.rs (line 9)
7fn main() {
8 let options = DdminOptions::new(NonZeroUsize::MIN, Some(1));
9 let input = DdminInput::new(vec![1_u8, 2, 3, 4], options);
10 let mut oracle = |remaining: &[u8]| {
11 if remaining.contains(&2) {
12 OracleOutcome::Interesting
13 } else {
14 OracleOutcome::NotInteresting
15 }
16 };
17
18 let output = ddmin(input, &mut oracle);
19 assert_eq!(
20 output.guarantee(),
21 DdminGuarantee::Incomplete(DdminStopReason::MaxOracleCallsReached),
22 "DDMin should report an incomplete guarantee when the oracle-call budget is exhausted"
23 );
24 assert_eq!(output.stats().oracle_calls(), 1, "DDMin should stop at the configured budget");
25}examples/unresolved.rs (line 4)
3fn main() {
4 let input = DdminInput::new(vec!["core", "flaky", "noise"], DdminOptions::default());
5 let mut oracle = |remaining: &[&str]| {
6 if remaining.contains(&"flaky") && remaining.len() == 1 {
7 OracleOutcome::Unresolved(UnresolvedReason::NonDeterministic)
8 } else if remaining.contains(&"core") {
9 OracleOutcome::Interesting
10 } else {
11 OracleOutcome::NotInteresting
12 }
13 };
14
15 let output = ddmin(input, &mut oracle);
16 assert_eq!(output.remaining(), &["core"], "DDMin should keep the stable interesting value");
17 assert_eq!(
18 output.stats().unresolved_trials(),
19 1,
20 "DDMin should count unresolved oracle outcomes"
21 );
22}examples/file_candidates.rs (lines 12-19)
11fn main() -> ExitCode {
12 let input = DdminInput::new(
13 vec![
14 FileCandidate { path: "fixture/src/lib.rs", required: true },
15 FileCandidate { path: "fixture/README.md", required: false },
16 FileCandidate { path: "fixture/noise.log", required: false },
17 ],
18 DdminOptions::default(),
19 );
20 let mut oracle = |remaining: &[FileCandidate]| {
21 if remaining.iter().any(|candidate| candidate.required) {
22 OracleOutcome::Interesting
23 } else {
24 OracleOutcome::NotInteresting
25 }
26 };
27
28 let output = ddmin(input, &mut oracle);
29 let [remaining] = output.remaining() else {
30 return ExitCode::from(1);
31 };
32 if remaining.path == "fixture/src/lib.rs" { ExitCode::SUCCESS } else { ExitCode::from(1) }
33}Trait Implementations§
Source§impl<C: Clone> Clone for DdminInput<C>
impl<C: Clone> Clone for DdminInput<C>
Source§fn clone(&self) -> DdminInput<C>
fn clone(&self) -> DdminInput<C>
Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl<C: Debug> Debug for DdminInput<C>
impl<C: Debug> Debug for DdminInput<C>
Source§impl<C: PartialEq> PartialEq for DdminInput<C>
impl<C: PartialEq> PartialEq for DdminInput<C>
Source§fn eq(&self, other: &DdminInput<C>) -> bool
fn eq(&self, other: &DdminInput<C>) -> bool
Tests for
self and other values to be equal, and is used by ==.impl<C: Eq> Eq for DdminInput<C>
impl<C> StructuralPartialEq for DdminInput<C>
Auto Trait Implementations§
impl<C> Freeze for DdminInput<C>
impl<C> RefUnwindSafe for DdminInput<C>where
C: RefUnwindSafe,
impl<C> Send for DdminInput<C>where
C: Send,
impl<C> Sync for DdminInput<C>where
C: Sync,
impl<C> Unpin for DdminInput<C>where
C: Unpin,
impl<C> UnsafeUnpin for DdminInput<C>
impl<C> UnwindSafe for DdminInput<C>where
C: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more