| <!DOCTYPE html> |
| <html> |
| <meta charset=utf-8> |
| <meta name="timeout" content="long"> |
| <title>Test prefix/postfix.</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.vectorAddition = async () => { |
| let program = ` |
| float a() |
| { |
| float2 v = float2(3, 4); |
| float2 u = v + 7; |
| return u.x; |
| } |
| float b() |
| { |
| float2 v = float2(3, 4); |
| float2 u = v + 7; |
| return u.y; |
| } |
| float c() |
| { |
| float2 v = float2(3, 4); |
| float2 u = 7 + v; |
| return u.x; |
| } |
| float d() |
| { |
| float2 v = float2(3, 4); |
| float2 u = 7 + v; |
| return u.y; |
| } |
| float e() |
| { |
| float2 v = float2(3, 4); |
| float2 u = +v; |
| return u.x; |
| } |
| float f() |
| { |
| float2 v = float2(3, 4); |
| float2 u = +v; |
| return u.y; |
| } |
| `; |
| |
| assert_approx_equals(await callFloatFunction(program, "a", []), 10, epsilon); |
| assert_approx_equals(await callFloatFunction(program, "b", []), 11, epsilon); |
| assert_approx_equals(await callFloatFunction(program, "c", []), 10, epsilon); |
| assert_approx_equals(await callFloatFunction(program, "d", []), 11, epsilon); |
| assert_approx_equals(await callFloatFunction(program, "e", []), 3, epsilon); |
| assert_approx_equals(await callFloatFunction(program, "f", []), 4, epsilon); |
| }; |
| |
| whlslTests.vectorSubtraction = async () => { |
| let program = ` |
| float a() |
| { |
| float2 v = float2(3, 4); |
| float2 u = v - 7; |
| return u.x; |
| } |
| float b() |
| { |
| float2 v = float2(3, 4); |
| float2 u = v - 7; |
| return u.y; |
| } |
| float c() |
| { |
| float2 v = float2(3, 4); |
| float2 u = 7 - v; |
| return u.x; |
| } |
| float d() |
| { |
| float2 v = float2(3, 4); |
| float2 u = 7 - v; |
| return u.y; |
| } |
| float e() |
| { |
| float2 v = float2(3, 4); |
| float2 u = -v; |
| return u.x; |
| } |
| float f() |
| { |
| float2 v = float2(3, 4); |
| float2 u = -v; |
| return u.y; |
| } |
| `; |
| |
| assert_approx_equals(await callFloatFunction(program, "a", []), -4, epsilon); |
| assert_approx_equals(await callFloatFunction(program, "b", []), -3, epsilon); |
| assert_approx_equals(await callFloatFunction(program, "c", []), 4, epsilon); |
| assert_approx_equals(await callFloatFunction(program, "d", []), 3, epsilon); |
| assert_approx_equals(await callFloatFunction(program, "e", []), -3, epsilon); |
| assert_approx_equals(await callFloatFunction(program, "f", []), -4, epsilon); |
| }; |
| |
| whlslTests.matrixAddition = async () => { |
| let program = ` |
| float a() |
| { |
| float2x2 m = float2x2(float2(3, 4), float2(5, 6)); |
| float2x2 n = m + 7; |
| return n[0][0]; |
| } |
| float b() |
| { |
| float2x2 m = float2x2(float2(3, 4), float2(5, 6)); |
| float2x2 n = m + 7; |
| return n[0][1]; |
| } |
| float c() |
| { |
| float2x2 m = float2x2(float2(3, 4), float2(5, 6)); |
| float2x2 n = 7 + m; |
| return n[0][0]; |
| } |
| float d() |
| { |
| float2x2 m = float2x2(float2(3, 4), float2(5, 6)); |
| float2x2 n = 7 + m; |
| return n[0][1]; |
| } |
| float e() |
| { |
| float2x2 m = float2x2(float2(3, 4), float2(5, 6)); |
| float2x2 n = +m; |
| return n[0][0]; |
| } |
| float f() |
| { |
| float2x2 m = float2x2(float2(3, 4), float2(5, 6)); |
| float2x2 n = +m; |
| return n[0][1]; |
| } |
| `; |
| |
| assert_approx_equals(await callFloatFunction(program, "a", []), 10, epsilon); |
| assert_approx_equals(await callFloatFunction(program, "b", []), 11, epsilon); |
| assert_approx_equals(await callFloatFunction(program, "c", []), 10, epsilon); |
| assert_approx_equals(await callFloatFunction(program, "d", []), 11, epsilon); |
| assert_approx_equals(await callFloatFunction(program, "e", []), 3, epsilon); |
| assert_approx_equals(await callFloatFunction(program, "f", []), 4, epsilon); |
| }; |
| |
| whlslTests.matrixSubtraction = async () => { |
| let program = ` |
| float a() |
| { |
| float2x2 m = float2x2(float2(3, 4), float2(5, 6)); |
| float2x2 n = m - 7; |
| return n[0][0]; |
| } |
| float b() |
| { |
| float2x2 m = float2x2(float2(3, 4), float2(5, 6)); |
| float2x2 n = m - 7; |
| return n[0][1]; |
| } |
| float c() |
| { |
| float2x2 m = float2x2(float2(3, 4), float2(5, 6)); |
| float2x2 n = 7 - m; |
| return n[0][0]; |
| } |
| float d() |
| { |
| float2x2 m = float2x2(float2(3, 4), float2(5, 6)); |
| float2x2 n = 7 - m; |
| return n[0][1]; |
| } |
| float e() |
| { |
| float2x2 m = float2x2(float2(3, 4), float2(5, 6)); |
| float2x2 n = -m; |
| return n[0][0]; |
| } |
| float f() |
| { |
| float2x2 m = float2x2(float2(3, 4), float2(5, 6)); |
| float2x2 n = -m; |
| return n[0][1]; |
| } |
| `; |
| |
| assert_approx_equals(await callFloatFunction(program, "a", []), -4, epsilon); |
| assert_approx_equals(await callFloatFunction(program, "b", []), -3, epsilon); |
| assert_approx_equals(await callFloatFunction(program, "c", []), 4, epsilon); |
| assert_approx_equals(await callFloatFunction(program, "d", []), 3, epsilon); |
| assert_approx_equals(await callFloatFunction(program, "e", []), -3, epsilon); |
| assert_approx_equals(await callFloatFunction(program, "f", []), -4, epsilon); |
| }; |
| |
| runTests(whlslTests); |
| </script> |
| </html> |