Path: blob/main/crates/fuzzing/src/oracles/dummy.rs
3063 views
//! Dummy implementations of things that a Wasm module can import.12use wasmtime::{error::Context as _, *};34/// Create a set of dummy functions/globals/etc for the given imports.5pub fn dummy_linker<T>(store: &mut Store<T>, module: &Module) -> Result<Linker<T>> {6let mut linker = Linker::new(store.engine());7linker.allow_shadowing(true);8for import in module.imports() {9let extern_ = import.ty().default_value(&mut *store).with_context(|| {10format!(11"failed to create dummy value of `{}::{}` - {:?}",12import.module(),13import.name(),14import.ty(),15)16})?;17linker18.define(&store, import.module(), import.name(), extern_)19.unwrap();20}21Ok(linker)22}2324#[cfg(test)]25mod tests {2627use super::*;2829fn store() -> Store<()> {30let mut config = Config::default();31config.wasm_multi_memory(true);32let engine = wasmtime::Engine::new(&config).unwrap();33Store::new(&engine, ())34}3536#[test]37fn dummy_table_import() {38let mut store = store();39let table_type = TableType::new(RefType::EXTERNREF, 10, None);40let table = table_type.default_value(&mut store).unwrap();41assert_eq!(table.size(&store), 10);42for i in 0..10 {43assert!(table.get(&mut store, i).unwrap().unwrap_extern().is_none());44}45}4647#[test]48fn dummy_global_import() {49let mut store = store();50let global_type = GlobalType::new(ValType::I32, Mutability::Const);51let global = global_type.default_value(&mut store).unwrap();52assert!(global.ty(&store).content().is_i32());53assert_eq!(global.ty(&store).mutability(), Mutability::Const);54}5556#[test]57fn dummy_memory_import() {58let mut store = store();59let memory_type = MemoryType::new(1, None);60let memory = memory_type61.default_value(&mut store)62.unwrap()63.into_memory()64.unwrap();65assert_eq!(memory.size(&store), 1);66}6768#[test]69fn dummy_function_import() {70let mut store = store();71let func_ty = FuncType::new(store.engine(), vec![ValType::I32], vec![ValType::I64]);72let func = func_ty.default_value(&mut store).unwrap();73let actual_ty = func.ty(&store);74assert!(FuncType::eq(&actual_ty, &func_ty));75}76}777879