export const description = `Validation tests for discard`;

import { makeTestGroup } from '../../../../common/framework/test_group.js';
import { ShaderValidationTest } from '../shader_validation_test.js';

export const g = makeTestGroup(ShaderValidationTest);

g.test('placement')
  .desc('Test that discard usage is validated')
  .params(u =>
    u.combine('place', ['compute', 'vertex', 'fragment', 'module', 'subfrag', 'subvert', 'subcomp'])
  )
  .fn(t => {
    const pos: { [key: string]: string } = {
      module: '',
      subvert: '',
      subfrag: '',
      subcomp: '',
      vertex: '',
      fragment: '',
      compute: '',
    };

    pos[t.params.place] = 'discard;';

    const code = `
${pos.module}

fn subvert() {
  ${pos.subvert}
}

@vertex
fn vtx() -> @builtin(position) vec4f {
  ${pos.vertex}
  subvert();
  return vec4f(1);
}

fn subfrag() {
  ${pos.subfrag}
}

@fragment
fn frag() -> @location(0) vec4f {
  ${pos.fragment}
  subfrag();
  return vec4f(1);
}

fn subcomp() {
  ${pos.subcomp}
}

@compute
@workgroup_size(1)
fn comp() {
  ${pos.compute}
  subcomp();
}
`;

    const pass = ['fragment', 'subfrag'].includes(t.params.place);
    t.expectCompileResult(pass, code);
  });
