tgenericrangedisamb.nim 534 B

12345678910111213141516171819202122
  1. # issue #24708
  2. type Matrix[m, n: static int] = array[m * n, float]
  3. func `[]`(A: Matrix, i, j: int): float =
  4. A[A.n * i + j]
  5. func `[]`(A: var Matrix, i, j: int): var float =
  6. A[A.n * i + j]
  7. func `*`[m, n, p: static int](A: Matrix[m, n], B: Matrix[n, p]): Matrix[m, p] =
  8. for i in 0 ..< m:
  9. for k in 0 ..< p:
  10. for j in 0 ..< n:
  11. result[i, k] += A[i, j] * B[j, k]
  12. func square[n: static int](A: Matrix[n, n]): Matrix[n, n] =
  13. A * A
  14. let A: Matrix[2, 2] = [-1, 1, 0, -1]
  15. doAssert square(A) == [1.0, -2.0, 0.0, 1.0]