<!DOCTYPE html>
<html>
<meta charset=utf-8>
<meta name="timeout" content="long">
<title>Test loops.</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.dereferenceDefaultNullArrayRef = async () =>
{
    let program = `
        int foo()
        {
            thread int[] p;
            return p[0];
        }
    `;
    assert_equals(await callIntFunction(program, "foo", []), 0);
}

whlslTests.defaultInitializedNullArrayRefIntLiteral = async () =>
{
    let program = `
        int foo()
        {
            thread int[] p = null;
            return p[0];
        }
    `;
    assert_equals(await callIntFunction(program, "foo", []), 0);
}

whlslTests.passNullToPtrMonomorphicArrayRef = async () =>
{
    let program = `
        int foo(thread int[] ptr)
        {
            return ptr[0u];
        }
        int bar()
        {
            return foo(null);
        }
    `;
    assert_equals(await callIntFunction(program, "bar", []), 0);
}

whlslTests.loadNull = async () =>
{
    await checkFail(
        `
            void sink(thread int* x) { }
            void foo() { sink(*null); }
        `);
}

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

