| <!DOCTYPE html> |
| <html> |
| <meta charset=utf-8> |
| <meta name="timeout" content="long"> |
| <title>Test loops.</title> |
| <script src="js/test-harness.js"></script> |
| <script src="../js/webgpu-functions.js"></script> |
| <script src="../../resources/testharness.js"></script> |
| <script src="../../resources/testharnessreport.js"></script> |
| <script> |
| const whlslTests = {}; |
| |
| const checkFuncs = { |
| "uint": callUintFunction, |
| "int": callIntFunction, |
| "float": callFloatFunction |
| }; |
| const typeNames = [ "uint", "int", "float" ]; |
| const sizes = [ 2, 3, 4 ]; |
| const elements = [ "x", "y", "z", "w" ]; |
| const initializerList = [ 1, 2, 3, 4 ]; |
| |
| whlslTests.builtinVectorIndexSetters = async () => |
| { |
| let tests = []; |
| let src = ""; |
| for (let typeName of typeNames) { |
| for (let size of sizes) { |
| for (let i = 0; i < size; i++) { |
| const functionName = `${typeName}${size}${elements[i]}`; |
| src += `${typeName} ${functionName}() |
| { |
| ${typeName}${size} x = ${typeName}${size}(${initializerList.slice(0, size).join(", ")}); |
| x[${i}] = 34; |
| return x[${i}]; |
| } |
| `; |
| tests.push({ type: typeName, name: functionName, expectation: 34 }); |
| } |
| } |
| } |
| |
| let program = src; |
| for (let test of tests) { |
| const checkFunc = checkFuncs[test.type]; |
| assert_equals(await checkFunc(program, test.name, []), test.expectation); |
| } |
| }; |
| |
| whlslTests.builtinVectors = async () => |
| { |
| let program = ` |
| int foo() |
| { |
| int2 a = int2(3, 4); |
| return a[0]; |
| } |
| int foo2() |
| { |
| int2 a = int2(3, 4); |
| int3 b = int3(a, 5); |
| return b[1]; |
| } |
| int foo3() |
| { |
| int3 a = int3(3, 4, 5); |
| int4 b = int4(6, a); |
| return b[1]; |
| } |
| int foo4() |
| { |
| int2 a = int2(3, 4); |
| int2 b = int2(5, 6); |
| int4 c = int4(a, b); |
| return c[2]; |
| } |
| bool foo5() |
| { |
| int4 a = int4(3, 4, 5, 6); |
| int2 b = int2(4, 5); |
| int4 c = int4(3, b, 6); |
| return all(a == c); |
| } |
| bool foo6() |
| { |
| int2 a = int2(4, 5); |
| int3 b = int3(3, a); |
| int3 c = int3(3, 4, 6); |
| return all(b == c); |
| } |
| uint foou() |
| { |
| uint2 a = uint2(3, 4); |
| return a[0]; |
| } |
| uint foou2() |
| { |
| uint2 a = uint2(3, 4); |
| uint3 b = uint3(a, 5); |
| return b[1]; |
| } |
| uint foou3() |
| { |
| uint3 a = uint3(3, 4, 5); |
| uint4 b = uint4(6, a); |
| return b[1]; |
| } |
| uint foou4() |
| { |
| uint2 a = uint2(3, 4); |
| uint2 b = uint2(5, 6); |
| uint4 c = uint4(a, b); |
| return c[2]; |
| } |
| bool foou5() |
| { |
| uint4 a = uint4(3, 4, 5, 6); |
| uint2 b = uint2(4, 5); |
| uint4 c = uint4(3, b, 6); |
| return all(a == c); |
| } |
| bool foou6() |
| { |
| uint2 a = uint2(4, 5); |
| uint3 b = uint3(3, a); |
| uint3 c = uint3(3, 4, 6); |
| return all(b == c); |
| } |
| float foof() |
| { |
| float2 a = float2(3., 4.); |
| return a[0]; |
| } |
| float foof2() |
| { |
| float2 a = float2(3., 4.); |
| float3 b = float3(a, 5.); |
| return b[1]; |
| } |
| float foof3() |
| { |
| float3 a = float3(3., 4., 5.); |
| float4 b = float4(6., a); |
| return b[1]; |
| } |
| float foof4() |
| { |
| float2 a = float2(3., 4.); |
| float2 b = float2(5., 6.); |
| float4 c = float4(a, b); |
| return c[2]; |
| } |
| bool foof5() |
| { |
| float4 a = float4(3., 4., 5., 6.); |
| float2 b = float2(4., 5.); |
| float4 c = float4(3., b, 6.); |
| return all(a == c); |
| } |
| bool foof6() |
| { |
| float2 a = float2(4., 5.); |
| float3 b = float3(3., a); |
| float3 c = float3(3., 4., 6.); |
| return all(b == c); |
| } |
| `; |
| assert_equals(await callIntFunction(program, "foo", []), 3); |
| assert_equals(await callIntFunction(program, "foo2", []), 4); |
| assert_equals(await callIntFunction(program, "foo3", []), 3); |
| assert_equals(await callIntFunction(program, "foo4", []), 5); |
| assert_equals(await callBoolFunction(program, "foo5", []), true); |
| assert_equals(await callBoolFunction(program, "foo6", []), false); |
| assert_equals(await callUintFunction(program, "foou", []), 3); |
| assert_equals(await callUintFunction(program, "foou2", []), 4); |
| assert_equals(await callUintFunction(program, "foou3", []), 3); |
| assert_equals(await callUintFunction(program, "foou4", []), 5); |
| assert_equals(await callBoolFunction(program, "foou5", []), true); |
| assert_equals(await callBoolFunction(program, "foou6", []), false); |
| assert_equals(await callFloatFunction(program, "foof", []), 3); |
| assert_equals(await callFloatFunction(program, "foof2", []), 4); |
| assert_equals(await callFloatFunction(program, "foof3", []), 3); |
| assert_equals(await callFloatFunction(program, "foof4", []), 5); |
| assert_equals(await callBoolFunction(program, "foof5", []), true); |
| assert_equals(await callBoolFunction(program, "foof6", []), false); |
| }; |
| |
| runTests(whlslTests); |
| </script> |
| </html> |
| |