deserialize_arrays.adl
1 /* 2 namespace: Compile 3 expectation: Pass 4 */ 5 6 program test.alpha { 7 // Test deserialization of arrays (non-raw and raw) 8 transition main() -> ( 9 u8, u8, u8, u8, // Deserialized [u8; 4] values 10 u32, u32, // Deserialized [u32; 2] values 11 u8, u8, u8, u8, // Raw deserialized [u8; 4] values 12 bool, bool, bool, bool // Roundtrip success flags 13 ) { 14 // Create arrays to serialize then deserialize (roundtrip test) 15 let array_u8_orig: [u8; 4] = [10u8, 20u8, 30u8, 40u8]; 16 let array_u32_orig: [u32; 2] = [1000u32, 2000u32]; 17 18 // Non-raw roundtrip (with metadata) 19 // Array serialization sizes: [u8; 4] = 234 bits, [u32; 2] = 182 bits 20 let array_u8_bits: [bool; 234] = Serialize::to_bits(array_u8_orig); 21 let array_u8_result: [u8; 4] = Deserialize::from_bits::[[u8; 4]](array_u8_bits); 22 23 let array_u32_bits: [bool; 182] = Serialize::to_bits(array_u32_orig); 24 let array_u32_result: [u32; 2] = Deserialize::from_bits::[[u32; 2]](array_u32_bits); 25 26 // Raw roundtrip (no metadata) 27 let array_u8_bits_raw: [bool; 32] = Serialize::to_bits_raw(array_u8_orig); // 4 * 8 bits 28 let array_u8_result_raw: [u8; 4] = Deserialize::from_bits_raw::[[u8; 4]](array_u8_bits_raw); 29 30 return ( 31 array_u8_result[0u8], array_u8_result[1u8], array_u8_result[2u8], array_u8_result[3u8], 32 array_u32_result[0u8], array_u32_result[1u8], 33 array_u8_result_raw[0u8], array_u8_result_raw[1u8], array_u8_result_raw[2u8], array_u8_result_raw[3u8], 34 array_u8_result[0u8] == array_u8_orig[0u8], 35 array_u32_result[0u8] == array_u32_orig[0u8], 36 array_u8_result_raw[0u8] == array_u8_orig[0u8], 37 array_u8_result_raw[3u8] == array_u8_orig[3u8] 38 ); 39 } 40 }