<!DOCTYPE html>
<html>
<meta charset=utf-8>
<meta name="timeout" content="long">
<title>bool matrix.</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.boolMatrix = async () => {
    const program = `
        int foo() {
            bool2x2 m;
            m[0] = bool2(true, false);
            m[1] = bool2(true, true);
            return int(m[0][0]) + int(m[0][1]) + int(m[1][0]) + int(m[1][1]);
        }
    `;

    assert_equals(await callIntFunction(program,  "foo", []), 3);
};

whlslTests.boolMatrix2 = async () => {
    const program = `
        bool foo() {
            bool2x2 m = bool2x2(true, false, true, false);
            return m[0][0] && !m[0][1] && m[1][0] && !m[1][1];
        }
    `;

    assert_equals(await callBoolFunction(program,  "foo", []), true);
};

whlslTests.boolMatrix3 = async () => {
    const program = `
        bool foo() {
            bool2x2 m = bool2x2(true, false, true, false);
            return m[0][0] && !m[0][1] && m[1][0] && !m[1][1];
        }
    `;

    assert_equals(await callBoolFunction(program,  "foo", []), true);
};

whlslTests.boolMatrix4 = async () => {
    const program = `
        bool foo() {
            bool2x3 m = bool2x3(true, true, true, false, false, false);
            return m[0][0] && m[0][1] && m[0][2] && !m[1][0] && !m[1][1] && !m[1][2];
        }
    `;

    assert_equals(await callBoolFunction(program,  "foo", []), true);
};

whlslTests.boolMatrix5 = async () => {
    const program = `
        bool foo() {
            bool2x2 m;
            m[0] = bool2(true, false);
            m[1] = bool2(true, false);
            return m[0][0] && !m[0][1] && m[1][0] && !m[1][1];
        }
    `;

    assert_equals(await callBoolFunction(program,  "foo", []), true);
};

whlslTests.boolMatrixAny = async () => {
    const program = `
        bool foo() {
            bool2x2 m = bool2x2(false, false, false, false);
            return !any(m);
        }
    `;

    assert_equals(await callBoolFunction(program,  "foo", []), true);
};

whlslTests.boolMatrixAny2 = async () => {
    const program = `
        bool foo() {
            bool2x2 m = bool2x2(false, false, true, false);
            return any(m);
        }
    `;

    assert_equals(await callBoolFunction(program,  "foo", []), true);
};

whlslTests.boolMatrixAll = async () => {
    const program = `
        bool foo() {
            bool2x2 m = bool2x2(true, true, true, false);
            return !all(m);
        }
    `;

    assert_equals(await callBoolFunction(program,  "foo", []), true);
};

whlslTests.boolMatrixAll2 = async () => {
    const program = `
        bool foo() {
            bool2x2 m = bool2x2(true, true, true, true);
            return all(m);
        }
    `;

    assert_equals(await callBoolFunction(program,  "foo", []), true);
};

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