Thanks very much for the tests! On Mon, Mar 17, 2025 at 3:52 PM Zhao Liu <zhao1....@intel.com> wrote: > -pub use crate::bindings::{VMStateDescription, VMStateField}; > -use crate::{ > - bindings::VMStateFlags, callbacks::FnCall, prelude::*, qom::Owned, > zeroable::Zeroable, > -}; > +pub use crate::bindings::{VMStateDescription, VMStateField, VMStateFlags};
Does VMStateFlags have to be part of the public API? > + assert_eq!(foo_fields[0].info, unsafe { > + ::core::ptr::addr_of!(vmstate_info_int8) > + }); You can use & instead of addr_of here. > + assert_eq!(foo_fields[0].version_id, 0); > + assert_eq!(foo_fields[0].size, 1); > + assert_eq!(foo_fields[0].num, 0); > + assert_eq!(foo_fields[0].flags, VMStateFlags::VMS_SINGLE); > + assert_eq!(foo_fields[0].vmsd.is_null(), true); > + assert_eq!(foo_fields[0].field_exists.is_none(), true); > + > + // 2nd VMStateField ("unused") in VMSTATE_FOOA (corresponding to > VMSTATE_UNUSED) > + assert_eq!( > + unsafe { CStr::from_ptr(foo_fields[1].name) }.to_bytes_with_nul(), > + b"unused\0" > + ); > + assert_eq!(foo_fields[1].offset, 0); > + assert_eq!(foo_fields[1].num_offset, 0); > + assert_eq!(foo_fields[1].info, unsafe { > + ::core::ptr::addr_of!(vmstate_info_unused_buffer) > + }); > + assert_eq!(foo_fields[1].version_id, 0); > + assert_eq!(foo_fields[1].size, 8); > + assert_eq!(foo_fields[1].num, 0); > + assert_eq!(foo_fields[1].flags, VMStateFlags::VMS_BUFFER); > + assert_eq!(foo_fields[1].vmsd.is_null(), true); > + assert_eq!(foo_fields[1].field_exists.is_none(), true); > + > + // 3rd VMStateField ("arr") in VMSTATE_FOOA (corresponding to > + // VMSTATE_VARRAY_UINT16_UNSAFE) > + assert_eq!( > + unsafe { CStr::from_ptr(foo_fields[2].name) }.to_bytes_with_nul(), > + b"arr\0" > + ); > + assert_eq!(foo_fields[2].offset, 0); > + assert_eq!(foo_fields[2].num_offset, 4); > + assert_eq!(foo_fields[2].info, unsafe { > + ::core::ptr::addr_of!(vmstate_info_uint8) > + }); > + assert_eq!(foo_fields[2].version_id, 0); > + assert_eq!(foo_fields[2].size, 1); > + assert_eq!(foo_fields[2].num, 0); > + assert_eq!(foo_fields[2].flags, VMStateFlags::VMS_VARRAY_UINT16); > + assert_eq!(foo_fields[2].vmsd.is_null(), true); > + assert_eq!(foo_fields[2].field_exists.is_none(), true); > + > + // 4th VMStateField ("arr_mul") in VMSTATE_FOOA (corresponding to > + // VMSTATE_VARRAY_MULTIPLY) > + assert_eq!( > + unsafe { CStr::from_ptr(foo_fields[3].name) }.to_bytes_with_nul(), > + b"arr_mul\0" > + ); > + assert_eq!(foo_fields[3].offset, 6); > + assert_eq!(foo_fields[3].num_offset, 12); > + assert_eq!(foo_fields[3].info, unsafe { > + ::core::ptr::addr_of!(vmstate_info_int8) > + }); > + assert_eq!(foo_fields[3].version_id, 0); > + assert_eq!(foo_fields[3].size, 1); > + assert_eq!(foo_fields[3].num, 16); > + assert_eq!( > + foo_fields[3].flags.0, > + VMStateFlags::VMS_VARRAY_UINT32.0 | > VMStateFlags::VMS_MULTIPLY_ELEMENTS.0 > + ); > + assert_eq!(foo_fields[3].vmsd.is_null(), true); > + assert_eq!(foo_fields[3].field_exists.is_none(), true); > + > + // The last VMStateField in VMSTATE_FOOA. > + assert_eq!(foo_fields[4].flags, VMStateFlags::VMS_END); > +} > -- > 2.34.1 >