blob: c8a15aa7464c7a7e26218af61e278a7b5cdabe08 [file] [log] [blame]
<!DOCTYPE html>
<html>
<meta charset=utf-8>
<meta name="timeout" content="long">
<title>Test structs.</title>
<script src="js/whlsl-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.indexSetterWithNoGetterOverload = async () =>
{
await checkFail(
`
struct Foo { }
struct Bar { }
int operator[](Foo, uint)
{
return 534;
}
Bar operator[]=(Bar, uint, int)
{
return Bar();
}
`);
};
whlslTests.indexSetterWithNoGetterOverloadFixed = async () =>
{
const program = `
struct Bar { }
int operator[](Bar, uint)
{
return 534;
}
Bar operator[]=(Bar, uint, int)
{
return Bar();
}
int foo() { return Bar()[0]; }
int bar() {
Bar b;
b[0] = 400;
return b[0];
}
`;
assert_equals(await callIntFunction(program, "foo", []), 534);
assert_equals(await callIntFunction(program, "bar", []), 534);
};
whlslTests.notLoneIndexSetter = async () =>
{
const program = `
int operator[](int, uint)
{
return 65;
}
int operator[]=(int, uint, int)
{
return 543;
}
int foo() {
int x;
return x[0];
}
int bar() {
int x;
x[0] = 42;
return x;
}
`;
assert_equals(await callIntFunction(program, "foo", []), 65);
assert_equals(await callIntFunction(program, "bar", []), 543);
};
whlslTests.loneIndexSetter = async () =>
{
await checkFail(
`
int operator[]=(int, uint, int)
{
return 543;
}
`);
};
whlslTests.loneIndexSetterPointer = async () =>
{
await checkFail(
`
thread int* operator[]=(thread int* ptr, uint, int)
{
return ptr;
}
`);
};
runTests(whlslTests);
</script>
</html>