<!DOCTYPE html>
<html>
<meta charset=utf-8>
<meta name="timeout" content="long">
<title>Test the WHLSL test harness.</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.pointerIndexGetter = async () => {
    await checkFail(
        `
            int operator[](device int*, uint)
            {
                return 543;
            }
        `);

    await checkFail(
        `
            int operator[](thread int*, uint)
            {
                return 543;
            }
        `);

    await checkFail(
        `
            int operator[](threadgroup int*, uint)
            {
                return 543;
            }
        `);

    await checkFail(
        `
            int operator[](constant int*, uint)
            {
                return 543;
            }
        `);
}

whlslTests.pointerGetter = async () => {
    await checkFail(
        `
            int operator.foo(device int*)
            {
                return 543;
            }
        `);
    await checkFail(
        `
            int operator.foo(thread int*)
            {
                return 543;
            }
        `);
    await checkFail(
        `
            int operator.foo(threadgroup int*)
            {
                return 543;
            }
        `);
    await checkFail(
        `
            int operator.foo(constant int*)
            {
                return 543;
            }
        `);
}


runTests(whlslTests);
</script>
</html>
