/ tests / tests / compiler / core / algorithms / deserialize_arrays.adl
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  }