<!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.builtinVectorGetters = 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(", ")});
                            return x.${elements[i]};
                        }
                        `;
                tests.push({ type: typeName, name: functionName, expectation: initializerList[i] });
            }
        }
    }

    let program = src;
    for (let test of tests) {
        const checkFunc = checkFuncs[test.type];
        assert_equals(await checkFunc(program, test.name, []), test.expectation);
    }
};

whlslTests.builtinVectorSetters = 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.${elements[i]} = 34;
                            return x.${elements[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);
    }
}

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

