make map debuggable (#396)
This commit is contained in:
parent
8a57361e84
commit
ca767752d0
@ -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>,
|
||||||
|
@ -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]> {
|
||||||
|
@ -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,
|
||||||
|
@ -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,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user