1
use wasmtime::{AnyRef, Config, Engine, I31, Store};
2

            
3
use super::CheckedAnyRef;
4

            
5
2
fn gc_store() -> wasmtime::Result<Store<()>> {
6
2
    let mut config = Config::new();
7
2
    config.wasm_gc(true);
8
2
    config.wasm_function_references(true);
9
2
    Ok(Store::new(&Engine::new(&config)?, ()))
10
2
}
11

            
12
#[test]
13
1
fn checked_i31_reads_an_i31_ref() -> wasmtime::Result<()> {
14
1
    let mut store = gc_store()?;
15
1
    let value = I31::new_i32(7).ok_or_else(|| wasmtime::Error::msg("7 fits in i31"))?;
16
1
    let any = AnyRef::from_i31(&mut store, value);
17
1
    assert_eq!(any.checked_i31(&store)?.get_i32(), 7);
18
1
    Ok(())
19
1
}
20

            
21
#[test]
22
1
fn checked_struct_and_array_reject_an_i31_ref_without_panicking() -> wasmtime::Result<()> {
23
1
    let mut store = gc_store()?;
24
1
    let value = I31::new_i32(7).ok_or_else(|| wasmtime::Error::msg("7 fits in i31"))?;
25
1
    let any = AnyRef::from_i31(&mut store, value);
26
1
    assert!(any.checked_struct(&store).is_err());
27
1
    assert!(any.checked_array(&store).is_err());
28
1
    Ok(())
29
1
}