diff old_tests/test_vector.nim @ 1203:6360c8d17ce0 compiletime-tests

did: preprations to add rendering tests
author sam <sam@basx.dev>
date Mon, 15 Jul 2024 20:06:42 +0700
parents tests/test_vector.nim@71315636ba82
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/old_tests/test_vector.nim	Mon Jul 15 20:06:42 2024 +0700
@@ -0,0 +1,199 @@
+import random
+
+import semicongine
+
+
+proc echoInfo[T](v: TVec2[T] or TVec3[T] or TVec4[T]) =
+  echo v
+  echo "  Length: ", v.Length
+  when T is SomeFloat:
+    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)
+
+
+proc testVector() =
+  echoInfo(randVec2I())
+  echoInfo(randVec2F())
+  echoInfo(randVec3I())
+  echoInfo(randVec3F())
+  echoInfo(randVec4I())
+  echoInfo(randVec4F())
+
+  # test math operations vector-vector
+  echoAdd(randVec2I(), randVec2I())
+  echoAdd(randVec2F(), randVec2F())
+  echoAdd(randVec3I(), randVec3I())
+  echoAdd(randVec3F(), randVec3F())
+  echoAdd(randVec4I(), randVec4I())
+  echoAdd(randVec4F(), randVec4F())
+  echoSub(randVec2I(), randVec2I())
+  echoSub(randVec2F(), randVec2F())
+  echoSub(randVec3I(), randVec3I())
+  echoSub(randVec3F(), randVec3F())
+  echoSub(randVec4I(), randVec4I())
+  echoSub(randVec4F(), randVec4F())
+  echoMul(randVec2I(), randVec2I())
+  echoMul(randVec2F(), randVec2F())
+  echoMul(randVec3I(), randVec3I())
+  echoMul(randVec3F(), randVec3F())
+  echoMul(randVec4I(), randVec4I())
+  echoMul(randVec4F(), randVec4F())
+  echoDiv(randVec2I(), randVec2I())
+  echoDiv(randVec2F(), randVec2F())
+  echoDiv(randVec3I(), randVec3I())
+  echoDiv(randVec3F(), randVec3F())
+  echoDiv(randVec4I(), randVec4I())
+  echoDiv(randVec4F(), randVec4F())
+  echoDot(randVec2I(), randVec2I())
+  echoDot(randVec2F(), randVec2F())
+  echoDot(randVec3I(), randVec3I())
+  echoDot(randVec3F(), randVec3F())
+  echoDot(randVec4I(), randVec4I())
+  echoDot(randVec4F(), randVec4F())
+  echoCross(randVec3I(), randVec3I())
+  echoCross(randVec3F(), randVec3F())
+
+
+  # test math operations vector-scalar
+  echoAdd(randVec2I(), rand(1 .. 10))
+  echoAdd(randVec2F(), rand(10'f))
+  echoAdd(randVec3I(), rand(1 .. 10))
+  echoAdd(randVec3F(), rand(10'f))
+  echoAdd(randVec4I(), rand(1 .. 10))
+  echoAdd(randVec4F(), rand(10'f))
+  echoSub(randVec2I(), rand(1 .. 10))
+  echoSub(randVec2F(), rand(10'f))
+  echoSub(randVec3I(), rand(1 .. 10))
+  echoSub(randVec3F(), rand(10'f))
+  echoSub(randVec4I(), rand(1 .. 10))
+  echoSub(randVec4F(), rand(10'f))
+  echoMul(randVec2I(), rand(1 .. 10))
+  echoMul(randVec2F(), rand(10'f))
+  echoMul(randVec3I(), rand(1 .. 10))
+  echoMul(randVec3F(), rand(10'f))
+  echoMul(randVec4I(), rand(1 .. 10))
+  echoMul(randVec4F(), rand(10'f))
+  echoDiv(randVec2I(), rand(1 .. 10))
+  echoDiv(randVec2F(), rand(10'f))
+  echoDiv(randVec3I(), rand(1 .. 10))
+  echoDiv(randVec3F(), rand(10'f))
+  echoDiv(randVec4I(), rand(1 .. 10))
+  echoDiv(randVec4F(), rand(10'f))
+
+  # test math operations scalar-vector
+  echoAdd(rand(1 .. 10), randVec2I())
+  echoAdd(rand(10'f), randVec2F())
+  echoAdd(rand(1 .. 10), randVec3I())
+  echoAdd(rand(10'f), randVec3F())
+  echoAdd(rand(1 .. 10), randVec4I())
+  echoAdd(rand(10'f), randVec4F())
+  echoSub(rand(1 .. 10), randVec2I())
+  echoSub(rand(10'f), randVec2F())
+  echoSub(rand(1 .. 10), randVec3I())
+  echoSub(rand(10'f), randVec3F())
+  echoSub(rand(1 .. 10), randVec4I())
+  echoSub(rand(10'f), randVec4F())
+  echoMul(rand(1 .. 10), randVec2I())
+  echoMul(rand(10'f), randVec2F())
+  echoMul(rand(1 .. 10), randVec3I())
+  echoMul(rand(10'f), randVec3F())
+  echoMul(rand(1 .. 10), randVec4I())
+  echoMul(rand(10'f), randVec4F())
+  echoDiv(rand(1 .. 10), randVec2I())
+  echoDiv(rand(10'f), randVec2F())
+  echoDiv(rand(1 .. 10), randVec3I())
+  echoDiv(rand(10'f), randVec3F())
+  echoDiv(rand(1 .. 10), randVec4I())
+  echoDiv(rand(10'f), randVec4F())
+
+  # test attribute syntax sugar
+  echo "float2int ", To[int](randVec2F())
+  echo "int2float ", To[float](randVec2I())
+  echo "float2int ", To[int](randVec3F())
+  echo "int2float ", To[float](randVec3I())
+  echo "float2int ", To[int](randVec3F())
+  echo "int2float ", To[float](randVec3I())
+
+  echo "V3I.x: ", randVec3I().x
+  echo "V3I.y: ", randVec3I().y
+  echo "V3F.z: ", randVec3F().z
+  echo "V3I.r: ", randVec3I().r
+  echo "V3I.g: ", randVec3I().g
+  echo "V3F.b: ", randVec3F().b
+
+  # test setters
+  var v1 = randVec2I(); v1.x = 1; v1.y = 2; v1.r = 3; v1.g = 4
+  v1.xy = randVec2I(); v1.yx = randVec2I(); v1.rg = randVec2I(); v1.gr = randVec2I()
+  var v2 = randVec2F(); v2.x = 1.0; v2.y = 2.0; v2.r = 3.0; v2.g = 4.0
+  v2.xy = randVec2F(); v2.yx = randVec2F(); v2.rg = randVec2F(); v2.gr = randVec2F()
+
+  var v3 = randVec3I(); v3.x = 1; v3.y = 2; v3.z = 3; v3.r = 4; v3.g = 5; v3.b = 6
+  v3.xyz = randVec3I(); v3.rgb = randVec3I()
+  var v4 = randVec3F(); v4.x = 1.0; v4.y = 2.0; v4.z = 3.0; v4.r = 4.0; v4.g = 5.0; v4.b = 6.0
+  v4.xyz = randVec3F(); v4.rgb = randVec3F()
+
+  var v5 = randVec4I(); v5.x = 1; v5.y = 2; v5.z = 3; v5.w = 4; v5.r = 5; v5.g = 6; v5.b = 7; v5.a = 8
+  v5.xyzw = randVec4I(); v5.rgba = randVec4I()
+  var v6 = randVec4F(); v6.x = 1.0; v6.y = 2.0; v6.z = 3.0; v6.w = 4.0; v6.r = 5.0; v6.g = 6.0; v6.b = 7.0; v6.a = 8.0
+  v6.xyzw = randVec4F(); v6.rgba = randVec4F()
+
+  echo "V2I.xx: ", randVec2I().xx
+  echo "V2I.yx: ", randVec2I().xy
+  echo "V2F.xx: ", randVec2F().xx
+  echo "V2F.yx: ", randVec2F().yx
+  echo "V2I.rr: ", randVec2I().rr
+  echo "V2I.gr: ", randVec2I().gr
+  echo "V2F.rr: ", randVec2F().rr
+  echo "V2F.gr: ", randVec2F().gr
+
+  echo "V3I.yyy: ", randVec3I().yyy
+  echo "V3I.yxz: ", randVec3I().xyz
+  echo "V3F.yyy: ", randVec3F().yyy
+  echo "V3F.yxz: ", randVec3F().yxz
+  echo "V3I.ggg: ", randVec3I().ggg
+  echo "V3I.grb: ", randVec3I().grb
+  echo "V3F.ggg: ", randVec3F().ggg
+  echo "V3F.grb: ", randVec3F().grb
+
+  echo "V4I.zzzz: ", randVec4I().zzzz
+  echo "V4I.yxzw: ", randVec4I().xyzw
+  echo "V4F.zzzz: ", randVec4F().zzzz
+  echo "V4F.yxzw: ", randVec4F().yxzw
+  echo "V4I.bbbb: ", randVec4I().bbbb
+  echo "V4I.grba: ", randVec4I().grba
+  echo "V4F.bbbb: ", randVec4F().bbbb
+  echo "V4F.grba: ", randVec4F().grba
+
+  echo "X: ", X
+  echo "Y: ", Y
+  echo "Z: ", Z
+  echo "X: ", Xi
+  echo "Y: ", Yi
+  echo "Z: ", Zi
+
+
+randomize()
+testVector()