Skip to content

Commit 6c38633

Browse files
committed
Remove union support code.
Signed-off-by: Andrei Sandu <[email protected]>
1 parent 6668b79 commit 6c38633

File tree

1 file changed

+0
-346
lines changed

1 file changed

+0
-346
lines changed

tests/test.rs

Lines changed: 0 additions & 346 deletions
Original file line numberDiff line numberDiff line change
@@ -295,137 +295,6 @@ fn test_hardcoded_struct_deserialization() {
295295
assert_eq!(restored_state, expected_state);
296296
}
297297

298-
#[repr(C)]
299-
#[derive(Versionize)]
300-
union TestUnion {
301-
a: i16,
302-
b: i32,
303-
#[version(start = 2, end = 3)]
304-
c: [u32; 4usize],
305-
#[version(start = 3)]
306-
d: u64,
307-
}
308-
309-
impl Default for TestUnion {
310-
fn default() -> Self {
311-
TestUnion { b: 64i32 }
312-
}
313-
}
314-
315-
impl Debug for TestUnion {
316-
fn fmt(&self, f: &mut Formatter<'_>) -> Result {
317-
unsafe {
318-
write!(
319-
f,
320-
"{{ a: {:?}, b: {:?}, c: {:?}, d: {:?} }}",
321-
self.a, self.b, self.c, self.d
322-
)
323-
}
324-
}
325-
}
326-
327-
#[test]
328-
fn test_hardcoded_union_deserialization() {
329-
// We are testing separately representation compatibility between versions for unions as it
330-
// is pretty awkward to implement PartialEq for unions.
331-
332-
// The union instance size at a certain version will be equal with the max size of the available
333-
// fields at that version.
334-
#[rustfmt::skip]
335-
let v1_hardcoded_snapshot: &[u8] = &[
336-
// union value (4 bytes).
337-
0x01, 0x02, 0x03, 0x04,
338-
];
339-
340-
#[rustfmt::skip]
341-
let v2_hardcoded_snapshot: &[u8] = &[
342-
// 4 elements Vec of u32.
343-
0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
344-
0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x00,
345-
];
346-
347-
#[rustfmt::skip]
348-
let v3_hardcoded_snapshot: &[u8] = &[
349-
0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
350-
];
351-
352-
#[rustfmt::skip]
353-
let short_v3_hardcoded_snapshot: &[u8] = &[
354-
0x01, 0x02, 0x03, 0x04,
355-
];
356-
357-
#[rustfmt::skip]
358-
let long_v3_hardcoded_snapshot: &[u8] = &[
359-
0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
360-
0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x00,
361-
];
362-
363-
let mut vm = VersionMap::new();
364-
vm.new_version()
365-
.set_type_version(TestUnion::type_id(), 2)
366-
.new_version()
367-
.set_type_version(TestUnion::type_id(), 3);
368-
369-
let mut snapshot_blob = v1_hardcoded_snapshot;
370-
371-
let mut restored_state =
372-
<TestUnion as Versionize>::deserialize(&mut snapshot_blob, &vm, 1).unwrap();
373-
unsafe {
374-
assert_eq!(restored_state.a, 0x0201i16);
375-
assert_eq!(restored_state.b, 0x0403_0201i32);
376-
}
377-
378-
snapshot_blob = v2_hardcoded_snapshot;
379-
380-
restored_state = <TestUnion as Versionize>::deserialize(&mut snapshot_blob, &vm, 2).unwrap();
381-
unsafe {
382-
assert_eq!(restored_state.a, 0x0201i16);
383-
assert_eq!(restored_state.b, 0x0403_0201i32);
384-
assert_eq!(
385-
restored_state.c,
386-
[
387-
0x0403_0201u32,
388-
0x0807_0605u32,
389-
0x0C0B_0A09u32,
390-
0x000F_0E0Du32
391-
]
392-
);
393-
}
394-
395-
snapshot_blob = v3_hardcoded_snapshot;
396-
397-
restored_state = <TestUnion as Versionize>::deserialize(&mut snapshot_blob, &vm, 3).unwrap();
398-
unsafe {
399-
assert_eq!(restored_state.a, 0x0201i16);
400-
assert_eq!(restored_state.b, 0x0403_0201i32);
401-
assert_eq!(restored_state.d, 0x0807_0605_0403_0201u64);
402-
}
403-
404-
// Let's try to deserialize a snapshot that is shorter than the expected one for version 3.
405-
snapshot_blob = short_v3_hardcoded_snapshot;
406-
407-
// Reading a `TestUnion` value fails if we don't provide the expected number of bytes in the
408-
// snapshot.
409-
assert_eq!(
410-
<TestUnion as Versionize>::deserialize(&mut snapshot_blob, &vm, 3).unwrap_err(),
411-
VersionizeError::Deserialize(
412-
"Io(Custom { kind: UnexpectedEof, error: \"failed to fill whole buffer\" })".to_owned()
413-
)
414-
);
415-
416-
// Now we will deserialize a longer snapshot than the expected one at version 3.
417-
snapshot_blob = long_v3_hardcoded_snapshot;
418-
419-
// Reading a `TestUnion` value won't fail, but only the number of expected bytes for version 3
420-
// (8 bytes) will be stored in the union variable.
421-
restored_state = <TestUnion as Versionize>::deserialize(&mut snapshot_blob, &vm, 3).unwrap();
422-
unsafe {
423-
assert_eq!(restored_state.a, 0x0201i16);
424-
assert_eq!(restored_state.b, 0x0403_0201i32);
425-
assert_eq!(restored_state.d, 0x0807_0605_0403_0201u64);
426-
}
427-
}
428-
429298
#[test]
430299
fn test_hardcoded_enum_deserialization() {
431300
// We are testing separately also hardcoded snapshot deserialization for enums
@@ -645,41 +514,6 @@ fn test_versionize_struct_with_array() {
645514
assert_eq!(restored_test_struct, test_struct);
646515
}
647516

648-
#[test]
649-
fn test_versionize_union_with_array() {
650-
#[derive(Versionize)]
651-
union TestUnion {
652-
a: [u32; SIZE],
653-
b: [u8; dummy_mod::SIZE],
654-
}
655-
656-
impl Default for TestUnion {
657-
fn default() -> Self {
658-
TestUnion { a: [3; SIZE] }
659-
}
660-
}
661-
662-
impl Debug for TestUnion {
663-
fn fmt(&self, f: &mut Formatter<'_>) -> Result {
664-
unsafe { write!(f, "{{ a: {:?}, b: {:?} }}", self.a, self.b) }
665-
}
666-
}
667-
668-
let test_union = TestUnion { a: [1; SIZE] };
669-
670-
let mut mem = vec![0; 4096];
671-
let version_map = VersionMap::new();
672-
673-
test_union
674-
.serialize(&mut mem.as_mut_slice(), &version_map, 1)
675-
.unwrap();
676-
let restored_test_union = TestUnion::deserialize(&mut mem.as_slice(), &version_map, 1).unwrap();
677-
678-
unsafe {
679-
assert_eq!(restored_test_union.a, test_union.a);
680-
}
681-
}
682-
683517
#[derive(Clone, Debug, PartialEq, Versionize)]
684518
pub enum DeviceStatus {
685519
Inactive,
@@ -1045,186 +879,6 @@ fn test_versionize_enum() {
1045879
assert_eq!(restored_state, State::One(false));
1046880
}
1047881

1048-
#[test]
1049-
fn test_versionize_union() {
1050-
let mut vm = VersionMap::new();
1051-
vm.new_version()
1052-
.set_type_version(TestUnion::type_id(), 2)
1053-
.new_version()
1054-
.set_type_version(TestUnion::type_id(), 3);
1055-
1056-
let state = TestUnion {
1057-
c: [
1058-
0x0403_0201u32,
1059-
0x0807_0605u32,
1060-
0x0000_0000u32,
1061-
0x2222_1111u32,
1062-
],
1063-
};
1064-
1065-
let mut snapshot_mem = vec![0u8; 1024];
1066-
1067-
// Serialize as v1.
1068-
state
1069-
.serialize(&mut snapshot_mem.as_mut_slice(), &vm, 1)
1070-
.unwrap();
1071-
let mut restored_state =
1072-
<TestUnion as Versionize>::deserialize(&mut snapshot_mem.as_slice(), &vm, 1).unwrap();
1073-
1074-
// At v1, `c` field is unavailable, so when we serialize the union, the memory occupied
1075-
// by it will be = the max size of the fields that exist at v1 (`b` -> 4 bytes). So, when
1076-
// we deserialize this union, `c` field will no longer be equal with its original value
1077-
// (only the least significant 4 bytes will be preserved).
1078-
unsafe {
1079-
assert_eq!(restored_state.c[0], 0x0403_0201u32);
1080-
assert_ne!(
1081-
restored_state.c,
1082-
[
1083-
0x0403_0201u32,
1084-
0x0807_0605u32,
1085-
0x0000_0000u32,
1086-
0x2222_1111u32
1087-
]
1088-
);
1089-
}
1090-
1091-
// Serialize as v2.
1092-
state
1093-
.serialize(&mut snapshot_mem.as_mut_slice(), &vm, 2)
1094-
.unwrap();
1095-
restored_state =
1096-
<TestUnion as Versionize>::deserialize(&mut snapshot_mem.as_slice(), &vm, 2).unwrap();
1097-
1098-
// At v2, `c` field is available. So, when we deserialize the union, we expect that `c` field
1099-
// will be equal with its original value.
1100-
unsafe {
1101-
assert_eq!(
1102-
restored_state.c,
1103-
[
1104-
0x0403_0201u32,
1105-
0x0807_0605u32,
1106-
0x0000_0000u32,
1107-
0x2222_1111u32
1108-
]
1109-
);
1110-
}
1111-
1112-
// Serialize as v3.
1113-
state
1114-
.serialize(&mut snapshot_mem.as_mut_slice(), &vm, 3)
1115-
.unwrap();
1116-
restored_state =
1117-
<TestUnion as Versionize>::deserialize(&mut snapshot_mem.as_slice(), &vm, 3).unwrap();
1118-
1119-
// At v3, `d` field is available and `c` field not, so the memory occupied by the union, when
1120-
// serializing it, will be = `d` field size (8 bytes).
1121-
unsafe {
1122-
assert_eq!(restored_state.c[0], 0x0403_0201u32);
1123-
assert_eq!(restored_state.c[1], 0x0807_0605u32);
1124-
}
1125-
}
1126-
1127-
#[allow(non_upper_case_globals)]
1128-
#[allow(non_camel_case_types)]
1129-
#[allow(non_snake_case)]
1130-
#[test]
1131-
fn test_versionize_union_with_struct() {
1132-
#[derive(Clone, Copy, Versionize)]
1133-
struct kvm_run__bindgen_ty_1 {
1134-
pub code_1: u64,
1135-
pub code_2: u32,
1136-
}
1137-
1138-
#[repr(C)]
1139-
#[derive(Clone, Copy, Versionize)]
1140-
union kvm_irq_level__bindgen_ty_1 {
1141-
irq: ::std::os::raw::c_uint,
1142-
status: ::std::os::raw::c_int,
1143-
other_status: ::std::os::raw::c_longlong,
1144-
1145-
#[version(start = 1, end = 1)]
1146-
bindgen_union_align: [u64; 2usize],
1147-
1148-
#[version(start = 2)]
1149-
extended_status: ::std::os::raw::c_longlong,
1150-
1151-
#[version(start = 2)]
1152-
kvm_run_field: kvm_run__bindgen_ty_1,
1153-
1154-
#[version(start = 3)]
1155-
bindgen_union_align_2: [u64; 2usize],
1156-
}
1157-
1158-
impl Default for kvm_irq_level__bindgen_ty_1 {
1159-
fn default() -> Self {
1160-
unsafe { ::std::mem::zeroed() }
1161-
}
1162-
}
1163-
1164-
let mut vm = VersionMap::new();
1165-
vm.new_version()
1166-
.set_type_version(kvm_irq_level__bindgen_ty_1::type_id(), 2)
1167-
.new_version()
1168-
.set_type_version(kvm_irq_level__bindgen_ty_1::type_id(), 3);
1169-
1170-
let state = kvm_irq_level__bindgen_ty_1 {
1171-
bindgen_union_align_2: [0x1234_5678_8765_4321u64, 0x1122_3344_5555_6666u64],
1172-
};
1173-
1174-
let mut snapshot_mem = vec![0u8; 256];
1175-
1176-
// Serialize as v1.
1177-
state
1178-
.serialize(&mut snapshot_mem.as_mut_slice(), &vm, 1)
1179-
.unwrap();
1180-
let mut restored_state = <kvm_irq_level__bindgen_ty_1 as Versionize>::deserialize(
1181-
&mut snapshot_mem.as_slice(),
1182-
&vm,
1183-
1,
1184-
)
1185-
.unwrap();
1186-
unsafe {
1187-
assert_ne!(
1188-
restored_state.bindgen_union_align_2,
1189-
[0x1234_5678_8765_4321u64, 0x1122_3344_5555_6666u64]
1190-
);
1191-
}
1192-
1193-
// Serialize as v2.
1194-
state
1195-
.serialize(&mut snapshot_mem.as_mut_slice(), &vm, 2)
1196-
.unwrap();
1197-
restored_state = <kvm_irq_level__bindgen_ty_1 as Versionize>::deserialize(
1198-
&mut snapshot_mem.as_slice(),
1199-
&vm,
1200-
2,
1201-
)
1202-
.unwrap();
1203-
unsafe {
1204-
assert_ne!(
1205-
restored_state.bindgen_union_align_2,
1206-
[0x1234_5678_8765_4321u64, 0x1122_3344_5555_6666u64]
1207-
);
1208-
}
1209-
1210-
// Serialize as v3.
1211-
state
1212-
.serialize(&mut snapshot_mem.as_mut_slice(), &vm, 3)
1213-
.unwrap();
1214-
restored_state = <kvm_irq_level__bindgen_ty_1 as Versionize>::deserialize(
1215-
&mut snapshot_mem.as_slice(),
1216-
&vm,
1217-
3,
1218-
)
1219-
.unwrap();
1220-
unsafe {
1221-
assert_eq!(
1222-
restored_state.bindgen_union_align_2,
1223-
[0x1234_5678_8765_4321u64, 0x1122_3344_5555_6666u64]
1224-
);
1225-
}
1226-
}
1227-
1228882
#[derive(Clone, Debug, PartialEq, Versionize)]
1229883
pub struct S {
1230884
a: f64,

0 commit comments

Comments
 (0)