/ tests / tests / compiler / const_generics / two_d_generic_array.adl
two_d_generic_array.adl
 1  program test.alpha {
 2      const M_: u32 = 2u32; // Rows in A
 3      const K_: u32 = 3u32; // Columns in A / Rows in B
 4      const N_: u32 = 2u32; // Columns in B
 5  
 6      transition main() -> [[i32; N_]; M_] {
 7          // Matrix A: 2x3
 8          let A: [[i32; K_]; M_] = [
 9              [1i32, 2i32, 3i32],
10              [4i32, 5i32, 6i32]
11          ];
12  
13          // Matrix B: 3x2
14          let B: [[i32; N_]; K_] = [
15              [7i32, 8i32],
16              [9i32, 10i32],
17              [11i32, 12i32]
18          ];
19  
20          // Compute matrix product: C = A * B
21          let C = matmul::[M_, K_, N_](A, B);
22  
23          return C;
24      }
25  
26      // Multiply two 2D matrices: A[M][K] * B[K][N] = C[M][N]
27      inline matmul::[M: u32, K: u32, N: u32](
28          A: [[i32; K]; M],
29          B: [[i32; N]; K]
30      ) -> [[i32; N]; M] {
31          let C: [[i32; N]; M] = [[0i32; N]; M];
32  
33          for i in 0u32..M {
34              for j in 0u32..N {
35                  let sum = 0i32;
36                  for k in 0u32..K {
37                      sum += A[i][k] * B[k][j];
38                  }
39                  C[i][j] = sum;
40              }
41          }
42  
43          return C;
44      }
45  }