Add a runtime-disabled dialog element skeleton
[WebKit-https.git] / LayoutTests / webgpu / whlsl-uint-bitwise.html
1 <!DOCTYPE html>
2 <html>
3 <meta charset=utf-8>
4 <meta name="timeout" content="long">
5 <title>Test the WHLSL test harness.</title>
6 <script src="js/whlsl-test-harness.js"></script>
7 <script src="../resources/testharness.js"></script>
8 <script src="../resources/testharnessreport.js"></script>
9 <script>
10 const whlslTests = {};
11
12 whlslTests.uintBitAnd = async () => {
13     let program = `
14         uint foo(uint a, uint b)
15         {
16             return a & b;
17         }
18     `;
19     assert_equals(await callUintFunction(program, "foo", [makeUint(1), makeUint(7)]), 1);
20     assert_equals(await callUintFunction(program, "foo", [makeUint(65535), makeUint(42)]), 42);
21     assert_equals(await callUintFunction(program, "foo", [makeUint(Math.pow(2, 32) - 1), makeUint(Math.pow(2, 32) - 7)]), 4294967289);
22     assert_equals(await callUintFunction(program, "foo", [makeUint(0), makeUint(85732)]), 0);
23 }
24
25 whlslTests.uintBitOr = async () => {
26     let program = `
27         uint foo(uint a, uint b)
28         {
29             return a | b;
30         }
31     `;
32     assert_equals(await callUintFunction(program, "foo", [makeUint(1), makeUint(7)]), 7);
33     assert_equals(await callUintFunction(program, "foo", [makeUint(65535), makeUint(42)]), 65535);
34     assert_equals(await callUintFunction(program, "foo", [makeUint(Math.pow(2, 32) - 1), makeUint(Math.pow(2, 32)  - 7)]), 4294967295);
35     assert_equals(await callUintFunction(program, "foo", [makeUint(0), makeUint(85732)]), 85732);
36 }
37
38 whlslTests.uintBitXor = async () => {
39     let program = `
40         uint foo(uint a, uint b)
41         {
42             return a ^ b;
43         }
44     `;
45     assert_equals(await callUintFunction(program, "foo", [makeUint(1), makeUint(7)]), 6);
46     assert_equals(await callUintFunction(program, "foo", [makeUint(65535), makeUint(42)]), 65493);
47     assert_equals(await callUintFunction(program, "foo", [makeUint(Math.pow(2, 32) - 1), makeUint(Math.pow(2, 32) - 7)]), 6);
48     assert_equals(await callUintFunction(program, "foo", [makeUint(0), makeUint(85732)]), 85732);
49 }
50
51 whlslTests.uintBitNot = async () => { 
52     let program = `
53         uint foo(uint a)
54         {
55             return ~a;
56         }
57     `;
58     assert_equals(await callUintFunction(program, "foo", [makeUint(1)]), 4294967294);
59     assert_equals(await callUintFunction(program, "foo", [makeUint(65535)]), 4294901760);
60     assert_equals(await callUintFunction(program, "foo", [makeUint(Math.pow(2, 32) - 1)]), 0);
61     assert_equals(await callUintFunction(program, "foo", [makeUint(0)]), 4294967295);
62 }
63
64 whlslTests.uintLShift = async () => {
65     let program = `
66         uint foo(uint a, uint b)
67         {
68             return a << b;
69         }
70     `;
71     assert_equals(await callUintFunction(program, "foo", [makeUint(1), makeUint(7)]), 128);
72     assert_equals(await callUintFunction(program, "foo", [makeUint(65535), makeUint(2)]), 262140);
73     assert_equals(await callUintFunction(program, "foo", [makeUint(Math.pow(2, 32) - 1), makeUint(5)]), 4294967264);
74     assert_equals(await callUintFunction(program, "foo", [makeUint(0), makeUint(3)]), 0);
75 };
76
77 whlslTests.uintRShift = async () => {
78     let program = `
79         uint foo(uint a, uint b)
80         {
81             return a >> b;
82         }
83     `;
84     assert_equals(await callUintFunction(program, "foo", [makeUint(1), makeUint(7)]), 0);
85     assert_equals(await callUintFunction(program, "foo", [makeUint(65535), makeUint(2)]), 16383);
86     assert_equals(await callUintFunction(program, "foo", [makeUint(Math.pow(2, 32) - 1), makeUint(5)]), 134217727);
87     assert_equals(await callUintFunction(program, "foo", [makeUint(0), makeUint(3)]), 0);
88 };
89
90 whlslTests.uintSimpleMath = async () => {
91     let program = "uint foo(uint x, uint y) { return x + y; }";
92     assert_equals(await callUintFunction(program, "foo", [makeUint(7), makeUint(5)]), 12);
93
94     program = "uint foo(uint x, uint y) { return x - y; }";
95     assert_equals(await callUintFunction(program, "foo", [makeUint(7), makeUint(5)]), 2);
96     assert_equals(await callUintFunction(program, "foo", [makeUint(5), makeUint(7)]), 4294967294);
97
98     program = "uint foo(uint x, uint y) { return x * y; }";
99     assert_equals(await callUintFunction(program, "foo", [makeUint(7), makeUint(5)]), 35);
100
101     // FIXME: make this work: https://bugs.webkit.org/show_bug.cgi?id=199602
102     // program = "uint foo(uint x, uint y) { return x / y; }";
103     // assert_equals(await callUintFunction(program, "foo", [makeUint(7), makeUint(2)]), 3);
104 }
105
106 runTests(whlslTests);
107 </script>
108 </html>