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