From 92b382b736427ce93680a22abb85a09a7f8a31db Mon Sep 17 00:00:00 2001 From: Andrew Brown Date: Mon, 2 Aug 2021 17:03:47 -0700 Subject: [PATCH] fuzz: count successful executions of differential_spec target --- fuzz/fuzz_targets/differential_spec.rs | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/fuzz/fuzz_targets/differential_spec.rs b/fuzz/fuzz_targets/differential_spec.rs index 69ec7744b7..bd42d69225 100644 --- a/fuzz/fuzz_targets/differential_spec.rs +++ b/fuzz/fuzz_targets/differential_spec.rs @@ -1,13 +1,31 @@ #![no_main] use libfuzzer_sys::fuzz_target; +use std::sync::atomic::{AtomicUsize, Ordering::SeqCst}; use wasmtime_fuzzing::{generators, oracles}; +// Keep track of how many WebAssembly modules we actually executed (i.e. ran to +// completion) versus how many were tried. +static TRIED: AtomicUsize = AtomicUsize::new(0); +static EXECUTED: AtomicUsize = AtomicUsize::new(0); + fuzz_target!(|data: ( generators::Config, wasm_smith::ConfiguredModule )| { let (config, mut wasm) = data; wasm.ensure_termination(1000); - oracles::differential_spec_execution(&wasm.to_bytes(), &config); + let tried = TRIED.fetch_add(1, SeqCst); + let executed = match oracles::differential_spec_execution(&wasm.to_bytes(), &config) { + Some(_) => EXECUTED.fetch_add(1, SeqCst), + None => EXECUTED.load(SeqCst), + }; + if tried > 0 && tried % 1000 == 0 { + println!( + "=== Execution rate ({} executed modules / {} tried modules): {}% ===", + executed, + tried, + executed as f64 / tried as f64 * 100f64 + ) + } });