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},
|
||||
inputs::UsesInput,
|
||||
monitors::UserStats,
|
||||
observers::{MapObserver, ObserversTuple},
|
||||
observers::{MapObserver, Observer, ObserversTuple, UsesObserver},
|
||||
state::{HasClientPerfMonitor, HasMetadata, HasNamedMetadata},
|
||||
Error,
|
||||
};
|
||||
@ -370,6 +370,14 @@ pub struct MapFeedback<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>
|
||||
where
|
||||
N: IsNovel<T> + Debug,
|
||||
|
@ -48,6 +48,15 @@ use crate::{
|
||||
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.
|
||||
/// They can then be used by various sorts of feedback.
|
||||
pub trait Observer<S>: Named + Debug
|
||||
|
@ -15,14 +15,11 @@ use crate::{
|
||||
corpus::{Corpus, CorpusId, SchedulerTestcaseMetaData},
|
||||
events::{Event, EventFirer, LogSeverity},
|
||||
executors::{Executor, ExitKind, HasObservers},
|
||||
feedbacks::{
|
||||
map::{IsNovel, MapFeedback, MapFeedbackMetadata, Reducer},
|
||||
HasObserverName,
|
||||
},
|
||||
feedbacks::{map::MapFeedbackMetadata, HasObserverName},
|
||||
fuzzer::Evaluator,
|
||||
inputs::UsesInput,
|
||||
monitors::UserStats,
|
||||
observers::{MapObserver, ObserversTuple},
|
||||
observers::{MapObserver, ObserversTuple, UsesObserver},
|
||||
schedulers::powersched::SchedulerMetadata,
|
||||
stages::Stage,
|
||||
state::{HasClientPerfMonitor, HasCorpus, HasMetadata, HasNamedMetadata, UsesState},
|
||||
@ -321,13 +318,10 @@ where
|
||||
{
|
||||
/// Create a new [`CalibrationStage`].
|
||||
#[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
|
||||
O::Entry:
|
||||
PartialEq + Default + Copy + 'static + Serialize + serde::de::DeserializeOwned + Debug,
|
||||
R: Reducer<O::Entry>,
|
||||
F: HasObserverName + Named + UsesObserver<S, Observer = O>,
|
||||
for<'it> O: AsIter<'it, Item = O::Entry>,
|
||||
N: IsNovel<O::Entry>,
|
||||
{
|
||||
Self {
|
||||
map_observer_name: map_feedback.observer_name().to_string(),
|
||||
@ -340,13 +334,10 @@ where
|
||||
|
||||
/// Create a new [`CalibrationStage`], but without checking stability.
|
||||
#[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
|
||||
O::Entry:
|
||||
PartialEq + Default + Copy + 'static + Serialize + serde::de::DeserializeOwned + Debug,
|
||||
R: Reducer<O::Entry>,
|
||||
F: HasObserverName + Named + UsesObserver<S, Observer = O>,
|
||||
for<'it> O: AsIter<'it, Item = O::Entry>,
|
||||
N: IsNovel<O::Entry>,
|
||||
{
|
||||
Self {
|
||||
map_observer_name: map_feedback.observer_name().to_string(),
|
||||
|
Loading…
x
Reference in New Issue
Block a user