make map debuggable (#396)

This commit is contained in:
Dominik Maier 2021-12-02 10:29:24 +01:00 committed by GitHub
parent 8a57361e84
commit ca767752d0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 26 additions and 23 deletions

View File

@ -4,7 +4,7 @@ use alloc::{
string::{String, ToString}, string::{String, ToString},
vec::Vec, vec::Vec,
}; };
use core::marker::PhantomData; use core::{fmt::Debug, marker::PhantomData};
use num_traits::PrimInt; use num_traits::PrimInt;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
@ -275,6 +275,7 @@ where
pub fn with_observer<O>(map_observer: &O) -> Self pub fn with_observer<O>(map_observer: &O) -> Self
where where
O: MapObserver<T>, O: MapObserver<T>,
T: Debug,
{ {
Self { Self {
history_map: vec![T::default(); map_observer.len()], history_map: vec![T::default(); map_observer.len()],
@ -298,7 +299,7 @@ where
#[serde(bound = "T: serde::de::DeserializeOwned")] #[serde(bound = "T: serde::de::DeserializeOwned")]
pub struct MapFeedback<FT, I, MF, O, R, S, T> pub struct MapFeedback<FT, I, MF, O, R, S, T>
where where
T: PrimInt + Default + Copy + 'static + serde::Serialize + serde::de::DeserializeOwned, T: PrimInt + Default + Copy + 'static + serde::Serialize + serde::de::DeserializeOwned + Debug,
R: Reducer<T>, R: Reducer<T>,
O: MapObserver<T>, O: MapObserver<T>,
MF: MapFindFilter<T>, MF: MapFindFilter<T>,
@ -319,7 +320,7 @@ where
impl<FT, I, MF, O, R, S, T> Feedback<I, S> for MapFeedback<FT, I, MF, O, R, S, T> impl<FT, I, MF, O, R, S, T> Feedback<I, S> for MapFeedback<FT, I, MF, O, R, S, T>
where where
T: PrimInt + Default + Copy + 'static + serde::Serialize + serde::de::DeserializeOwned, T: PrimInt + Default + Copy + 'static + serde::Serialize + serde::de::DeserializeOwned + Debug,
R: Reducer<T>, R: Reducer<T>,
O: MapObserver<T>, O: MapObserver<T>,
MF: MapFindFilter<T>, MF: MapFindFilter<T>,
@ -428,7 +429,7 @@ where
impl<FT, I, MF, O, R, S, T> Named for MapFeedback<FT, I, MF, O, R, S, T> impl<FT, I, MF, O, R, S, T> Named for MapFeedback<FT, I, MF, O, R, S, T>
where where
T: PrimInt + Default + Copy + 'static + serde::Serialize + serde::de::DeserializeOwned, T: PrimInt + Default + Copy + 'static + serde::Serialize + serde::de::DeserializeOwned + Debug,
R: Reducer<T>, R: Reducer<T>,
MF: MapFindFilter<T>, MF: MapFindFilter<T>,
O: MapObserver<T>, O: MapObserver<T>,
@ -449,7 +450,8 @@ where
+ 'static + 'static
+ serde::Serialize + serde::Serialize
+ serde::de::DeserializeOwned + serde::de::DeserializeOwned
+ PartialOrd, + PartialOrd
+ Debug,
R: Reducer<T>, R: Reducer<T>,
MF: MapFindFilter<T>, MF: MapFindFilter<T>,
O: MapObserver<T>, O: MapObserver<T>,

View File

@ -6,6 +6,7 @@ use alloc::{
vec::Vec, vec::Vec,
}; };
use core::{ use core::{
fmt::Debug,
hash::Hasher, hash::Hasher,
slice::{from_raw_parts, from_raw_parts_mut}, slice::{from_raw_parts, from_raw_parts_mut},
}; };
@ -26,7 +27,7 @@ use crate::{
/// A [`MapObserver`] observes the static map, as oftentimes used for afl-like coverage information /// A [`MapObserver`] observes the static map, as oftentimes used for afl-like coverage information
pub trait MapObserver<T>: HasLen + Named + serde::Serialize + serde::de::DeserializeOwned pub trait MapObserver<T>: HasLen + Named + serde::Serialize + serde::de::DeserializeOwned
where where
T: PrimInt + Default + Copy, T: PrimInt + Default + Copy + Debug,
{ {
/// Get the map if the observer can be represented with a slice /// Get the map if the observer can be represented with a slice
fn map(&self) -> Option<&[T]>; fn map(&self) -> Option<&[T]>;
@ -117,7 +118,7 @@ where
impl<'a, I, S, T> Observer<I, S> for StdMapObserver<'a, T> impl<'a, I, S, T> Observer<I, S> for StdMapObserver<'a, T>
where where
T: PrimInt + Default + Copy + 'static + serde::Serialize + serde::de::DeserializeOwned, T: PrimInt + Default + Copy + 'static + serde::Serialize + serde::de::DeserializeOwned + Debug,
Self: MapObserver<T>, Self: MapObserver<T>,
{ {
#[inline] #[inline]
@ -148,7 +149,7 @@ where
impl<'a, T> MapObserver<T> for StdMapObserver<'a, T> impl<'a, T> MapObserver<T> for StdMapObserver<'a, T>
where where
T: PrimInt + Default + Copy + 'static + serde::Serialize + serde::de::DeserializeOwned, T: PrimInt + Default + Copy + 'static + serde::Serialize + serde::de::DeserializeOwned + Debug,
{ {
#[inline] #[inline]
fn map(&self) -> Option<&[T]> { fn map(&self) -> Option<&[T]> {
@ -232,7 +233,7 @@ where
impl<'a, I, S, T, const N: usize> Observer<I, S> for ConstMapObserver<'a, T, N> impl<'a, I, S, T, const N: usize> Observer<I, S> for ConstMapObserver<'a, T, N>
where where
T: PrimInt + Default + Copy + 'static + serde::Serialize + serde::de::DeserializeOwned, T: PrimInt + Default + Copy + 'static + serde::Serialize + serde::de::DeserializeOwned + Debug,
Self: MapObserver<T>, Self: MapObserver<T>,
{ {
#[inline] #[inline]
@ -263,7 +264,7 @@ where
impl<'a, T, const N: usize> MapObserver<T> for ConstMapObserver<'a, T, N> impl<'a, T, const N: usize> MapObserver<T> for ConstMapObserver<'a, T, N>
where where
T: PrimInt + Default + Copy + 'static + serde::Serialize + serde::de::DeserializeOwned, T: PrimInt + Default + Copy + 'static + serde::Serialize + serde::de::DeserializeOwned + Debug,
{ {
#[inline] #[inline]
fn usable_count(&self) -> usize { fn usable_count(&self) -> usize {
@ -354,7 +355,7 @@ where
impl<'a, I, S, T> Observer<I, S> for VariableMapObserver<'a, T> impl<'a, I, S, T> Observer<I, S> for VariableMapObserver<'a, T>
where where
T: PrimInt + Default + Copy + 'static + serde::Serialize + serde::de::DeserializeOwned, T: PrimInt + Default + Copy + 'static + serde::Serialize + serde::de::DeserializeOwned + Debug,
Self: MapObserver<T>, Self: MapObserver<T>,
{ {
#[inline] #[inline]
@ -385,7 +386,7 @@ where
impl<'a, T> MapObserver<T> for VariableMapObserver<'a, T> impl<'a, T> MapObserver<T> for VariableMapObserver<'a, T>
where where
T: PrimInt + Default + Copy + 'static + serde::Serialize + serde::de::DeserializeOwned, T: PrimInt + Default + Copy + 'static + serde::Serialize + serde::de::DeserializeOwned + Debug,
{ {
#[inline] #[inline]
fn map(&self) -> Option<&[T]> { fn map(&self) -> Option<&[T]> {
@ -579,7 +580,7 @@ where
impl<'a, I, S, T> Observer<I, S> for MultiMapObserver<'a, T> impl<'a, I, S, T> Observer<I, S> for MultiMapObserver<'a, T>
where where
T: PrimInt + Default + Copy + 'static + serde::Serialize + serde::de::DeserializeOwned, T: PrimInt + Default + Copy + 'static + serde::Serialize + serde::de::DeserializeOwned + Debug,
Self: MapObserver<T>, Self: MapObserver<T>,
{ {
#[inline] #[inline]
@ -610,7 +611,7 @@ where
impl<'a, T> MapObserver<T> for MultiMapObserver<'a, T> impl<'a, T> MapObserver<T> for MultiMapObserver<'a, T>
where where
T: PrimInt + Default + Copy + 'static + serde::Serialize + serde::de::DeserializeOwned, T: PrimInt + Default + Copy + 'static + serde::Serialize + serde::de::DeserializeOwned + Debug,
{ {
#[inline] #[inline]
fn map(&self) -> Option<&[T]> { fn map(&self) -> Option<&[T]> {

View File

@ -15,14 +15,14 @@ use alloc::{
string::{String, ToString}, string::{String, ToString},
vec::Vec, vec::Vec,
}; };
use core::{marker::PhantomData, time::Duration}; use core::{fmt::Debug, marker::PhantomData, time::Duration};
use num_traits::PrimInt; use num_traits::PrimInt;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
#[derive(Clone, Debug)] #[derive(Clone, Debug)]
pub struct CalibrationStage<C, E, EM, I, O, OT, S, T, Z> pub struct CalibrationStage<C, E, EM, I, O, OT, S, T, Z>
where where
T: PrimInt + Default + Copy + 'static + serde::Serialize + serde::de::DeserializeOwned, T: PrimInt + Default + Copy + 'static + serde::Serialize + serde::de::DeserializeOwned + Debug,
C: Corpus<I>, C: Corpus<I>,
E: Executor<EM, I, S, Z> + HasObservers<I, OT, S>, E: Executor<EM, I, S, Z> + HasObservers<I, OT, S>,
I: Input, I: Input,
@ -42,7 +42,7 @@ const CAL_STAGE_MAX: usize = 8;
impl<C, E, EM, I, O, OT, S, T, Z> Stage<E, EM, S, Z> impl<C, E, EM, I, O, OT, S, T, Z> Stage<E, EM, S, Z>
for CalibrationStage<C, E, EM, I, O, OT, S, T, Z> for CalibrationStage<C, E, EM, I, O, OT, S, T, Z>
where where
T: PrimInt + Default + Copy + 'static + serde::Serialize + serde::de::DeserializeOwned, T: PrimInt + Default + Copy + 'static + serde::Serialize + serde::de::DeserializeOwned + Debug,
C: Corpus<I>, C: Corpus<I>,
E: Executor<EM, I, S, Z> + HasObservers<I, OT, S>, E: Executor<EM, I, S, Z> + HasObservers<I, OT, S>,
I: Input, I: Input,
@ -210,7 +210,7 @@ crate::impl_serdeany!(PowerScheduleMetadata);
impl<C, E, I, EM, O, OT, S, T, Z> CalibrationStage<C, E, EM, I, O, OT, S, T, Z> impl<C, E, I, EM, O, OT, S, T, Z> CalibrationStage<C, E, EM, I, O, OT, S, T, Z>
where where
T: PrimInt + Default + Copy + 'static + serde::Serialize + serde::de::DeserializeOwned, T: PrimInt + Default + Copy + 'static + serde::Serialize + serde::de::DeserializeOwned + Debug,
C: Corpus<I>, C: Corpus<I>,
E: Executor<EM, I, S, Z> + HasObservers<I, OT, S>, E: Executor<EM, I, S, Z> + HasObservers<I, OT, S>,
I: Input, I: Input,

View File

@ -1,7 +1,7 @@
//! The power schedules. This stage should be invoked after the calibration stage. //! The power schedules. This stage should be invoked after the calibration stage.
use alloc::string::{String, ToString}; use alloc::string::{String, ToString};
use core::marker::PhantomData; use core::{fmt::Debug, marker::PhantomData};
use num_traits::PrimInt; use num_traits::PrimInt;
use crate::{ use crate::{
@ -34,7 +34,7 @@ const HAVOC_MAX_MULT: f64 = 64.0;
#[derive(Clone, Debug)] #[derive(Clone, Debug)]
pub struct PowerMutationalStage<C, E, EM, I, M, O, OT, S, T, Z> pub struct PowerMutationalStage<C, E, EM, I, M, O, OT, S, T, Z>
where where
T: PrimInt + Default + Copy + 'static + serde::Serialize + serde::de::DeserializeOwned, T: PrimInt + Default + Copy + 'static + serde::Serialize + serde::de::DeserializeOwned + Debug,
C: Corpus<I>, C: Corpus<I>,
E: Executor<EM, I, S, Z> + HasObservers<I, OT, S>, E: Executor<EM, I, S, Z> + HasObservers<I, OT, S>,
I: Input, I: Input,
@ -55,7 +55,7 @@ where
impl<C, E, EM, I, M, O, OT, S, T, Z> MutationalStage<C, E, EM, I, M, S, Z> impl<C, E, EM, I, M, O, OT, S, T, Z> MutationalStage<C, E, EM, I, M, S, Z>
for PowerMutationalStage<C, E, EM, I, M, O, OT, S, T, Z> for PowerMutationalStage<C, E, EM, I, M, O, OT, S, T, Z>
where where
T: PrimInt + Default + Copy + 'static + serde::Serialize + serde::de::DeserializeOwned, T: PrimInt + Default + Copy + 'static + serde::Serialize + serde::de::DeserializeOwned + Debug,
C: Corpus<I>, C: Corpus<I>,
E: Executor<EM, I, S, Z> + HasObservers<I, OT, S>, E: Executor<EM, I, S, Z> + HasObservers<I, OT, S>,
I: Input, I: Input,
@ -156,7 +156,7 @@ where
impl<C, E, EM, I, M, O, OT, S, T, Z> Stage<E, EM, S, Z> impl<C, E, EM, I, M, O, OT, S, T, Z> Stage<E, EM, S, Z>
for PowerMutationalStage<C, E, EM, I, M, O, OT, S, T, Z> for PowerMutationalStage<C, E, EM, I, M, O, OT, S, T, Z>
where where
T: PrimInt + Default + Copy + 'static + serde::Serialize + serde::de::DeserializeOwned, T: PrimInt + Default + Copy + 'static + serde::Serialize + serde::de::DeserializeOwned + Debug,
C: Corpus<I>, C: Corpus<I>,
E: Executor<EM, I, S, Z> + HasObservers<I, OT, S>, E: Executor<EM, I, S, Z> + HasObservers<I, OT, S>,
I: Input, I: Input,
@ -183,7 +183,7 @@ where
impl<C, E, EM, I, M, O, OT, S, T, Z> PowerMutationalStage<C, E, EM, I, M, O, OT, S, T, Z> impl<C, E, EM, I, M, O, OT, S, T, Z> PowerMutationalStage<C, E, EM, I, M, O, OT, S, T, Z>
where where
T: PrimInt + Default + Copy + 'static + serde::Serialize + serde::de::DeserializeOwned, T: PrimInt + Default + Copy + 'static + serde::Serialize + serde::de::DeserializeOwned + Debug,
C: Corpus<I>, C: Corpus<I>,
E: Executor<EM, I, S, Z> + HasObservers<I, OT, S>, E: Executor<EM, I, S, Z> + HasObservers<I, OT, S>,
I: Input, I: Input,