export const description = `Test override execution`;import { makeTestGroup } from '../../../common/framework/test_group.js';import { keysOf } from '../../../common/util/data_tables.js';import { AllFeaturesMaxLimitsGPUTest } from '../../gpu_test.js';import { checkElementsEqual } from '../../util/check_contents.js';export const g = makeTestGroup(AllFeaturesMaxLimitsGPUTest);const kOverrideCases = {logical_lhs_override: {code: `x == 2 && 1 < 2`,},logical_rhs_override: {code: `1 > 2 || x == 2`,},logical_both_override: {code: `x > 2 || x == 2`,},};g.test('logical').desc(`Test replacing an override in the LHS of a logical statement`).params(u => u.combine('case', keysOf(kOverrideCases))).fn(async t => {const expr = kOverrideCases[t.params.case].code;const code = `override x: u32 = 2;override y: bool = ${expr};@group(0) @binding(0) var<storage, read_write> v : vec4u;@compute @workgroup_size(1)fn main() {if (y) {v = vec4u(4, 4, 4, 4);} else {v = vec4u(1, 1, 1, 1);}}`;const pipeline = t.device.createComputePipeline({layout: 'auto',compute: {module: t.device.createShaderModule({code,}),entryPoint: 'main',},});const buffer = t.makeBufferWithContents(new Uint32Array([0, 0, 0, 0]),GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST);const bg = t.device.createBindGroup({layout: pipeline.getBindGroupLayout(0),entries: [{binding: 0,resource: {buffer,},},],});const encoder = t.device.createCommandEncoder();const pass = encoder.beginComputePass();pass.setPipeline(pipeline);pass.setBindGroup(0, bg);pass.dispatchWorkgroups(1, 1, 1);pass.end();t.queue.submit([encoder.finish()]);const bufferReadback = await t.readGPUBufferRangeTyped(buffer, {srcByteOffset: 0,type: Uint32Array,typedLength: 4,method: 'copy',});const got: Uint32Array = bufferReadback.data;const expected = new Uint32Array([4, 4, 4, 4]);t.expectOK(checkElementsEqual(got, expected));});