xref: /wasmtime-44.0.1/tests/all/tags.rs (revision 366f320d)
1 use wasmtime::*;
2 
3 #[test]
4 #[cfg_attr(miri, ignore)]
wasm_export_tags() -> Result<()>5 fn wasm_export_tags() -> Result<()> {
6     let source = r#"
7             (module
8                 (tag (export "t1") (param i32) (result i32))
9                 (tag (export "t2") (param i32) (result i32))
10                 (tag (export "t3") (param i64) (result i32))
11             )
12         "#;
13     let _ = env_logger::try_init();
14     let mut config = Config::new();
15     config.wasm_exceptions(true).wasm_stack_switching(true);
16     let engine = Engine::new(&config)?;
17     let mut store = Store::new(&engine, ());
18     let module = Module::new(&engine, source)?;
19 
20     let instance = Instance::new(&mut store, &module, &[])?;
21     let t1 = instance.get_tag(&mut store, "t1");
22     assert!(t1.is_some());
23     let t1 = t1.unwrap();
24 
25     let t2 = instance.get_tag(&mut store, "t2");
26     assert!(t2.is_some());
27     let t2 = t2.unwrap();
28 
29     let t1_ty = t1.ty(&store);
30     let t2_ty = t2.ty(&store);
31     assert!(Tag::eq(&t1, &t1, &store));
32     assert!(!Tag::eq(&t1, &t2, &store));
33     assert!(FuncType::eq(t1_ty.ty(), t2_ty.ty()));
34 
35     let t3 = instance.get_tag(&mut store, "t3");
36     assert!(t3.is_some());
37     let t3 = t3.unwrap();
38     let t3_ty = t3.ty(&store);
39     assert!(Tag::eq(&t3, &t3, &store));
40     assert!(!Tag::eq(&t3, &t1, &store));
41     assert!(!Tag::eq(&t3, &t2, &store));
42     assert!(!FuncType::eq(t1_ty.ty(), t3_ty.ty()));
43 
44     return Ok(());
45 }
46 
47 #[test]
48 #[cfg_attr(miri, ignore)]
wasm_import_tags() -> Result<()>49 fn wasm_import_tags() -> Result<()> {
50     let m1_src = r#"
51             (module
52                 (tag (export "t1") (param i32) (result i32))
53             )
54         "#;
55     let m2_src = r#"
56             (module
57                 (tag (export "t1_2") (import "" "") (param i32) (result i32))
58                 (tag (export "t1_22") (import "" "") (param i32) (result i32))
59                 (tag (export "t2") (param i32) (result i32))
60             )
61         "#;
62     let _ = env_logger::try_init();
63     let mut config = Config::new();
64     config.wasm_exceptions(true).wasm_stack_switching(true);
65     let engine = Engine::new(&config)?;
66     let mut store = Store::new(&engine, ());
67     let m1 = Module::new(&engine, m1_src)?;
68     let m2 = Module::new(&engine, m2_src)?;
69 
70     let m1_instance = Instance::new(&mut store, &m1, &[])?;
71     let t1 = m1_instance.get_tag(&mut store, "t1").unwrap();
72     let m2_instance = Instance::new(&mut store, &m2, &[t1.into(), t1.into()])?;
73     let t1_2 = m2_instance.get_tag(&mut store, "t1_2").unwrap();
74     assert!(Tag::eq(&t1, &t1_2, &store));
75     let t1_22 = m2_instance.get_tag(&mut store, "t1_22").unwrap();
76     assert!(Tag::eq(&t1, &t1_22, &store));
77     assert!(Tag::eq(&t1_2, &t1_22, &store));
78 
79     return Ok(());
80 }
81