export const description = `Flow control tests for switch statements.`;import { makeTestGroup } from '../../../../common/framework/test_group.js';import { AllFeaturesMaxLimitsGPUTest } from '../../../gpu_test.js';import { runFlowControlTest } from './harness.js';export const g = makeTestGroup(AllFeaturesMaxLimitsGPUTest);g.test('switch').desc('Test that flow control executes the correct switch case block').params(u => u.combine('preventValueOptimizations', [true, false])).fn(t => {runFlowControlTest(t,f => `${f.expect_order(0)}switch (${f.value(1)}) {case 0: {${f.expect_not_reached()}break;}case 1: {${f.expect_order(1)}break;}case 2: {${f.expect_not_reached()}break;}default: {${f.expect_not_reached()}break;}}${f.expect_order(2)}`);});g.test('switch_multiple_case').desc('Test that flow control executes the correct switch case block with multiple cases per block').params(u => u.combine('preventValueOptimizations', [true, false])).fn(t => {runFlowControlTest(t,f => `${f.expect_order(0)}switch (${f.value(2)}) {case 0, 1: {${f.expect_not_reached()}break;}case 2, 3: {${f.expect_order(1)}break;}default: {${f.expect_not_reached()}break;}}${f.expect_order(2)}`);});g.test('switch_multiple_case_default').desc('Test that flow control executes the correct switch case block with multiple cases per block (combined with default)').params(u => u.combine('preventValueOptimizations', [true, false])).fn(t => {runFlowControlTest(t,f => `${f.expect_order(0)}switch (${f.value(2)}) {case 0, 1: {${f.expect_not_reached()}break;}case 2, 3, default: {${f.expect_order(1)}break;}}${f.expect_order(2)}switch (${f.value(1)}) {case 0, 1: {${f.expect_order(3)}break;}case 2, 3, default: {${f.expect_not_reached()}break;}}${f.expect_order(4)}`);});g.test('switch_default').desc('Test that flow control executes the switch default block').params(u => u.combine('preventValueOptimizations', [true, false])).fn(t => {runFlowControlTest(t,f => `${f.expect_order(0)}switch (${f.value(4)}) {case 0: {${f.expect_not_reached()}break;}case 1: {${f.expect_not_reached()}break;}case 2: {${f.expect_not_reached()}break;}default: {${f.expect_order(1)}break;}}${f.expect_order(2)}`);});g.test('switch_default_only').desc('Test that flow control executes the switch default block, which is the only case').params(u => u.combine('preventValueOptimizations', [true, false])).fn(t => {runFlowControlTest(t,f => `${f.expect_order(0)}switch (${f.value(4)}) {default: {${f.expect_order(1)}break;}}${f.expect_order(2)}`);});g.test('switch_inside_loop_with_continue').desc('Test that flow control executes correct for a switch calling continue inside a loop').params(u => u.combine('preventValueOptimizations', [true, false])).fn(t => {runFlowControlTest(t,f => `${f.expect_order(0)}var i = ${f.value(0)};loop {switch (i) {case 1: {${f.expect_order(4)}continue;}default: {${f.expect_order(1)}break;}}${f.expect_order(2)}continuing {${f.expect_order(3, 5)}i++;break if i >= 2;}}${f.expect_order(6)}`);});