Add UsesObserver to allow more generic MapFeedback (#1104)
* UsesObserver * a * more * don't need these
This commit is contained in:
parent
cf02553ea7
commit
c0f229ec23
@ -23,7 +23,7 @@ use crate::{
|
|||||||
feedbacks::{Feedback, HasObserverName},
|
feedbacks::{Feedback, HasObserverName},
|
||||||
inputs::UsesInput,
|
inputs::UsesInput,
|
||||||
monitors::UserStats,
|
monitors::UserStats,
|
||||||
observers::{MapObserver, ObserversTuple},
|
observers::{MapObserver, Observer, ObserversTuple, UsesObserver},
|
||||||
state::{HasClientPerfMonitor, HasMetadata, HasNamedMetadata},
|
state::{HasClientPerfMonitor, HasMetadata, HasNamedMetadata},
|
||||||
Error,
|
Error,
|
||||||
};
|
};
|
||||||
@ -370,6 +370,14 @@ pub struct MapFeedback<N, O, R, S, T> {
|
|||||||
phantom: PhantomData<(N, O, R, S, T)>,
|
phantom: PhantomData<(N, O, R, S, T)>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl<N, O, R, S, T> UsesObserver<S> for MapFeedback<N, O, R, S, T>
|
||||||
|
where
|
||||||
|
S: UsesInput,
|
||||||
|
O: Observer<S>,
|
||||||
|
{
|
||||||
|
type Observer = O;
|
||||||
|
}
|
||||||
|
|
||||||
impl<N, O, R, S, T> Feedback<S> for MapFeedback<N, O, R, S, T>
|
impl<N, O, R, S, T> Feedback<S> for MapFeedback<N, O, R, S, T>
|
||||||
where
|
where
|
||||||
N: IsNovel<T> + Debug,
|
N: IsNovel<T> + Debug,
|
||||||
|
@ -48,6 +48,15 @@ use crate::{
|
|||||||
Error,
|
Error,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/// Something that uses observer like mapfeedbacks
|
||||||
|
pub trait UsesObserver<S>
|
||||||
|
where
|
||||||
|
S: UsesInput,
|
||||||
|
{
|
||||||
|
/// The observer type used
|
||||||
|
type Observer: Observer<S>;
|
||||||
|
}
|
||||||
|
|
||||||
/// Observers observe different information about the target.
|
/// Observers observe different information about the target.
|
||||||
/// They can then be used by various sorts of feedback.
|
/// They can then be used by various sorts of feedback.
|
||||||
pub trait Observer<S>: Named + Debug
|
pub trait Observer<S>: Named + Debug
|
||||||
|
@ -15,14 +15,11 @@ use crate::{
|
|||||||
corpus::{Corpus, CorpusId, SchedulerTestcaseMetaData},
|
corpus::{Corpus, CorpusId, SchedulerTestcaseMetaData},
|
||||||
events::{Event, EventFirer, LogSeverity},
|
events::{Event, EventFirer, LogSeverity},
|
||||||
executors::{Executor, ExitKind, HasObservers},
|
executors::{Executor, ExitKind, HasObservers},
|
||||||
feedbacks::{
|
feedbacks::{map::MapFeedbackMetadata, HasObserverName},
|
||||||
map::{IsNovel, MapFeedback, MapFeedbackMetadata, Reducer},
|
|
||||||
HasObserverName,
|
|
||||||
},
|
|
||||||
fuzzer::Evaluator,
|
fuzzer::Evaluator,
|
||||||
inputs::UsesInput,
|
inputs::UsesInput,
|
||||||
monitors::UserStats,
|
monitors::UserStats,
|
||||||
observers::{MapObserver, ObserversTuple},
|
observers::{MapObserver, ObserversTuple, UsesObserver},
|
||||||
schedulers::powersched::SchedulerMetadata,
|
schedulers::powersched::SchedulerMetadata,
|
||||||
stages::Stage,
|
stages::Stage,
|
||||||
state::{HasClientPerfMonitor, HasCorpus, HasMetadata, HasNamedMetadata, UsesState},
|
state::{HasClientPerfMonitor, HasCorpus, HasMetadata, HasNamedMetadata, UsesState},
|
||||||
@ -321,13 +318,10 @@ where
|
|||||||
{
|
{
|
||||||
/// Create a new [`CalibrationStage`].
|
/// Create a new [`CalibrationStage`].
|
||||||
#[must_use]
|
#[must_use]
|
||||||
pub fn new<N, R>(map_feedback: &MapFeedback<N, O, R, S, O::Entry>) -> Self
|
pub fn new<F>(map_feedback: &F) -> Self
|
||||||
where
|
where
|
||||||
O::Entry:
|
F: HasObserverName + Named + UsesObserver<S, Observer = O>,
|
||||||
PartialEq + Default + Copy + 'static + Serialize + serde::de::DeserializeOwned + Debug,
|
|
||||||
R: Reducer<O::Entry>,
|
|
||||||
for<'it> O: AsIter<'it, Item = O::Entry>,
|
for<'it> O: AsIter<'it, Item = O::Entry>,
|
||||||
N: IsNovel<O::Entry>,
|
|
||||||
{
|
{
|
||||||
Self {
|
Self {
|
||||||
map_observer_name: map_feedback.observer_name().to_string(),
|
map_observer_name: map_feedback.observer_name().to_string(),
|
||||||
@ -340,13 +334,10 @@ where
|
|||||||
|
|
||||||
/// Create a new [`CalibrationStage`], but without checking stability.
|
/// Create a new [`CalibrationStage`], but without checking stability.
|
||||||
#[must_use]
|
#[must_use]
|
||||||
pub fn ignore_stability<N, R>(map_feedback: &MapFeedback<N, O, R, S, O::Entry>) -> Self
|
pub fn ignore_stability<F>(map_feedback: &F) -> Self
|
||||||
where
|
where
|
||||||
O::Entry:
|
F: HasObserverName + Named + UsesObserver<S, Observer = O>,
|
||||||
PartialEq + Default + Copy + 'static + Serialize + serde::de::DeserializeOwned + Debug,
|
|
||||||
R: Reducer<O::Entry>,
|
|
||||||
for<'it> O: AsIter<'it, Item = O::Entry>,
|
for<'it> O: AsIter<'it, Item = O::Entry>,
|
||||||
N: IsNovel<O::Entry>,
|
|
||||||
{
|
{
|
||||||
Self {
|
Self {
|
||||||
map_observer_name: map_feedback.observer_name().to_string(),
|
map_observer_name: map_feedback.observer_name().to_string(),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user