| <!DOCTYPE html> |
| <html> |
| <meta charset=utf-8> |
| <meta name="timeout" content="long"> |
| <title>oob on arrays.</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 = {}; |
| |
| whlslTests.fieldShouldBeNull = async () => { |
| const program = ` |
| struct Foo { |
| int x; |
| int y; |
| int z; |
| } |
| bool foo(uint i) { |
| Foo[10] foos; |
| thread Foo* foo = &foos[i]; |
| thread int* ptr = &(foo->z); |
| *ptr = 42; |
| return foos[0].z == 42; |
| } |
| |
| bool bar() { |
| Foo[10] foos; |
| thread Foo* foo = &foos[424242]; |
| thread int* ptr = &(foo->z); |
| return foo == &foos[0]; |
| } |
| |
| float3 retFloat3() |
| { |
| return float3(10.0, 0.0, 0.0); |
| } |
| |
| float[10] retFloatArray() |
| { |
| float[10] v; |
| v[0] = 10.0; |
| return v; |
| } |
| |
| bool baz() { |
| return retFloat3()[42] == 10.0; |
| } |
| |
| bool jaz() { |
| return retFloatArray()[42] == 10.0; |
| } |
| `; |
| |
| for (let i = 0; i < 10; ++i) |
| assert_equals(await callBoolFunction(program, "foo", [makeUint(i)]), i === 0 ? true : false); |
| assert_equals(await callBoolFunction(program, "foo", [makeUint(10)]), true); |
| assert_equals(await callBoolFunction(program, "foo", [makeUint(1000000)]), true); |
| assert_equals(await callBoolFunction(program, "foo", [makeUint(0xffffffff)]), true); |
| assert_equals(await callBoolFunction(program, "bar", []), true); |
| assert_equals(await callBoolFunction(program, "baz", []), true); |
| assert_equals(await callBoolFunction(program, "jaz", []), true); |
| }; |
| |
| runTests(whlslTests); |
| </script> |
| </html> |