| <!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="../js/webgpu-functions.js"></script> |
| <script src="../../resources/testharness.js"></script> |
| <script src="../../resources/testharnessreport.js"></script> |
| <script> |
| const whlslTests = {}; |
| |
| whlslTests.equality = async () => { |
| let program = "bool foo(uint x, uint y) { return x == y; }"; |
| assert_equals(await callBoolFunction(program, "foo", [makeUint(7), makeUint(5)]), false); |
| assert_equals(await callBoolFunction(program, "foo", [makeUint(7), makeUint(7)]), true); |
| program = "bool foo(int x, int y) { return x == y; }"; |
| assert_equals(await callBoolFunction(program, "foo", [makeInt(7), makeInt(5)]), false); |
| assert_equals(await callBoolFunction(program, "foo", [makeInt(7), makeInt(7)]), true); |
| program = "bool foo(bool x, bool y) { return x == y; }"; |
| assert_equals(await callBoolFunction(program, "foo", [makeBool(false), makeBool(true)]), false); |
| assert_equals(await callBoolFunction(program, "foo", [makeBool(true), makeBool(false)]), false); |
| assert_equals(await callBoolFunction(program, "foo", [makeBool(false), makeBool(false)]), true); |
| assert_equals(await callBoolFunction(program, "foo", [makeBool(true), makeBool(true)]), true); |
| } |
| |
| whlslTests.notEquality = async () => { |
| let program = "bool foo(uint x, uint y) { return x != y; }"; |
| assert_equals(await callBoolFunction(program, "foo", [makeUint(7), makeUint(5)]), true); |
| assert_equals(await callBoolFunction(program, "foo", [makeUint(7), makeUint(7)]), false); |
| program = "bool foo(int x, int y) { return x != y; }"; |
| assert_equals(await callBoolFunction(program, "foo", [makeInt(7), makeInt(5)]), true); |
| assert_equals(await callBoolFunction(program, "foo", [makeInt(7), makeInt(7)]), false); |
| program = "bool foo(bool x, bool y) { return x != y; }"; |
| assert_equals(await callBoolFunction(program, "foo", [makeBool(false), makeBool(true)]), true); |
| assert_equals(await callBoolFunction(program, "foo", [makeBool(true), makeBool(false)]), true); |
| assert_equals(await callBoolFunction(program, "foo", [makeBool(false), makeBool(false)]), false); |
| assert_equals(await callBoolFunction(program, "foo", [makeBool(true), makeBool(true)]), false); |
| }; |
| |
| whlslTests.equalityTypeFailure = async () => { |
| await checkFail("bool foo(int x, uint y) { return x == y; }"); |
| }; |
| |
| whlslTests.equalsWrongArgumentLength = async () => { |
| await checkFail( |
| ` |
| bool operator==() { return true; } |
| `); |
| |
| await checkFail( |
| ` |
| bool operator==(int) { return true; } |
| `); |
| |
| await checkFail( |
| ` |
| bool operator==(int, int, int) { return true; } |
| `); |
| }; |
| |
| whlslTests.equalsWrongReturnType = async () => { |
| await checkFail( |
| ` |
| struct Foo { } |
| int operator==(Foo, Foo) { return 42; } |
| `); |
| } |
| |
| whlslTests.lessEqualWrongArgumentLength = async () => { |
| await checkFail( |
| ` |
| bool operator<=() { return true; } |
| `); |
| await checkFail( |
| ` |
| bool operator<=(int) { return true; } |
| `); |
| |
| await checkFail( |
| ` |
| bool operator<=(int, int, int) { return true; } |
| `); |
| } |
| |
| whlslTests.lessEqualWrongReturnType = async () => { |
| checkFail( |
| ` |
| struct Foo { } |
| int operator<=(Foo, Foo) { return 42; } |
| `); |
| } |
| |
| whlslTests.lessThanWrongArgumentLength = async () => { |
| await checkFail( |
| ` |
| bool operator<() { return true; } |
| `); |
| await checkFail( |
| ` |
| bool operator<(int) { return true; } |
| `); |
| await checkFail( |
| ` |
| bool operator<(int, int, int) { return true; } |
| `); |
| } |
| |
| whlslTests.lessThanWrongReturnType = async () => { |
| await checkFail( |
| ` |
| struct Foo { } |
| int operator<(Foo, Foo) { return 42; } |
| `); |
| } |
| |
| runTests(whlslTests); |
| </script> |
| </html> |