Sha256: 2b87099cb0869d3ad8974607401d0662a4ce672f69d014d1e85eb1d29b4ba79b

Contents?: true

Size: 1.18 KB

Versions: 19

Compression:

Stored size: 1.18 KB

Contents

use magnus::r_struct::{define_struct, RStruct};

macro_rules! rb_assert {
    ($s:literal) => {
        assert!(magnus::eval::<bool>($s).unwrap())
    };
    ($s:literal, $($rest:tt)*) => {
        let result: bool = magnus::eval!($s, $($rest)*).unwrap();
        assert!(result)
    };
}

#[test]
fn it_defines_a_struct() {
    let _cleanup = unsafe { magnus::embed::init() };

    let struct_class = define_struct(Some("Foo"), ("bar", "baz")).unwrap();

    rb_assert!(r#"val.name == "Struct::Foo""#, val = struct_class);
    rb_assert!("val.members == [:bar, :baz]", val = struct_class);

    let obj = struct_class.new_instance((1, 2)).unwrap();

    rb_assert!("val.bar == 1", val = obj);
    rb_assert!("val.baz == 2", val = obj);

    rb_assert!(
        r#"val.name == nil"#,
        val = define_struct(None, ("foo",)).unwrap()
    );

    let obj = RStruct::from_value(obj).unwrap();
    unsafe {
        if let &[bar, baz] = obj.as_slice() {
            assert_eq!(1, bar.try_convert::<usize>().unwrap());
            assert_eq!(2, baz.try_convert::<usize>().unwrap());
        } else {
            panic!()
        }
    }

    assert_eq!(&["bar", "baz"], obj.members().unwrap().as_slice())
}

Version data entries

19 entries across 19 versions & 1 rubygems

Version Path
wasmtime-14.0.4 ./ext/cargo-vendor/magnus-0.5.5/tests/struct.rs
wasmtime-14.0.3 ./ext/cargo-vendor/magnus-0.5.5/tests/struct.rs
wasmtime-14.0.1 ./ext/cargo-vendor/magnus-0.5.5/tests/struct.rs
wasmtime-14.0.0 ./ext/cargo-vendor/magnus-0.5.5/tests/struct.rs
wasmtime-13.0.0 ./ext/cargo-vendor/magnus-0.5.5/tests/struct.rs
wasmtime-12.0.1 ./ext/cargo-vendor/magnus-0.5.5/tests/struct.rs
wasmtime-12.0.0 ./ext/cargo-vendor/magnus-0.5.5/tests/struct.rs
wasmtime-11.0.0 ./ext/cargo-vendor/magnus-0.5.5/tests/struct.rs
wasmtime-10.0.1 ./ext/cargo-vendor/magnus-0.5.5/tests/struct.rs
wasmtime-10.0.0 ./ext/cargo-vendor/magnus-0.5.5/tests/struct.rs
wasmtime-9.0.4 ./ext/cargo-vendor/magnus-0.5.5/tests/struct.rs
wasmtime-9.0.1 ./ext/cargo-vendor/magnus-0.5.3/tests/struct.rs
wasmtime-8.0.0 ./ext/cargo-vendor/magnus-0.5.3/tests/struct.rs
wasmtime-7.0.0 ./ext/cargo-vendor/magnus-0.5.2/tests/struct.rs
wasmtime-6.0.1 ./ext/cargo-vendor/magnus-0.5.1/tests/struct.rs
wasmtime-6.0.0 ./ext/cargo-vendor/magnus-0.5.1/tests/struct.rs
wasmtime-5.0.0 ./ext/cargo-vendor/magnus-0.4.4/tests/struct.rs
wasmtime-0.4.1 ./ext/cargo-vendor/magnus-0.4.4/tests/struct.rs
wasmtime-0.4.0 ./ext/cargo-vendor/magnus-0.4.3/tests/struct.rs