1 #![cfg(arc_try_new)]
2
3 use std::iter;
4 use wasmtime::{Config, Engine, FuncType, Result, ValType};
5 use wasmtime_fuzzing::oom::OomTest;
6
7 #[test]
func_type_try_new() -> Result<()>8 fn func_type_try_new() -> Result<()> {
9 let mut config = Config::new();
10 config.enable_compiler(false);
11 let engine = Engine::new(&config)?;
12
13 // Run this OOM test a few times to make sure that we leave the engine's
14 // type registry in a good state when failing to register new types.
15 for i in 1..6 {
16 OomTest::new().test(|| {
17 let ty1 = FuncType::try_new(
18 &engine,
19 iter::repeat(ValType::ANYREF).take(i),
20 iter::repeat(ValType::ANYREF).take(i),
21 )?;
22 assert_eq!(ty1.params().len(), i);
23 assert_eq!(ty1.results().len(), i);
24
25 let ty2 = FuncType::try_new(
26 &engine,
27 iter::repeat(ValType::ANYREF).take(i),
28 iter::repeat(ValType::ANYREF).take(i),
29 )?;
30 assert_eq!(ty2.params().len(), i);
31 assert_eq!(ty2.results().len(), i);
32
33 let ty3 = FuncType::try_new(&engine, [], [])?;
34 assert_eq!(ty3.params().len(), 0);
35 assert_eq!(ty3.results().len(), 0);
36
37 assert!(
38 !FuncType::eq(&ty2, &ty3),
39 "{ty2:?} should not be equal to {ty3:?}"
40 );
41
42 Ok(())
43 })?;
44 }
45
46 Ok(())
47 }
48