<script>
  globalThis.testRunner?.dumpAsText();
  globalThis.testRunner?.waitUntilDone();

  onload = async () => {
    let adapter = await navigator.gpu.requestAdapter({});
    let device = await adapter.requestDevice({});
    let module = device.createShaderModule({
      code: `
@fragment
fn fragment0() -> @location(0) vec4u {
  let i0: vec4f = vec4f(0., 2., 2., 2.);
  let i1: vec4f = asin(i0); // <-- (0., NaN, NaN, NaN)
  let i2: vec4u = vec4u(i1);
  let i3: u32 = pack4xU8(i2);
  let i4: f32 = bitcast<f32>(i3);
  let i5: f32 = min(i4, 1);
  let i6: u32 = u32(i5);
  return vec4u(i6);
}

@vertex
fn vertex0() -> @builtin(position) vec4f {
  return vec4();
}
`,
    });
    let pipeline = device.createRenderPipeline({
      layout: 'auto',
      fragment: {module, targets: [{format: 'rg16uint'}]},
      vertex: {module},
    });
    await device.queue.onSubmittedWorkDone();
    console.log("Passed");
    globalThis.testRunner?.notifyDone();
  };
</script>
