serialize_arrays.adl
1 /* 2 namespace: Compile 3 expectation: Pass 4 */ 5 6 program test.alpha { 7 // Test serialization of arrays (non-raw and raw) 8 transition main() -> ( 9 bool, bool, bool, bool, // Sample bits from array serialization 10 bool, bool, bool, bool, // More array samples 11 bool, bool, bool, bool, // Raw serialization samples 12 bool, bool, bool, bool // Raw vs non-raw comparison 13 ) { 14 // 1D arrays (keep small to avoid 512-bit limit) 15 let array_u8: [u8; 4] = [1u8, 2u8, 3u8, 4u8]; 16 let array_u32: [u32; 2] = [100u32, 200u32]; 17 18 // 2D arrays 19 let array_2d: [[u8; 2]; 2] = [[1u8, 2u8], [3u8, 4u8]]; 20 21 // Non-raw serialization (includes metadata) 22 // Array serialization has overhead: [u8; 4] = 234 bits, [u32; 2] = 182 bits 23 let array_u8_bits: [bool; 234] = Serialize::to_bits(array_u8); 24 let array_u32_bits: [bool; 182] = Serialize::to_bits(array_u32); 25 26 // Raw serialization (no metadata, just concatenated elements) 27 let array_u8_bits_raw: [bool; 32] = Serialize::to_bits_raw(array_u8); // 4 * 8 bits 28 let array_u32_bits_raw: [bool; 64] = Serialize::to_bits_raw(array_u32); // 2 * 32 bits 29 30 // 2D array raw serialization 31 let array_2d_bits_raw: [bool; 32] = Serialize::to_bits_raw(array_2d); // 4 * 8 bits 32 33 // Sample bits from serializations 34 return ( 35 array_u8_bits[0u8], array_u8_bits[50u8], array_u8_bits[100u8], array_u8_bits[200u8], 36 array_u32_bits[0u8], array_u32_bits[50u8], array_u32_bits[100u8], array_u32_bits[150u8], 37 array_u8_bits_raw[0u8], array_u8_bits_raw[8u8], array_u8_bits_raw[16u8], array_u8_bits_raw[24u8], 38 array_2d_bits_raw[0u8], array_2d_bits_raw[16u8], 39 array_u8_bits[0u8] != array_u8_bits_raw[0u8], 40 array_u32_bits[0u8] != array_u32_bits_raw[0u8] 41 ); 42 } 43 }