<!DOCTYPE html>
<html>
<meta charset=utf-8>
<meta name="timeout" content="long">
<title>Clamp.</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 epsilon = 0.0001;

whlslTests.vectorClamp = async () => {
    const program = `
        float foo(float a, float b) {
            float2 x;
            x[0] = a;
            x[1] = b;
            float2 bottom = float2(1, 5);
            float2 top = float2(10, 7);
            x = clamp(x, bottom, top);
            return x.x / x.y;
        }
    `;

    assert_approx_equals(await callFloatFunction(program, "foo", [makeFloat(12), makeFloat(20)]), 10 / 7, epsilon);
    assert_approx_equals(await callFloatFunction(program, "foo", [makeFloat(8), makeFloat(6)]), 8 / 6, epsilon);
    assert_approx_equals(await callFloatFunction(program, "foo", [makeFloat(-10), makeFloat(6)]), 1 / 6, epsilon);
};

whlslTests.matrixClamp = async () => {
    const program = `
        float foo(float a, float b, float c, float d) {
            float2x2 x;
            x[0] = float2(a, b);
            x[1] = float2(c, d);

            float2x2 bottom = float2x2(float2(1, 2), float2(3, 4));
            float2x2 top = float2x2(float2(10, 11), float2(12, 13));

            x = clamp(x, bottom, top);

            return x[0][0] / 1 + x[0][1] / 2 + x[1][0] / 3 + x[1][1] / 4;
        }
    `;

    assert_approx_equals(await callFloatFunction(program, "foo", [makeFloat(2), makeFloat(-1), makeFloat(4), makeFloat(10)]), 2/1 + 2/2 + 4/3 + 10/4, epsilon);
    assert_approx_equals(await callFloatFunction(program, "foo", [makeFloat(100), makeFloat(100), makeFloat(100), makeFloat(100)]), 10/1 + 11/2 + 12/3 + 13/4, epsilon);
    assert_approx_equals(await callFloatFunction(program, "foo", [makeFloat(-100), makeFloat(-100), makeFloat(-100), makeFloat(-100)]), 1/1 + 2/2 + 3/3 + 4/4, epsilon);
    assert_approx_equals(await callFloatFunction(program, "foo", [makeFloat(NaN), makeFloat(NaN), makeFloat(NaN), makeFloat(NaN)]), 1/1 + 2/2 + 3/3 + 4/4, epsilon);
};

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