diff --git a/src/executors/mod.rs b/src/executors/mod.rs index 98cdc990af..e9682040a6 100644 --- a/src/executors/mod.rs +++ b/src/executors/mod.rs @@ -81,3 +81,46 @@ impl Executor for InMemoryExecutor { self.base.observers.push(observer); } } + +impl InMemoryExecutor { + fn new(harness_fn: HarnessFunction) -> InMemoryExecutor { + InMemoryExecutor { + base: ExecutorBase { + observers: vec![], + cur_input: Option::None, + }, + harness: harness_fn, + } + } +} + +#[cfg(test)] +mod tests { + use crate::executors::{Executor, ExitKind, InMemoryExecutor}; + use crate::observers::Observer; + use crate::AflError; + + struct Nopserver {} + + impl Observer for Nopserver { + fn reset(&mut self) -> Result<(), AflError> { + Err(AflError::Unknown) + } + fn post_exec(&mut self) -> Result<(), AflError> { + Err(AflError::Unknown) + } + } + + fn test_harness_fn_nop(_executor: &dyn Executor, buf: &[u8]) -> ExitKind { + println! {"Fake exec with buf of len {}", buf.len()}; + ExitKind::Ok + } + + #[test] + fn test_inmem_post_exec() { + let mut in_mem_executor = InMemoryExecutor::new(test_harness_fn_nop); + let nopserver = Nopserver {}; + in_mem_executor.add_observer(Box::new(nopserver)); + assert_eq!(in_mem_executor.post_exec_observers().is_err(), true); + } +} diff --git a/src/inputs/bytes.rs b/src/inputs/bytes.rs index e2ad2cbd90..5b226c1061 100644 --- a/src/inputs/bytes.rs +++ b/src/inputs/bytes.rs @@ -16,3 +16,27 @@ impl Input for BytesInput { Ok(()) } } + +#[cfg(test)] +mod tests { + use crate::utils::{next_pow2, Rand, Xoshiro256StarRand}; + + #[test] + fn test_input() { + let mut rand = Xoshiro256StarRand::new(); + assert_ne!(rand.next(), rand.next()); + assert!(rand.below(100) < 100); + assert_eq!(rand.below(1), 0); + assert_eq!(rand.between(10, 10), 10); + assert!(rand.between(11, 20) > 10); + } + + #[test] + fn test_next_pow2() { + assert_eq!(next_pow2(0), 0); + assert_eq!(next_pow2(1), 1); + assert_eq!(next_pow2(2), 2); + assert_eq!(next_pow2(3), 4); + assert_eq!(next_pow2(1000), 1024); + } +} diff --git a/src/utils.rs b/src/utils.rs index 7b87525cbd..11cd541189 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -88,7 +88,7 @@ impl Xoshiro256StarRand { } /// Get the next higher power of two -fn next_pow2(val: u64) -> u64 { +pub fn next_pow2(val: u64) -> u64 { // Early exit so we don't have to do a wrapping subtract; if val <= 2 { return val;