]> gitweb.factorcode.org Git - factor.git/blob - basis/math/vectors/simd/simd-tests.factor
f5318c341fa573fe1173720c9e355d1682485fd6
[factor.git] / basis / math / vectors / simd / simd-tests.factor
1 IN: math.vectors.simd.tests
2 USING: math math.vectors.simd math.vectors.simd.private
3 math.vectors math.functions math.private kernel.private compiler
4 sequences tools.test compiler.tree.debugger accessors kernel
5 system ;
6
7 [ float-4{ 0 0 0 0 } ] [ float-4 new ] unit-test
8
9 [ float-4{ 0 0 0 0 } ] [ [ float-4 new ] compile-call ] unit-test
10
11 [ V{ float } ] [ [ { float-4 } declare norm-sq ] final-classes ] unit-test
12
13 [ V{ float } ] [ [ { float-4 } declare norm ] final-classes ] unit-test
14
15 [ float-4{ 12 12 12 12 } ] [
16     12 [ float-4-with ] compile-call
17 ] unit-test
18
19 [ float-4{ 1 2 3 4 } ] [
20     1 2 3 4 [ float-4-boa ] compile-call
21 ] unit-test
22
23 [ float-4{ 11 22 33 44 } ] [
24     float-4{ 1 2 3 4 } float-4{ 10 20 30 40 }
25     [ { float-4 float-4 } declare v+ ] compile-call
26 ] unit-test
27
28 [ float-4{ -9 -18 -27 -36 } ] [
29     float-4{ 1 2 3 4 } float-4{ 10 20 30 40 }
30     [ { float-4 float-4 } declare v- ] compile-call
31 ] unit-test
32
33 [ float-4{ 10 40 90 160 } ] [
34     float-4{ 1 2 3 4 } float-4{ 10 20 30 40 }
35     [ { float-4 float-4 } declare v* ] compile-call
36 ] unit-test
37
38 [ float-4{ 10 100 1000 10000 } ] [
39     float-4{ 100 2000 30000 400000 } float-4{ 10 20 30 40 }
40     [ { float-4 float-4 } declare v/ ] compile-call
41 ] unit-test
42
43 [ float-4{ -10 -20 -30 -40 } ] [
44     float-4{ -10 20 -30 40 } float-4{ 10 -20 30 -40 }
45     [ { float-4 float-4 } declare vmin ] compile-call
46 ] unit-test
47
48 [ float-4{ 10 20 30 40 } ] [
49     float-4{ -10 20 -30 40 } float-4{ 10 -20 30 -40 }
50     [ { float-4 float-4 } declare vmax ] compile-call
51 ] unit-test
52
53 [ 10.0 ] [
54     float-4{ 1 2 3 4 }
55     [ { float-4 } declare sum ] compile-call
56 ] unit-test
57
58 [ 13.0 ] [
59     float-4{ 1 2 3 4 }
60     [ { float-4 } declare sum 3.0 + ] compile-call
61 ] unit-test
62
63 [ 8.0 ] [
64     float-4{ 1 2 3 4 } float-4{ 2 0 2 0 }
65     [ { float-4 float-4 } declare v. ] compile-call
66 ] unit-test
67
68 [ float-4{ 5 10 15 20 } ] [
69     5.0 float-4{ 1 2 3 4 }
70     [ { float float-4 } declare n*v ] compile-call
71 ] unit-test
72
73 [ float-4{ 5 10 15 20 } ] [
74     float-4{ 1 2 3 4 } 5.0
75     [ { float float-4 } declare v*n ] compile-call
76 ] unit-test
77
78 [ float-4{ 10 5 2 5 } ] [
79     10.0 float-4{ 1 2 5 2 }
80     [ { float float-4 } declare n/v ] compile-call
81 ] unit-test
82
83 [ float-4{ 0.5 1 1.5 2 } ] [
84     float-4{ 1 2 3 4 } 2
85     [ { float float-4 } declare v/n ] compile-call
86 ] unit-test
87
88 [ float-4{ 1 0 0 0 } ] [
89     float-4{ 10 0 0 0 }
90     [ { float-4 } declare normalize ] compile-call
91 ] unit-test
92
93 [ 30.0 ] [
94     float-4{ 1 2 3 4 }
95     [ { float-4 } declare norm-sq ] compile-call
96 ] unit-test
97
98 [ t ] [
99     float-4{ 1 0 0 0 }
100     float-4{ 0 1 0 0 }
101     [ { float-4 float-4 } declare distance ] compile-call
102     2 sqrt 1.0e-6 ~
103 ] unit-test
104
105 [ double-2{ 12 12 } ] [
106     12 [ double-2-with ] compile-call
107 ] unit-test
108
109 [ double-2{ 1 2 } ] [
110     1 2 [ double-2-boa ] compile-call
111 ] unit-test
112
113 [ double-2{ 11 22 } ] [
114     double-2{ 1 2 } double-2{ 10 20 }
115     [ { double-2 double-2 } declare v+ ] compile-call
116 ] unit-test
117
118 [ double-2{ -9 -18 } ] [
119     double-2{ 1 2 } double-2{ 10 20 }
120     [ { double-2 double-2 } declare v- ] compile-call
121 ] unit-test
122
123 [ double-2{ 10 40 } ] [
124     double-2{ 1 2 } double-2{ 10 20 }
125     [ { double-2 double-2 } declare v* ] compile-call
126 ] unit-test
127
128 [ double-2{ 10 100 } ] [
129     double-2{ 100 2000 } double-2{ 10 20 }
130     [ { double-2 double-2 } declare v/ ] compile-call
131 ] unit-test
132
133 [ double-2{ -10 -20 } ] [
134     double-2{ -10 20 } double-2{ 10 -20 }
135     [ { double-2 double-2 } declare vmin ] compile-call
136 ] unit-test
137
138 [ double-2{ 10 20 } ] [
139     double-2{ -10 20 } double-2{ 10 -20 }
140     [ { double-2 double-2 } declare vmax ] compile-call
141 ] unit-test
142
143 [ 3.0 ] [
144     double-2{ 1 2 }
145     [ { double-2 } declare sum ] compile-call
146 ] unit-test
147
148 [ 7.0 ] [
149     double-2{ 1 2 }
150     [ { double-2 } declare sum 4.0 + ] compile-call
151 ] unit-test
152
153 [ 16.0 ] [
154     double-2{ 1 2 } double-2{ 2 7 }
155     [ { double-2 double-2 } declare v. ] compile-call
156 ] unit-test
157
158 [ double-2{ 5 10 } ] [
159     5.0 double-2{ 1 2 }
160     [ { float double-2 } declare n*v ] compile-call
161 ] unit-test
162
163 [ double-2{ 5 10 } ] [
164     double-2{ 1 2 } 5.0
165     [ { float double-2 } declare v*n ] compile-call
166 ] unit-test
167
168 [ double-2{ 10 5 } ] [
169     10.0 double-2{ 1 2 }
170     [ { float double-2 } declare n/v ] compile-call
171 ] unit-test
172
173 [ double-2{ 0.5 1 } ] [
174     double-2{ 1 2 } 2
175     [ { float double-2 } declare v/n ] compile-call
176 ] unit-test
177
178 [ double-2{ 0 0 } ] [ double-2 new ] unit-test
179
180 [ double-2{ 1 0 } ] [
181     double-2{ 10 0 }
182     [ { double-2 } declare normalize ] compile-call
183 ] unit-test
184
185 [ 5.0 ] [
186     double-2{ 1 2 }
187     [ { double-2 } declare norm-sq ] compile-call
188 ] unit-test
189
190 [ t ] [
191     double-2{ 1 0 }
192     double-2{ 0 1 }
193     [ { double-2 double-2 } declare distance ] compile-call
194     2 sqrt 1.0e-6 ~
195 ] unit-test
196
197 [ double-4{ 0 0 0 0 } ] [ double-4 new ] unit-test
198
199 [ double-4{ 1 2 3 4 } ] [
200     1 2 3 4 double-4-boa
201 ] unit-test
202
203 [ double-4{ 1 1 1 1 } ] [
204     1 double-4-with
205 ] unit-test
206
207 [ double-4{ 0 1 2 3 } ] [
208     1 double-4-with [ * ] map-index
209 ] unit-test
210
211 [ V{ float } ] [ [ { double-4 } declare norm-sq ] final-classes ] unit-test
212
213 [ V{ float } ] [ [ { double-4 } declare norm ] final-classes ] unit-test
214
215 [ double-4{ 12 12 12 12 } ] [
216     12 [ double-4-with ] compile-call
217 ] unit-test
218
219 [ double-4{ 1 2 3 4 } ] [
220     1 2 3 4 [ double-4-boa ] compile-call
221 ] unit-test
222
223 [ double-4{ 11 22 33 44 } ] [
224     double-4{ 1 2 3 4 } double-4{ 10 20 30 40 }
225     [ { double-4 double-4 } declare v+ ] compile-call
226 ] unit-test
227
228 [ double-4{ -9 -18 -27 -36 } ] [
229     double-4{ 1 2 3 4 } double-4{ 10 20 30 40 }
230     [ { double-4 double-4 } declare v- ] compile-call
231 ] unit-test
232
233 [ double-4{ 10 40 90 160 } ] [
234     double-4{ 1 2 3 4 } double-4{ 10 20 30 40 }
235     [ { double-4 double-4 } declare v* ] compile-call
236 ] unit-test
237
238 [ double-4{ 10 100 1000 10000 } ] [
239     double-4{ 100 2000 30000 400000 } double-4{ 10 20 30 40 }
240     [ { double-4 double-4 } declare v/ ] compile-call
241 ] unit-test
242
243 [ double-4{ -10 -20 -30 -40 } ] [
244     double-4{ -10 20 -30 40 } double-4{ 10 -20 30 -40 }
245     [ { double-4 double-4 } declare vmin ] compile-call
246 ] unit-test
247
248 [ double-4{ 10 20 30 40 } ] [
249     double-4{ -10 20 -30 40 } double-4{ 10 -20 30 -40 }
250     [ { double-4 double-4 } declare vmax ] compile-call
251 ] unit-test
252
253 [ 10.0 ] [
254     double-4{ 1 2 3 4 }
255     [ { double-4 } declare sum ] compile-call
256 ] unit-test
257
258 [ 13.0 ] [
259     double-4{ 1 2 3 4 }
260     [ { double-4 } declare sum 3.0 + ] compile-call
261 ] unit-test
262
263 [ 8.0 ] [
264     double-4{ 1 2 3 4 } double-4{ 2 0 2 0 }
265     [ { double-4 double-4 } declare v. ] compile-call
266 ] unit-test
267
268 [ double-4{ 5 10 15 20 } ] [
269     5.0 double-4{ 1 2 3 4 }
270     [ { float double-4 } declare n*v ] compile-call
271 ] unit-test
272
273 [ double-4{ 5 10 15 20 } ] [
274     double-4{ 1 2 3 4 } 5.0
275     [ { float double-4 } declare v*n ] compile-call
276 ] unit-test
277
278 [ double-4{ 10 5 2 5 } ] [
279     10.0 double-4{ 1 2 5 2 }
280     [ { float double-4 } declare n/v ] compile-call
281 ] unit-test
282
283 [ double-4{ 0.5 1 1.5 2 } ] [
284     double-4{ 1 2 3 4 } 2
285     [ { float double-4 } declare v/n ] compile-call
286 ] unit-test
287
288 [ double-4{ 1 0 0 0 } ] [
289     double-4{ 10 0 0 0 }
290     [ { double-4 } declare normalize ] compile-call
291 ] unit-test
292
293 [ 30.0 ] [
294     double-4{ 1 2 3 4 }
295     [ { double-4 } declare norm-sq ] compile-call
296 ] unit-test
297
298 [ t ] [
299     double-4{ 1 0 0 0 }
300     double-4{ 0 1 0 0 }
301     [ { double-4 double-4 } declare distance ] compile-call
302     2 sqrt 1.0e-6 ~
303 ] unit-test
304
305 [ float-8{ 0 0 0 0 0 0 0 0 } ] [ float-8 new ] unit-test
306
307 [ float-8{ 0 0 0 0 0 0 0 0 } ] [ [ float-8 new ] compile-call ] unit-test
308
309 [ float-8{ 1 1 1 1 1 1 1 1 } ] [ 1 float-8-with ] unit-test
310
311 [ float-8{ 1 1 1 1 1 1 1 1 } ] [ [ 1 float-8-with ] compile-call ] unit-test
312
313 [ float-8{ 1 2 3 4 5 6 7 8 } ] [ 1 2 3 4 5 6 7 8 float-8-boa ] unit-test
314
315 [ float-8{ 1 2 3 4 5 6 7 8 } ] [ [ 1 2 3 4 5 6 7 8 float-8-boa ] compile-call ] unit-test
316
317 [ float-8{ 3 6 9 12 15 18 21 24 } ] [
318     float-8{ 1 2 3 4 5 6 7 8 }
319     float-8{ 2 4 6 8 10 12 14 16 }
320     [ { float-8 float-8 } declare v+ ] compile-call
321 ] unit-test
322
323 [ float-8{ -1 -2 -3 -4 -5 -6 -7 -8 } ] [
324     float-8{ 1 2 3 4 5 6 7 8 }
325     float-8{ 2 4 6 8 10 12 14 16 }
326     [ { float-8 float-8 } declare v- ] compile-call
327 ] unit-test
328
329 [ float-8{ -1 -2 -3 -4 -5 -6 -7 -8 } ] [
330     -0.5
331     float-8{ 2 4 6 8 10 12 14 16 }
332     [ { float float-8 } declare n*v ] compile-call
333 ] unit-test
334
335 [ float-8{ -1 -2 -3 -4 -5 -6 -7 -8 } ] [
336     float-8{ 2 4 6 8 10 12 14 16 }
337     -0.5
338     [ { float-8 float } declare v*n ] compile-call
339 ] unit-test
340
341 [ float-8{ 256 128 64 32 16 8 4 2 } ] [
342     256.0
343     float-8{ 1 2 4 8 16 32 64 128 }
344     [ { float float-8 } declare n/v ] compile-call
345 ] unit-test
346
347 [ float-8{ -1 -2 -3 -4 -5 -6 -7 -8 } ] [
348     float-8{ 2 4 6 8 10 12 14 16 }
349     -2.0
350     [ { float-8 float } declare v/n ] compile-call
351 ] unit-test
352
353 ! Test puns; only on x86
354 cpu x86? [
355     [ double-2{ 4 1024 } ] [
356         float-4{ 0 1 0 2 }
357         [ { float-4 } declare dup v+ underlying>> double-2 boa dup v+ ] compile-call
358     ] unit-test
359     
360     [ 33.0 ] [
361         double-2{ 1 2 } double-2{ 10 20 }
362         [ { double-2 double-2 } declare v+ underlying>> 3.0 float* ] compile-call
363     ] unit-test
364 ] when