<!DOCTYPE html>
<html>
<meta charset=utf-8>
<meta name="timeout" content="long">
<title>Test the WHLSL test harness.</title>
<script src="js/test-harness.js"></script>
<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
<script>
const whlslTests = {};

whlslTests.uintBitAnd = async () => {
    let program = `
        uint foo(uint a, uint b)
        {
            return a & b;
        }
    `;
    assert_equals(await callUintFunction(program, "foo", [makeUint(1), makeUint(7)]), 1);
    assert_equals(await callUintFunction(program, "foo", [makeUint(65535), makeUint(42)]), 42);
    assert_equals(await callUintFunction(program, "foo", [makeUint(Math.pow(2, 32) - 1), makeUint(Math.pow(2, 32) - 7)]), 4294967289);
    assert_equals(await callUintFunction(program, "foo", [makeUint(0), makeUint(85732)]), 0);
}

whlslTests.uintBitOr = async () => {
    let program = `
        uint foo(uint a, uint b)
        {
            return a | b;
        }
    `;
    assert_equals(await callUintFunction(program, "foo", [makeUint(1), makeUint(7)]), 7);
    assert_equals(await callUintFunction(program, "foo", [makeUint(65535), makeUint(42)]), 65535);
    assert_equals(await callUintFunction(program, "foo", [makeUint(Math.pow(2, 32) - 1), makeUint(Math.pow(2, 32)  - 7)]), 4294967295);
    assert_equals(await callUintFunction(program, "foo", [makeUint(0), makeUint(85732)]), 85732);
}

whlslTests.uintBitXor = async () => {
    let program = `
        uint foo(uint a, uint b)
        {
            return a ^ b;
        }
    `;
    assert_equals(await callUintFunction(program, "foo", [makeUint(1), makeUint(7)]), 6);
    assert_equals(await callUintFunction(program, "foo", [makeUint(65535), makeUint(42)]), 65493);
    assert_equals(await callUintFunction(program, "foo", [makeUint(Math.pow(2, 32) - 1), makeUint(Math.pow(2, 32) - 7)]), 6);
    assert_equals(await callUintFunction(program, "foo", [makeUint(0), makeUint(85732)]), 85732);
}

whlslTests.uintBitNot = async () => { 
    let program = `
        uint foo(uint a)
        {
            return ~a;
        }
    `;
    assert_equals(await callUintFunction(program, "foo", [makeUint(1)]), 4294967294);
    assert_equals(await callUintFunction(program, "foo", [makeUint(65535)]), 4294901760);
    assert_equals(await callUintFunction(program, "foo", [makeUint(Math.pow(2, 32) - 1)]), 0);
    assert_equals(await callUintFunction(program, "foo", [makeUint(0)]), 4294967295);
}

whlslTests.uintLShift = async () => {
    let program = `
        uint foo(uint a, uint b)
        {
            return a << b;
        }
    `;
    assert_equals(await callUintFunction(program, "foo", [makeUint(1), makeUint(7)]), 128);
    assert_equals(await callUintFunction(program, "foo", [makeUint(65535), makeUint(2)]), 262140);
    assert_equals(await callUintFunction(program, "foo", [makeUint(Math.pow(2, 32) - 1), makeUint(5)]), 4294967264);
    assert_equals(await callUintFunction(program, "foo", [makeUint(0), makeUint(3)]), 0);
};

whlslTests.uintRShift = async () => {
    let program = `
        uint foo(uint a, uint b)
        {
            return a >> b;
        }
    `;
    assert_equals(await callUintFunction(program, "foo", [makeUint(1), makeUint(7)]), 0);
    assert_equals(await callUintFunction(program, "foo", [makeUint(65535), makeUint(2)]), 16383);
    assert_equals(await callUintFunction(program, "foo", [makeUint(Math.pow(2, 32) - 1), makeUint(5)]), 134217727);
    assert_equals(await callUintFunction(program, "foo", [makeUint(0), makeUint(3)]), 0);
};

whlslTests.uintSimpleMath = async () => {
    let program = "uint foo(uint x, uint y) { return x + y; }";
    assert_equals(await callUintFunction(program, "foo", [makeUint(7), makeUint(5)]), 12);

    program = "uint foo(uint x, uint y) { return x - y; }";
    assert_equals(await callUintFunction(program, "foo", [makeUint(7), makeUint(5)]), 2);
    assert_equals(await callUintFunction(program, "foo", [makeUint(5), makeUint(7)]), 4294967294);

    program = "uint foo(uint x, uint y) { return x * y; }";
    assert_equals(await callUintFunction(program, "foo", [makeUint(7), makeUint(5)]), 35);

    // FIXME: make this work: https://bugs.webkit.org/show_bug.cgi?id=199602
    // program = "uint foo(uint x, uint y) { return x / y; }";
    // assert_equals(await callUintFunction(program, "foo", [makeUint(7), makeUint(2)]), 3);
}

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