Path: blob/main/crates/fuzzing/src/oracles/dummy.rs
1693 views
//! Dummy implementations of things that a Wasm module can import.12use anyhow::Context;3use wasmtime::*;45/// Create a set of dummy functions/globals/etc for the given imports.6pub fn dummy_linker<T>(store: &mut Store<T>, module: &Module) -> Result<Linker<T>> {7let mut linker = Linker::new(store.engine());8linker.allow_shadowing(true);9for import in module.imports() {10let extern_ = import.ty().default_value(&mut *store).with_context(|| {11format!(12"failed to create dummy value of `{}::{}` - {:?}",13import.module(),14import.name(),15import.ty(),16)17})?;18linker19.define(&store, import.module(), import.name(), extern_)20.unwrap();21}22Ok(linker)23}2425#[cfg(test)]26mod tests {2728use super::*;2930fn store() -> Store<()> {31let mut config = Config::default();32config.wasm_multi_memory(true);33let engine = wasmtime::Engine::new(&config).unwrap();34Store::new(&engine, ())35}3637#[test]38fn dummy_table_import() {39let mut store = store();40let table_type = TableType::new(RefType::EXTERNREF, 10, None);41let table = table_type.default_value(&mut store).unwrap();42assert_eq!(table.size(&store), 10);43for i in 0..10 {44assert!(table.get(&mut store, i).unwrap().unwrap_extern().is_none());45}46}4748#[test]49fn dummy_global_import() {50let mut store = store();51let global_type = GlobalType::new(ValType::I32, Mutability::Const);52let global = global_type.default_value(&mut store).unwrap();53assert!(global.ty(&store).content().is_i32());54assert_eq!(global.ty(&store).mutability(), Mutability::Const);55}5657#[test]58fn dummy_memory_import() {59let mut store = store();60let memory_type = MemoryType::new(1, None);61let memory = memory_type.default_value(&mut store).unwrap();62assert_eq!(memory.size(&store), 1);63}6465#[test]66fn dummy_function_import() {67let mut store = store();68let func_ty = FuncType::new(store.engine(), vec![ValType::I32], vec![ValType::I64]);69let func = func_ty.default_value(&mut store).unwrap();70let actual_ty = func.ty(&store);71assert!(FuncType::eq(&actual_ty, &func_ty));72}73}747576