From 7f892cb0050752c912e08559dbd1c5721fe02957 Mon Sep 17 00:00:00 2001 From: Andy Leiserson Date: Mon, 5 Jan 2026 18:00:22 -0800 Subject: [PATCH 1/2] Improve the sensitivity of the value_constructor tests --- .../call/builtin/value_constructor.spec.ts | 20 +++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/src/webgpu/shader/validation/expression/call/builtin/value_constructor.spec.ts b/src/webgpu/shader/validation/expression/call/builtin/value_constructor.spec.ts index ee0d27a5f4f9..1257dcc323a1 100644 --- a/src/webgpu/shader/validation/expression/call/builtin/value_constructor.spec.ts +++ b/src/webgpu/shader/validation/expression/call/builtin/value_constructor.spec.ts @@ -483,6 +483,7 @@ g.test('array_zero_value') .fn(t => { const testcase = kArrayCases[t.params.case]; const decl = `array<${testcase.element}, ${testcase.size}>`; + const decltype = testcase.valid ? 'const' : 'let'; const code = `override o : i32 = 1; struct valid_S { x : u32 @@ -490,7 +491,9 @@ g.test('array_zero_value') struct invalid_S { x : array } - const x : ${decl} = ${decl}();`; + fn main() { + ${decltype} x : ${decl} = ${decl}(); + }`; t.expectCompileResult(testcase.valid, code); }); @@ -500,6 +503,7 @@ g.test('array_value') .fn(t => { const testcase = kArrayCases[t.params.case]; const decl = `array<${testcase.element}, ${testcase.size}>`; + const decltype = testcase.valid ? 'const' : 'let'; const code = `override o : i32 = 1; struct valid_S { x : u32 @@ -507,7 +511,9 @@ g.test('array_value') struct invalid_S { x : array } - const x : ${decl} = ${decl}(${testcase.values});`; + fn main() { + ${decltype} x : ${decl} = ${decl}(${testcase.values}); + }`; t.expectCompileResult(testcase.valid, code); }); @@ -577,9 +583,12 @@ g.test('struct_zero_value') .params(u => u.combine('case', keysOf(kStructCases))) .fn(t => { const testcase = kStructCases[t.params.case]; + const decltype = testcase.valid ? 'const' : 'let'; const code = ` ${testcase.decls} - const x : ${testcase.name} = ${testcase.name}();`; + fn main() { + ${decltype} x : ${testcase.name} = ${testcase.name}(); + }`; t.expectCompileResult(testcase.valid, code); }); @@ -588,9 +597,12 @@ g.test('struct_value') .params(u => u.combine('case', keysOf(kStructCases))) .fn(t => { const testcase = kStructCases[t.params.case]; + const decltype = testcase.valid ? 'const' : 'let'; const code = ` ${testcase.decls} - const x : ${testcase.name} = ${testcase.name}(${testcase.values});`; + fn main() { + ${decltype} x : ${testcase.name} = ${testcase.name}(${testcase.values}); + }`; t.expectCompileResult(testcase.valid, code); }); From 8b7a1401c723e09f2c04f351f20a578c614d6fa2 Mon Sep 17 00:00:00 2001 From: Andy Leiserson Date: Thu, 22 Jan 2026 11:25:35 -0800 Subject: [PATCH 2/2] Run all the array/struct tests on each of const/let/var --- .../call/builtin/value_constructor.spec.ts | 37 +++++++++++++------ 1 file changed, 25 insertions(+), 12 deletions(-) diff --git a/src/webgpu/shader/validation/expression/call/builtin/value_constructor.spec.ts b/src/webgpu/shader/validation/expression/call/builtin/value_constructor.spec.ts index 1257dcc323a1..1d933f844738 100644 --- a/src/webgpu/shader/validation/expression/call/builtin/value_constructor.spec.ts +++ b/src/webgpu/shader/validation/expression/call/builtin/value_constructor.spec.ts @@ -18,6 +18,7 @@ import { ShaderValidationTest } from '../../../shader_validation_test.js'; export const g = makeTestGroup(ShaderValidationTest); +const kDeclTypes = ['const', 'let', 'var']; const kScalarTypes = ['bool', 'i32', 'u32', 'f32', 'f16']; g.test('scalar_zero_value') @@ -479,11 +480,14 @@ const kArrayCases: Record = { g.test('array_zero_value') .desc('Tests zero value array constructors') - .params(u => u.combine('case', keysOf(kArrayCases))) + .params(u => + u + .combine('case', keysOf(kArrayCases)) // + .combine('decltype', kDeclTypes) + ) .fn(t => { const testcase = kArrayCases[t.params.case]; const decl = `array<${testcase.element}, ${testcase.size}>`; - const decltype = testcase.valid ? 'const' : 'let'; const code = `override o : i32 = 1; struct valid_S { x : u32 @@ -492,18 +496,21 @@ g.test('array_zero_value') x : array } fn main() { - ${decltype} x : ${decl} = ${decl}(); + ${t.params.decltype} x : ${decl} = ${decl}(); }`; t.expectCompileResult(testcase.valid, code); }); g.test('array_value') .desc('Tests array value constructor') - .params(u => u.combine('case', keysOf(kArrayCases))) + .params(u => + u + .combine('case', keysOf(kArrayCases)) // + .combine('decltype', kDeclTypes) + ) .fn(t => { const testcase = kArrayCases[t.params.case]; const decl = `array<${testcase.element}, ${testcase.size}>`; - const decltype = testcase.valid ? 'const' : 'let'; const code = `override o : i32 = 1; struct valid_S { x : u32 @@ -512,7 +519,7 @@ g.test('array_value') x : array } fn main() { - ${decltype} x : ${decl} = ${decl}(${testcase.values}); + ${t.params.decltype} x : ${decl} = ${decl}(${testcase.values}); }`; t.expectCompileResult(testcase.valid, code); }); @@ -580,28 +587,34 @@ const kStructCases = { g.test('struct_zero_value') .desc('Tests zero value struct constructors') - .params(u => u.combine('case', keysOf(kStructCases))) + .params(u => + u + .combine('case', keysOf(kStructCases)) // + .combine('decltype', kDeclTypes) + ) .fn(t => { const testcase = kStructCases[t.params.case]; - const decltype = testcase.valid ? 'const' : 'let'; const code = ` ${testcase.decls} fn main() { - ${decltype} x : ${testcase.name} = ${testcase.name}(); + ${t.params.decltype} x : ${testcase.name} = ${testcase.name}(); }`; t.expectCompileResult(testcase.valid, code); }); g.test('struct_value') .desc('Tests struct value constructors') - .params(u => u.combine('case', keysOf(kStructCases))) + .params(u => + u + .combine('case', keysOf(kStructCases)) // + .combine('decltype', kDeclTypes) + ) .fn(t => { const testcase = kStructCases[t.params.case]; - const decltype = testcase.valid ? 'const' : 'let'; const code = ` ${testcase.decls} fn main() { - ${decltype} x : ${testcase.name} = ${testcase.name}(${testcase.values}); + ${t.params.decltype} x : ${testcase.name} = ${testcase.name}(${testcase.values}); }`; t.expectCompileResult(testcase.valid, code); });