blob: 6a03f9037bb995f29ec841cb4bd9419ec3b31f44 [file] [log] [blame]
<!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;
const keywords = [
"struct"
, "typedef"
, "enum"
, "operator"
, "if"
, "else"
, "continue"
, "break"
, "switch"
, "case"
, "default"
, "fallthrough"
, "for"
, "while"
, "do"
, "return"
, "null"
, "true"
, "false"
, "constant"
, "device"
, "threadgroup"
, "thread"
, "space"
, "vertex"
, "fragment"
, "compute"
, "numthreads"
, "SV_InstanceID"
, "SV_VertexID"
, "PSIZE"
, "SV_Position"
, "SV_IsFrontFace"
, "SV_SampleIndex"
, "SV_InnerCoverage"
, "SV_Target"
, "SV_Depth"
, "SV_Coverage"
, "SV_DispatchThreadID"
, "SV_GroupID"
, "SV_GroupIndex"
, "SV_GroupThreadID"
, "attribute"
, "register"
, "specialized"
, "native"
, "restricted"
, "_"
, "auto"
, "protocol"
, "const"
, "static"
, "nointerpolation"
, "noperspective"
, "uniform"
, "centroid"
, "sample"
];
const suffixes = ["foo", "1337", "_foo"];
whlslTests.lexingKeywordLikeIdentifiers = async () => {
for (const keyword of keywords) {
for (const suffix of suffixes) {
const variableName = keyword + suffix;
const program = `
int foo() {
int ${variableName} = 42;
return ${variableName};
}
`;
assert_equals(await callIntFunction(program, "foo", []), 42);
}
}
};
whlslTests.keywordsAsIdentifiers = async () => {
for (const keyword of keywords) {
const variableName = keyword;
const program = `
void foo() {
int ${variableName} = 42;
}
`;
await checkFail(program);
}
};
whlslTests.comments = async () => {
await checkFail(`
/*
`);
await checkFail(`
*/
`);
await checkFail(`
int foo() {
return 4/**/2;
}
`);
};
whlslTests.operatorNames = async () => {
await checkFail(`
struct Foo {
}
int operator.$(Foo) {
return 42;
}
`);
await checkFail(`
struct Foo {
}
int operator.#(Foo) {
return 42;
}
`);
await checkFail(`
struct Foo {
}
int operator.@(Foo) {
return 42;
}
`);
await checkFail(`
struct Foo {
}
int operator.*%(Foo) {
return 42;
}
`);
await checkFail(`
int operator&&(int x, int y) {
return 42;
}
`);
await checkFail(`
bool operator||(int x, int y) {
return 42;
}
`);
};
runTests(whlslTests);
</script>
</html>