()
| 412 | #[test] |
| 413 | #[cfg_attr(miri, ignore)] |
| 414 | fn test_default_value_unknown_import() -> Result<()> { |
| 415 | const WAT: &str = r#" |
| 416 | (module |
| 417 | (import "unknown" "func" (func $unknown_func (result i64 f32 externref))) |
| 418 | (func (export "run") (result i64 f32 externref) |
| 419 | call $unknown_func |
| 420 | ) |
| 421 | ) |
| 422 | "#; |
| 423 | |
| 424 | let mut store = Store::<()>::default(); |
| 425 | let module = Module::new(store.engine(), WAT).expect("failed to create module"); |
| 426 | let mut linker = Linker::new(store.engine()); |
| 427 | |
| 428 | linker.define_unknown_imports_as_default_values(&mut store, &module)?; |
| 429 | let instance = linker.instantiate(&mut store, &module)?; |
| 430 | |
| 431 | // "run" calls an import function which will not be defined, so it should |
| 432 | // return default values. |
| 433 | let run_func = instance |
| 434 | .get_func(&mut store, "run") |
| 435 | .expect("expected a run func in the module"); |
| 436 | |
| 437 | let mut results = vec![Val::I32(1), Val::I32(2), Val::I32(3)]; |
| 438 | run_func.call(&mut store, &[], &mut results)?; |
| 439 | |
| 440 | assert_eq!(results[0].i64(), Some(0)); |
| 441 | assert_eq!(results[1].f32(), Some(0.0)); |
| 442 | assert!(results[2].externref().unwrap().is_none()); |
| 443 | |
| 444 | Ok(()) |
| 445 | } |
| 446 | |
| 447 | #[test] |
| 448 | #[cfg_attr(miri, ignore)] |
nothing calls this directly
no test coverage detected