/ tests / tests / compiler / core / algorithms / hash_raw_bhp.adl
hash_raw_bhp.adl
 1  /*
 2  namespace: Compile
 3  expectation: Pass
 4  */
 5  
 6  program test.alpha {
 7      struct Data {
 8          x: u32,
 9          y: u32,
10      }
11  
12      // Test all BHP raw hash variants
13      transition main(input: u64) -> (
14          address, field, group, i8, u32, scalar,  // BHP256 raw
15          field, group, scalar,                     // BHP512 raw
16          field, u64,                               // BHP768 raw
17          field, i128,                              // BHP1024 raw
18          bool, bool, bool                          // Comparison flags
19      ) {
20          let data: Data = Data { x: 10u32, y: 20u32 };
21  
22          // BHP256 raw hashes - test all output types
23          let bhp256_addr_raw: address = BHP256::hash_to_address_raw(input);
24          let bhp256_field_raw: field = BHP256::hash_to_field_raw(input);
25          let bhp256_group_raw: group = BHP256::hash_to_group_raw(input);
26          let bhp256_i8_raw: i8 = BHP256::hash_to_i8_raw(input);
27          let bhp256_u32_raw: u32 = BHP256::hash_to_u32_raw(input);
28          let bhp256_scalar_raw: scalar = BHP256::hash_to_scalar_raw(input);
29  
30          // BHP512 raw hashes
31          let bhp512_field_raw: field = BHP512::hash_to_field_raw(input);
32          let bhp512_group_raw: group = BHP512::hash_to_group_raw(input);
33          let bhp512_scalar_raw: scalar = BHP512::hash_to_scalar_raw(input);
34  
35          // BHP768 raw hashes with struct
36          let bhp768_field_raw: field = BHP768::hash_to_field_raw(data);
37          let bhp768_u64_raw: u64 = BHP768::hash_to_u64_raw(data);
38  
39          // BHP1024 raw hashes with struct
40          let bhp1024_field_raw: field = BHP1024::hash_to_field_raw(data);
41          let bhp1024_i128_raw: i128 = BHP1024::hash_to_i128_raw(data);
42  
43          // Test that raw variants produce different results than non-raw
44          let bhp256_field_normal: field = BHP256::hash_to_field(input);
45          let bhp512_field_normal: field = BHP512::hash_to_field(input);
46          let bhp768_field_normal: field = BHP768::hash_to_field(data);
47  
48          return (
49              bhp256_addr_raw, bhp256_field_raw, bhp256_group_raw, bhp256_i8_raw, bhp256_u32_raw, bhp256_scalar_raw,
50              bhp512_field_raw, bhp512_group_raw, bhp512_scalar_raw,
51              bhp768_field_raw, bhp768_u64_raw,
52              bhp1024_field_raw, bhp1024_i128_raw,
53              bhp256_field_raw != bhp256_field_normal,
54              bhp512_field_raw != bhp512_field_normal,
55              bhp768_field_raw != bhp768_field_normal
56          );
57      }
58  }