Mercurial > games > semicongine
diff old_tests/test_matrix.nim @ 1227:4d97cfc4888b
merge
author | sam <sam@basx.dev> |
---|---|
date | Wed, 17 Jul 2024 23:45:43 +0700 |
parents | 6360c8d17ce0 |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/old_tests/test_matrix.nim Wed Jul 17 23:45:43 2024 +0700 @@ -0,0 +1,158 @@ +import random +import math + +import semicongine + + +proc echoInfo(v: TVec) = + echo v + echo " Length: ", v.length + echo " Normlized: ", v.normalized + echo " negated: ", -v + +proc echoAdd[T, U](v1: T, v2: U) = + echo v1, " + ", v2, " = ", v1 + v2 +proc echoSub[T, U](v1: T, v2: U) = + echo v1, " - ", v2, " = ", v1 - v2 +proc echoMul[T, U](v1: T, v2: U) = + echo v1, " * ", v2, " = ", v1 * v2 +proc echoDiv[T, U](v1: T, v2: U) = + echo v1, " / ", v2, " = ", v1 / v2 +proc echoDot[T, U](v1: T, v2: U) = + echo v1, " o ", v2, " = ", v1.dot(v2) +proc echoCross[T, U](v1: T, v2: U) = + echo v1, " x ", v2, " = ", v1.cross(v2) + +proc randVec2I(): auto = NewVec2(rand(1 .. 10), rand(1 .. 10)) +proc randVec2F(): auto = NewVec2(rand(10'f) + 0.01, rand(10'f) + 0.01) +proc randVec3I(): auto = NewVec3(rand(1 .. 10), rand(1 .. 10), rand(1 .. 10)) +proc randVec3F(): auto = NewVec3(rand(10'f) + 0.01, rand(10'f) + 0.01, rand(10'f) + 0.01) +proc randVec4I(): auto = NewVec4(rand(1 .. 10), rand(1 .. 10), rand(1 .. 10), rand(1 .. 10)) +proc randVec4F(): auto = NewVec4(rand(10'f) + 0.01, rand(10'f) + 0.01, rand(10'f) + 0.01, rand(10'f) + 0.01) + + +template withAllIntegerMats(stuff: untyped) = + stuff(TMat2[int32]) + stuff(TMat23[int32]) + stuff(TMat32[int32]) + stuff(TMat3[int32]) + stuff(TMat34[int32]) + stuff(TMat43[int32]) + stuff(TMat4[int32]) + stuff(TMat2[int64]) + stuff(TMat23[int64]) + stuff(TMat32[int64]) + stuff(TMat3[int64]) + stuff(TMat34[int64]) + stuff(TMat43[int64]) + stuff(TMat4[int64]) + +template withAllFloatMats(stuff: untyped) = + stuff(TMat2[float32]) + stuff(TMat23[float32]) + stuff(TMat32[float32]) + stuff(TMat3[float32]) + stuff(TMat34[float32]) + stuff(TMat43[float32]) + stuff(TMat4[float32]) + stuff(TMat2[float64]) + stuff(TMat23[float64]) + stuff(TMat32[float64]) + stuff(TMat3[float64]) + stuff(TMat34[float64]) + stuff(TMat43[float64]) + stuff(TMat4[float64]) + +template withAllMats(stuff: untyped) = + stuff(TMat2[int]) + stuff(TMat23[int]) + stuff(TMat32[int]) + stuff(TMat3[int]) + stuff(TMat34[int]) + stuff(TMat43[int]) + stuff(TMat4[int]) + stuff(TMat2[float]) + stuff(TMat23[float]) + stuff(TMat32[float]) + stuff(TMat3[float]) + stuff(TMat34[float]) + stuff(TMat43[float]) + stuff(TMat4[float]) + +template testTranspose(t: typedesc) = + echo "testTranspose: ", t + let m = t().Randomized() + assert m == m.Transposed().Transposed() + +template testInversed(t: typedesc) = + echo "testTranspose: ", t + let m = t().Randomized() + var unit = t() + for i in unit.RowCount: + unit[i][i] = 1 + assert m.Transposed() * m == unit + +template testAssignI(t: typedesc) = + echo "testAssignI: ", t + var m = t() + for i in 0 ..< t.data.len: + m[rand(0 ..< t.RowCount), rand(0 ..< t.ColumnCount)] = rand(0'i32 .. 100'i32) + +template testAssignF(t: typedesc) = + echo "testAssignF: ", t + var m = t() + for i in 0 ..< t.data.len: + m[rand(0 ..< t.RowCount), rand(0 ..< t.ColumnCount)] = rand(100'f) + +template testRowCols(t: typedesc) = + echo "testRowCols: ", t + var m = t().Randomized() + for i in 0 ..< t.RowCount: + echo m.Row(i) + for i in 0 ..< t.ColumnCount: + echo m.Col(i) + + +proc testMatrix() = + withAllMats(testTranspose) + withAllIntegerMats(testAssignI) + withAllFloatMats(testAssignF) + withAllMats(testRowCols) + + echo Unit2 + echo Unit2i + echo Unit2i8 + echo Unit2i16 + echo Unit2i32 + echo Unit2i64 + + echo Unit3 + echo Unit3i + echo Unit3i8 + echo Unit3i16 + echo Unit3i32 + echo Unit3i64 + + echo Unit4 + echo Unit4i + echo Unit4i8 + echo Unit4i16 + echo Unit4i32 + echo Unit4i64 + + echo TMat2[float32]().Randomized() * One2.Randomized() + echo TMat3[float32]().Randomized() * One3.Randomized() + echo TMat4[float32]().Randomized() * One4.Randomized() + + echo float32(rand(1'f32)) * TMat2[float32]().Randomized() + echo TMat2[float]().Randomized() * rand(1'f) + echo TMat2[float]().Randomized() * rand(1'f) + echo TMat23[float]().Randomized() * rand(1'f) + echo TMat23[float]().Randomized() * rand(1'f) + echo TMat3[float]().Randomized() * rand(1'f) + echo TMat34[float]().Randomized() * rand(1'f) + echo TMat43[float]().Randomized() * rand(1'f) + echo TMat4[float]().Randomized() * rand(1'f) + +randomize() +testMatrix()