export const description = `Parser validation tests for requires`;import { makeTestGroup } from '../../../../common/framework/test_group.js';import { keysOf } from '../../../../common/util/data_tables.js';import { kKnownWGSLLanguageFeatures } from '../../../capability_info.js';import { ShaderValidationTest } from '../shader_validation_test.js';export const g = makeTestGroup(ShaderValidationTest);const kCases = {valid: { code: `requires readonly_and_readwrite_storage_textures;`, pass: true },decl_before: {code: `alias i = i32;requires readonly_and_readwrite_storage_textures;`,pass: false,},decl_after: {code: `requires readonly_and_readwrite_storage_textures;alias i = i32;`,pass: true,},enable_before: {code: `enable f16;requires readonly_and_readwrite_storage_textures;`,pass: true,},diagnostic_before: {code: `diagnostic(info, derivative_uniformity);requires readonly_and_readwrite_storage_textures;`,pass: true,},const_assert_before: {code: `const_assert 1 == 1;requires readonly_and_readwrite_storage_textures;`,pass: false,},const_assert_after: {code: `requires readonly_and_readwrite_storage_textures;const_assert 1 == 1;`,pass: true,},embedded_comment: {code: `/* comment*/requires readonly_and_readwrite_storage_textures;`,pass: true,},parens: {code: `requires(readonly_and_readwrite_storage_textures);`,pass: false,},multi_line: {code: `requiresreadonly_and_readwrite_storage_textures;`,pass: true,},multiple_requires_duplicate: {code: `requires readonly_and_readwrite_storage_textures;requires readonly_and_readwrite_storage_textures;`,pass: true,},multiple_requires_different: {code: `requires readonly_and_readwrite_storage_textures;requires packed_4x8_integer_dot_product;`,pass: true,},multiple_entries_duplicate: {code: `requires readonly_and_readwrite_storage_textures, readonly_and_readwrite_storage_textures, readonly_and_readwrite_storage_textures;`,pass: true,},multiple_entries_different: {code: `requires readonly_and_readwrite_storage_textures, packed_4x8_integer_dot_product;`,pass: true,},unknown: {code: `requires unknown;`,pass: false,},};g.test('requires').desc(`Tests that requires are validated correctly.`).params(u => u.combine('case', keysOf(kCases))).fn(t => {t.skipIfLanguageFeatureNotSupported('readonly_and_readwrite_storage_textures');t.skipIfLanguageFeatureNotSupported('packed_4x8_integer_dot_product');const c = kCases[t.params.case];t.expectCompileResult(c.pass, c.code);});g.test('wgsl_matches_api').desc(`Tests that language features are accepted iff the API reports support for them.`).params(u => u.combine('feature', kKnownWGSLLanguageFeatures)).fn(t => {const code = `requires ${t.params.feature};`;t.expectCompileResult(t.hasLanguageFeature(t.params.feature), code);});