[WHLSL] Move WHLSL tests to their own folder
[WebKit-https.git] / LayoutTests / webgpu / whlsl / builtin-vectors.html
1 <!DOCTYPE html>
2 <html>
3 <meta charset=utf-8>
4 <meta name="timeout" content="long">
5 <title>Test loops.</title>
6 <script src="js/test-harness.js"></script>
7 <script src="../js/webgpu-functions.js"></script>
8 <script src="../../resources/testharness.js"></script>
9 <script src="../../resources/testharnessreport.js"></script>
10 <script>
11 const whlslTests = {};
12
13 const checkFuncs = {
14     "uint": callUintFunction,
15     "int": callIntFunction,
16     "float": callFloatFunction
17 };
18 const typeNames = [ "uint", "int", "float" ];
19 const sizes = [ 2, 3, 4 ];
20 const elements = [ "x", "y", "z", "w" ];
21 const initializerList = [ 1, 2, 3, 4 ];
22
23 whlslTests.builtinVectorIndexSetters = async () =>
24 {
25     let tests = [];
26     let src = "";
27     for (let typeName of typeNames) {
28         for (let size of sizes) {
29             for (let i = 0; i < size; i++) {
30                 const functionName = `${typeName}${size}${elements[i]}`;
31                 src += `${typeName} ${functionName}()
32                         {
33                             ${typeName}${size} x = ${typeName}${size}(${initializerList.slice(0, size).join(", ")});
34                             x[${i}] = 34;
35                             return x[${i}];
36                         }
37                         `;
38                 tests.push({ type: typeName, name: functionName, expectation: 34 });
39             }
40         }
41     }
42
43     let program = src;
44     for (let test of tests) {
45         const checkFunc = checkFuncs[test.type];
46         assert_equals(await checkFunc(program, test.name, []), test.expectation);
47     }
48 };
49
50 whlslTests.builtinVectors = async () =>
51 {
52     let program = `
53         int foo()
54         {
55             int2 a = int2(3, 4);
56             return a[0];
57         }
58         int foo2()
59         {
60             int2 a = int2(3, 4);
61             int3 b = int3(a, 5);
62             return b[1];
63         }
64         int foo3()
65         {
66             int3 a = int3(3, 4, 5);
67             int4 b = int4(6, a);
68             return b[1];
69         }
70         int foo4()
71         {
72             int2 a = int2(3, 4);
73             int2 b = int2(5, 6);
74             int4 c = int4(a, b);
75             return c[2];
76         }
77         bool foo5()
78         {
79             int4 a = int4(3, 4, 5, 6);
80             int2 b = int2(4, 5);
81             int4 c = int4(3, b, 6);
82             return a == c;
83         }
84         bool foo6()
85         {
86             int2 a = int2(4, 5);
87             int3 b = int3(3, a);
88             int3 c = int3(3, 4, 6);
89             return b == c;
90         }
91         uint foou()
92         {
93             uint2 a = uint2(3, 4);
94             return a[0];
95         }
96         uint foou2()
97         {
98             uint2 a = uint2(3, 4);
99             uint3 b = uint3(a, 5);
100             return b[1];
101         }
102         uint foou3()
103         {
104             uint3 a = uint3(3, 4, 5);
105             uint4 b = uint4(6, a);
106             return b[1];
107         }
108         uint foou4()
109         {
110             uint2 a = uint2(3, 4);
111             uint2 b = uint2(5, 6);
112             uint4 c = uint4(a, b);
113             return c[2];
114         }
115         bool foou5()
116         {
117             uint4 a = uint4(3, 4, 5, 6);
118             uint2 b = uint2(4, 5);
119             uint4 c = uint4(3, b, 6);
120             return a == c;
121         }
122         bool foou6()
123         {
124             uint2 a = uint2(4, 5);
125             uint3 b = uint3(3, a);
126             uint3 c = uint3(3, 4, 6);
127             return b == c;
128         }
129         float foof()
130         {
131             float2 a = float2(3., 4.);
132             return a[0];
133         }
134         float foof2()
135         {
136             float2 a = float2(3., 4.);
137             float3 b = float3(a, 5.);
138             return b[1];
139         }
140         float foof3()
141         {
142             float3 a = float3(3., 4., 5.);
143             float4 b = float4(6., a);
144             return b[1];
145         }
146         float foof4()
147         {
148             float2 a = float2(3., 4.);
149             float2 b = float2(5., 6.);
150             float4 c = float4(a, b);
151             return c[2];
152         }
153         bool foof5()
154         {
155             float4 a = float4(3., 4., 5., 6.);
156             float2 b = float2(4., 5.);
157             float4 c = float4(3., b, 6.);
158             return a == c;
159         }
160         bool foof6()
161         {
162             float2 a = float2(4., 5.);
163             float3 b = float3(3., a);
164             float3 c = float3(3., 4., 6.);
165             return b == c;
166         }
167     `;
168     assert_equals(await callIntFunction(program, "foo", []), 3);
169     assert_equals(await callIntFunction(program, "foo2", []), 4);
170     assert_equals(await callIntFunction(program, "foo3", []), 3);
171     assert_equals(await callIntFunction(program, "foo4", []), 5);
172     assert_equals(await callBoolFunction(program, "foo5", []), true);
173     assert_equals(await callBoolFunction(program, "foo6", []), false);
174     assert_equals(await callUintFunction(program, "foou", []), 3);
175     assert_equals(await callUintFunction(program, "foou2", []), 4);
176     assert_equals(await callUintFunction(program, "foou3", []), 3);
177     assert_equals(await callUintFunction(program, "foou4", []), 5);
178     assert_equals(await callBoolFunction(program, "foou5", []), true);
179     assert_equals(await callBoolFunction(program, "foou6", []), false);
180     assert_equals(await callFloatFunction(program, "foof", []), 3);
181     assert_equals(await callFloatFunction(program, "foof2", []), 4);
182     assert_equals(await callFloatFunction(program, "foof3", []), 3);
183     assert_equals(await callFloatFunction(program, "foof4", []), 5);
184     assert_equals(await callBoolFunction(program, "foof5", []), true);
185     assert_equals(await callBoolFunction(program, "foof6", []), false);
186 };
187
188 runTests(whlslTests);
189 </script>
190 </html>
191