[go: up one dir, main page]

typesize 0.1.3

A library to fetch an accurate estimate of the total memory usage of a value.
Documentation
use typesize::{derive::TypeSize, TypeSize};

#[test]
fn struct_named_fields() {
    #[derive(Default, TypeSize)]
    struct NamedFields {
        a: u8,
        b: u8,
    }

    assert_eq!(NamedFields::default().get_size(), 0_u8.get_size() * 2)
}

#[test]
fn struct_unnamed_field() {
    #[derive(Default, TypeSize)]
    struct UnnamedFields(u8, u8);

    assert_eq!(UnnamedFields::default().get_size(), 0_u8.get_size() * 2)
}

#[test]
fn struct_unit() {
    #[derive(TypeSize)]
    struct Unit;

    #[derive(TypeSize)]
    struct NamedUnit {}

    #[derive(TypeSize)]
    struct UnnamedUnit();

    assert_eq!(Unit.get_size(), 0);
    assert_eq!(NamedUnit {}.get_size(), 0);
    assert_eq!(UnnamedUnit().get_size(), 0);
}

#[test]
fn struct_padding() {
    #[derive(Default, TypeSize)]
    struct PaddingTest(u8, u64);

    #[repr(packed)]
    #[derive(Default, TypeSize)]
    struct PackedTest(u8, u64);

    assert_eq!(
        PaddingTest::default().get_size(),
        std::mem::size_of::<PaddingTest>()
    );

    assert_eq!(
        PackedTest::default().get_size(),
        0_u64.get_size() + 0_u8.get_size()
    )
}

#[test]
fn struct_generic() {
    #[derive(Default, TypeSize)]
    struct GenericTest<T: TypeSize>(T);

    assert_eq!(GenericTest::<u8>::default().get_size(), 0_u8.get_size())
}