export const description = `Validation tests for continuing`;import { makeTestGroup } from '../../../../common/framework/test_group.js';import { keysOf } from '../../../../common/util/data_tables.js';import { ShaderValidationTest } from '../shader_validation_test.js';export const g = makeTestGroup(ShaderValidationTest);const kTests = {continuing_break_if: {src: 'loop { continuing { break if true; } }',pass: true,},continuing_empty: {src: 'loop { if a == 4 { break; } continuing { } }',pass: true,},continuing_break_if_parens: {src: 'loop { continuing { break if (true); } }',pass: true,},continuing_discard: {src: 'loop { if a == 4 { break; } continuing { discard; } }',pass: true,},continuing_continue_nested: {src: 'loop { if a == 4 { break; } continuing { loop { if a == 4 { break; } continue; } } }',pass: true,},continuing_continue: {src: 'loop { if a == 4 { break; } continuing { continue; } }',pass: false,},continuing_break: {src: 'loop { continuing { break; } }',pass: false,},continuing_for: {src: 'loop { if a == 4 { break; } continuing { for(;a < 4;) { } } }',pass: true,},continuing_for_break: {src: 'loop { if a == 4 { break; } continuing { for(;;) { break; } } }',pass: true,},continuing_while: {src: 'loop { if a == 4 { break; } continuing { while a < 4 { } } }',pass: true,},continuing_while_break: {src: 'loop { if a == 4 { break; } continuing { while true { break; } } }',pass: true,},continuing_semicolon: {src: 'loop { if a == 4 { break; } continuing { ; } }',pass: true,},continuing_functionn_call: {src: 'loop { if a == 4 { break; } continuing { _ = b(); } }',pass: true,},continuing_let: {src: 'loop { if a == 4 { break; } continuing { let c = b(); } }',pass: true,},continuing_var: {src: 'loop { if a == 4 { break; } continuing { var a = b(); } }',pass: true,},continuing_const: {src: 'loop { if a == 4 { break; } continuing { const a = 1; } }',pass: true,},continuing_block: {src: 'loop { if a == 4 { break; } continuing { { } } }',pass: true,},continuing_const_assert: {src: 'loop { if a == 4 { break; } continuing { const_assert(1 != 2); } }',pass: true,},continuing_loop: {src: 'loop { if a == 4 { break; } continuing { loop { break; } } }',pass: true,},continuing_if: {src: 'loop { if a == 4 { break; } continuing { if true { } else if false { } else { } } }',pass: true,},continuing_switch: {src: 'loop { if a == 4 { break; } continuing { switch 2 { default: { } } } }',pass: true,},continuing_switch_break: {src: 'loop { if a == 4 { break; } continuing { switch 2 { default: { break; } } } }',pass: true,},continuing_loop_nested_continuing: {src: 'loop { if a == 4 { break; } continuing { loop { if a == 4 { break; } continuing { } } } }',pass: true,},continuing_inc: {src: 'loop { if a == 4 { break; } continuing { a += 1; } }',pass: true,},continuing_dec: {src: 'loop { if a == 4 { break; } continuing { a -= 1; } }',pass: true,},while: {src: 'while a < 4 { continuing { break if true; } }',pass: false,},for: {src: 'for (;a < 4;) { continuing { break if true; } }',pass: false,},switch_case: {src: 'switch(1) { default: { continuing { break if true; } } }',pass: false,},switch: {src: 'switch(1) { continuing { break if true; } }',pass: false,},continuing: {src: 'continuing { break if true; }',pass: false,},return: {src: 'return continuing { break if true; }',pass: false,},if_body: {src: 'if true { continuing { break if true; } }',pass: false,},if: {src: 'if true { } continuing { break if true; } }',pass: false,},if_else: {src: 'if true { } else { } continuing { break if true; } }',pass: false,},continuing_continuing: {src: 'loop { if a == 4 { break; } continuing { continuing { break if true; } } }',pass: false,},no_body: {src: 'loop { if a == 4 { break; } continuing }',pass: false,},return_in_continue: {src: 'loop { if a == 4 { break; } continuing { return vec4f(2); } }',pass: false,},return_if_nested_in_continue: {src: 'loop { if a == 4 { break; } continuing { if true { return vec4f(2); } } }',pass: false,},return_for_nested_in_continue: {src: 'loop { if a == 4 { break; } continuing { for(;a < 4;) { return vec4f(2); } } }',pass: false,},continuing_semicolon_break_if: {src: 'loop { continuing { ; break if (true); } }',pass: true,},};g.test('placement').desc('Test that continuing placement is validated correctly').params(u => u.combine('stmt', keysOf(kTests))).fn(t => {const code = `fn b() -> i32 {return 1;}@fragmentfn frag() -> @location(0) vec4f {var a = 0;${kTests[t.params.stmt].src}return vec4f(1);}`;t.expectCompileResult(kTests[t.params.stmt].pass, code);});