| 44 | |
| 45 | #[test] |
| 46 | fn link_twice_bad() -> Result<()> { |
| 47 | let mut store = Store::<()>::default(); |
| 48 | let mut linker = Linker::<()>::new(store.engine()); |
| 49 | |
| 50 | // functions |
| 51 | linker.func_wrap("f", "", || {})?; |
| 52 | assert!(linker.func_wrap("f", "", || {}).is_err()); |
| 53 | assert!( |
| 54 | linker |
| 55 | .func_wrap("f", "", || -> Result<()> { loop {} }) |
| 56 | .is_err() |
| 57 | ); |
| 58 | |
| 59 | // globals |
| 60 | let ty = GlobalType::new(ValType::I32, Mutability::Const); |
| 61 | let global = Global::new(&mut store, ty, Val::I32(0))?; |
| 62 | linker.define(&mut store, "g", "1", global)?; |
| 63 | assert!(linker.define(&mut store, "g", "1", global).is_err()); |
| 64 | |
| 65 | let ty = GlobalType::new(ValType::I32, Mutability::Var); |
| 66 | let global = Global::new(&mut store, ty, Val::I32(0))?; |
| 67 | linker.define(&mut store, "g", "2", global)?; |
| 68 | assert!(linker.define(&mut store, "g", "2", global).is_err()); |
| 69 | |
| 70 | let ty = GlobalType::new(ValType::I64, Mutability::Const); |
| 71 | let global = Global::new(&mut store, ty, Val::I64(0))?; |
| 72 | linker.define(&mut store, "g", "3", global)?; |
| 73 | assert!(linker.define(&mut store, "g", "3", global).is_err()); |
| 74 | |
| 75 | // memories |
| 76 | let ty = MemoryType::new(1, None); |
| 77 | let memory = Memory::new(&mut store, ty)?; |
| 78 | linker.define(&mut store, "m", "", memory)?; |
| 79 | assert!(linker.define(&mut store, "m", "", memory).is_err()); |
| 80 | let ty = MemoryType::new(2, None); |
| 81 | let memory = Memory::new(&mut store, ty)?; |
| 82 | assert!(linker.define(&mut store, "m", "", memory).is_err()); |
| 83 | |
| 84 | // tables |
| 85 | let ty = TableType::new(RefType::FUNCREF, 1, None); |
| 86 | let table = Table::new(&mut store, ty, Ref::Func(None))?; |
| 87 | linker.define(&mut store, "t", "", table)?; |
| 88 | assert!(linker.define(&mut store, "t", "", table).is_err()); |
| 89 | let ty = TableType::new(RefType::FUNCREF, 2, None); |
| 90 | let table = Table::new(&mut store, ty, Ref::Func(None))?; |
| 91 | assert!(linker.define(&mut store, "t", "", table).is_err()); |
| 92 | Ok(()) |
| 93 | } |
| 94 | |
| 95 | #[test] |
| 96 | #[cfg_attr(miri, ignore)] |