Mercurial > games > semicongine
comparison tests/test_matrix.nim @ 477:f226c99b5043
add: matrix multiplications, tests
author | Sam <sam@basx.dev> |
---|---|
date | Fri, 30 Dec 2022 15:56:17 +0700 |
parents | d4750f2e0760 |
children | 9edca5dc4e93 |
comparison
equal
deleted
inserted
replaced
476:6862ca8c1324 | 477:f226c99b5043 |
---|---|
28 proc randVec2F(): auto = newVec2(rand(10'f) + 0.01, rand(10'f) + 0.01) | 28 proc randVec2F(): auto = newVec2(rand(10'f) + 0.01, rand(10'f) + 0.01) |
29 proc randVec3I(): auto = newVec3(rand(1 .. 10), rand(1 .. 10), rand(1 .. 10)) | 29 proc randVec3I(): auto = newVec3(rand(1 .. 10), rand(1 .. 10), rand(1 .. 10)) |
30 proc randVec3F(): auto = newVec3(rand(10'f) + 0.01, rand(10'f) + 0.01, rand(10'f) + 0.01) | 30 proc randVec3F(): auto = newVec3(rand(10'f) + 0.01, rand(10'f) + 0.01, rand(10'f) + 0.01) |
31 proc randVec4I(): auto = newVec4(rand(1 .. 10), rand(1 .. 10), rand(1 .. 10), rand(1 .. 10)) | 31 proc randVec4I(): auto = newVec4(rand(1 .. 10), rand(1 .. 10), rand(1 .. 10), rand(1 .. 10)) |
32 proc randVec4F(): auto = newVec4(rand(10'f) + 0.01, rand(10'f) + 0.01, rand(10'f) + 0.01, rand(10'f) + 0.01) | 32 proc randVec4F(): auto = newVec4(rand(10'f) + 0.01, rand(10'f) + 0.01, rand(10'f) + 0.01, rand(10'f) + 0.01) |
33 | |
34 | |
35 proc testVector() = | |
36 echoInfo(randVec2I()) | |
37 echoInfo(randVec2F()) | |
38 echoInfo(randVec3I()) | |
39 echoInfo(randVec3F()) | |
40 echoInfo(randVec4I()) | |
41 echoInfo(randVec4F()) | |
42 | |
43 # test math operations vector-vector | |
44 echoAdd(randVec2I(), randVec2I()) | |
45 echoAdd(randVec2F(), randVec2F()) | |
46 echoAdd(randVec3I(), randVec3I()) | |
47 echoAdd(randVec3F(), randVec3F()) | |
48 echoAdd(randVec4I(), randVec4I()) | |
49 echoAdd(randVec4F(), randVec4F()) | |
50 echoSub(randVec2I(), randVec2I()) | |
51 echoSub(randVec2F(), randVec2F()) | |
52 echoSub(randVec3I(), randVec3I()) | |
53 echoSub(randVec3F(), randVec3F()) | |
54 echoSub(randVec4I(), randVec4I()) | |
55 echoSub(randVec4F(), randVec4F()) | |
56 echoMul(randVec2I(), randVec2I()) | |
57 echoMul(randVec2F(), randVec2F()) | |
58 echoMul(randVec3I(), randVec3I()) | |
59 echoMul(randVec3F(), randVec3F()) | |
60 echoMul(randVec4I(), randVec4I()) | |
61 echoMul(randVec4F(), randVec4F()) | |
62 echoDiv(randVec2I(), randVec2I()) | |
63 echoDiv(randVec2F(), randVec2F()) | |
64 echoDiv(randVec3I(), randVec3I()) | |
65 echoDiv(randVec3F(), randVec3F()) | |
66 echoDiv(randVec4I(), randVec4I()) | |
67 echoDiv(randVec4F(), randVec4F()) | |
68 echoDot(randVec2I(), randVec2I()) | |
69 echoDot(randVec2F(), randVec2F()) | |
70 echoDot(randVec3I(), randVec3I()) | |
71 echoDot(randVec3F(), randVec3F()) | |
72 echoDot(randVec4I(), randVec4I()) | |
73 echoDot(randVec4F(), randVec4F()) | |
74 echoCross(randVec3I(), randVec3I()) | |
75 echoCross(randVec3F(), randVec3F()) | |
76 | |
77 | |
78 # test math operations vector-scalar | |
79 echoAdd(randVec2I(), rand(1 .. 10)) | |
80 echoAdd(randVec2F(), rand(10'f)) | |
81 echoAdd(randVec3I(), rand(1 .. 10)) | |
82 echoAdd(randVec3F(), rand(10'f)) | |
83 echoAdd(randVec4I(), rand(1 .. 10)) | |
84 echoAdd(randVec4F(), rand(10'f)) | |
85 echoSub(randVec2I(), rand(1 .. 10)) | |
86 echoSub(randVec2F(), rand(10'f)) | |
87 echoSub(randVec3I(), rand(1 .. 10)) | |
88 echoSub(randVec3F(), rand(10'f)) | |
89 echoSub(randVec4I(), rand(1 .. 10)) | |
90 echoSub(randVec4F(), rand(10'f)) | |
91 echoMul(randVec2I(), rand(1 .. 10)) | |
92 echoMul(randVec2F(), rand(10'f)) | |
93 echoMul(randVec3I(), rand(1 .. 10)) | |
94 echoMul(randVec3F(), rand(10'f)) | |
95 echoMul(randVec4I(), rand(1 .. 10)) | |
96 echoMul(randVec4F(), rand(10'f)) | |
97 echoDiv(randVec2I(), rand(1 .. 10)) | |
98 echoDiv(randVec2F(), rand(10'f)) | |
99 echoDiv(randVec3I(), rand(1 .. 10)) | |
100 echoDiv(randVec3F(), rand(10'f)) | |
101 echoDiv(randVec4I(), rand(1 .. 10)) | |
102 echoDiv(randVec4F(), rand(10'f)) | |
103 | |
104 # test math operations scalar-vector | |
105 echoAdd(rand(1 .. 10), randVec2I()) | |
106 echoAdd(rand(10'f), randVec2F()) | |
107 echoAdd(rand(1 .. 10), randVec3I()) | |
108 echoAdd(rand(10'f), randVec3F()) | |
109 echoAdd(rand(1 .. 10), randVec4I()) | |
110 echoAdd(rand(10'f), randVec4F()) | |
111 echoSub(rand(1 .. 10), randVec2I()) | |
112 echoSub(rand(10'f), randVec2F()) | |
113 echoSub(rand(1 .. 10), randVec3I()) | |
114 echoSub(rand(10'f), randVec3F()) | |
115 echoSub(rand(1 .. 10), randVec4I()) | |
116 echoSub(rand(10'f), randVec4F()) | |
117 echoMul(rand(1 .. 10), randVec2I()) | |
118 echoMul(rand(10'f), randVec2F()) | |
119 echoMul(rand(1 .. 10), randVec3I()) | |
120 echoMul(rand(10'f), randVec3F()) | |
121 echoMul(rand(1 .. 10), randVec4I()) | |
122 echoMul(rand(10'f), randVec4F()) | |
123 echoDiv(rand(1 .. 10), randVec2I()) | |
124 echoDiv(rand(10'f), randVec2F()) | |
125 echoDiv(rand(1 .. 10), randVec3I()) | |
126 echoDiv(rand(10'f), randVec3F()) | |
127 echoDiv(rand(1 .. 10), randVec4I()) | |
128 echoDiv(rand(10'f), randVec4F()) | |
129 | |
130 # test attribute syntax sugar | |
131 echo "float2int ", to[int](randVec2F()) | |
132 echo "int2float ", to[float](randVec2I()) | |
133 echo "float2int ", to[int](randVec3F()) | |
134 echo "int2float ", to[float](randVec3I()) | |
135 echo "float2int ", to[int](randVec3F()) | |
136 echo "int2float ", to[float](randVec3I()) | |
137 | |
138 echo "V2I.xx: ", randVec2I().xx | |
139 echo "V2I.yx: ", randVec2I().xy | |
140 echo "V2F.xx: ", randVec2F().xx | |
141 echo "V2F.yx: ", randVec2F().yx | |
142 echo "V2I.rr: ", randVec2I().rr | |
143 echo "V2I.gr: ", randVec2I().gr | |
144 echo "V2F.rr: ", randVec2F().rr | |
145 echo "V2F.gr: ", randVec2F().gr | |
146 | |
147 echo "V3I.yyy: ", randVec3I().yyy | |
148 echo "V3I.yxz: ", randVec3I().xyz | |
149 echo "V3F.yyy: ", randVec3F().yyy | |
150 echo "V3F.yxz: ", randVec3F().yxz | |
151 echo "V3I.ggg: ", randVec3I().ggg | |
152 echo "V3I.grb: ", randVec3I().grb | |
153 echo "V3F.ggg: ", randVec3F().ggg | |
154 echo "V3F.grb: ", randVec3F().grb | |
155 | |
156 echo "V4I.zzzz: ", randVec4I().zzzz | |
157 echo "V4I.yxzw: ", randVec4I().xyzw | |
158 echo "V4F.zzzz: ", randVec4F().zzzz | |
159 echo "V4F.yxzw: ", randVec4F().yxzw | |
160 echo "V4I.bbbb: ", randVec4I().bbbb | |
161 echo "V4I.grba: ", randVec4I().grba | |
162 echo "V4F.bbbb: ", randVec4F().bbbb | |
163 echo "V4F.grba: ", randVec4F().grba | |
164 | |
165 echo "X: ", X | |
166 echo "Y: ", Y | |
167 echo "Z: ", Z | |
168 echo "X: ", Xi | |
169 echo "Y: ", Yi | |
170 echo "Z: ", Zi | |
171 | 33 |
172 | 34 |
173 template withAllIntegerMats(stuff: untyped) = | 35 template withAllIntegerMats(stuff: untyped) = |
174 stuff(Mat22[int32]) | 36 stuff(Mat22[int32]) |
175 stuff(Mat23[int32]) | 37 stuff(Mat23[int32]) |
225 | 87 |
226 template testAssignI(t: typedesc) = | 88 template testAssignI(t: typedesc) = |
227 echo "testAssignI: ", t | 89 echo "testAssignI: ", t |
228 var m = t() | 90 var m = t() |
229 for i in 0 ..< t.data.len: | 91 for i in 0 ..< t.data.len: |
230 m[rand(0 ..< m.rowCount), rand(0 ..< m.columnCount)] = rand(0'i32 .. 100'i32) | 92 m[rand(0 ..< t.rowCount), rand(0 ..< t.columnCount)] = rand(0'i32 .. 100'i32) |
231 | 93 |
232 template testAssignF(t: typedesc) = | 94 template testAssignF(t: typedesc) = |
233 echo "testAssignF: ", t | 95 echo "testAssignF: ", t |
234 var m = t() | 96 var m = t() |
235 for i in 0 ..< t.data.len: | 97 for i in 0 ..< t.data.len: |
236 m[rand(0 ..< m.rowCount), rand(0 ..< m.columnCount)] = rand(100'f) | 98 m[rand(0 ..< t.rowCount), rand(0 ..< t.columnCount)] = rand(100'f) |
237 | 99 |
238 template testRowCols(t: typedesc) = | 100 template testRowCols(t: typedesc) = |
239 echo "testRowCols: ", t | 101 echo "testRowCols: ", t |
240 var m = t().randomized() | 102 var m = t().randomized() |
241 for i in 0 ..< m.rowCount: | 103 for i in 0 ..< t.rowCount: |
242 echo m.row(i) | 104 echo m.row(i) |
243 for i in 0 ..< m.columnCount: | 105 for i in 0 ..< t.columnCount: |
244 echo m.col(i) | 106 echo m.col(i) |
245 | 107 |
246 | 108 |
247 proc testMatrix() = | 109 proc testMatrix() = |
248 withAllMats(testTranspose) | 110 withAllMats(testTranspose) |
249 withAllIntegerMats(testAssignI) | 111 withAllIntegerMats(testAssignI) |
250 withAllFloatMats(testAssignF) | 112 withAllFloatMats(testAssignF) |
251 withAllMats(testRowCols) | 113 withAllMats(testRowCols) |
252 | 114 |
115 echo Unit22 | |
116 echo Unit22i | |
117 echo Unit22i8 | |
118 echo Unit22i16 | |
119 echo Unit22i32 | |
120 echo Unit22i64 | |
121 | |
122 echo Unit33 | |
123 echo Unit33i | |
124 echo Unit33i8 | |
125 echo Unit33i16 | |
126 echo Unit33i32 | |
127 echo Unit33i64 | |
128 | |
129 echo Unit44 | |
130 echo Unit44i | |
131 echo Unit44i8 | |
132 echo Unit44i16 | |
133 echo Unit44i32 | |
134 echo Unit44i64 | |
135 | |
136 echo Mat22[float]().randomized() * One2.randomized() | |
137 echo Mat33[float]().randomized() * One3.randomized() | |
138 echo Mat44[float]().randomized() * One4.randomized() | |
139 | |
253 randomize() | 140 randomize() |
254 testVector() | |
255 testMatrix() | 141 testMatrix() |