<canvas id="canvas" width="10" height="10"></canvas>
<div></div>
<script id='vertex-shader' type='x-shader/x-vertex'>
attribute vec3 position;
void main(void) {
  gl_Position =  vec4(position, 1.0);
}
</script>
<script id='fragment-shader' type='x-shader/x-fragment'>
precision mediump float;
void main(void) {
    gl_FragColor = vec4(0.0, 1.0, 0.0, 1.0);
}
</script>
<script>
function output(msg) {
    document.querySelector("div").innerHTML += msg + "<br>";
}

if (window.testRunner)
    testRunner.dumpAsText();

let canvas = document.getElementById("canvas");
let gl = canvas.getContext("webgl");

gl.getExtension("OES_element_index_uint");

let vShader = gl.createShader(gl.VERTEX_SHADER);
gl.shaderSource(vShader, document.getElementById("vertex-shader").text);
gl.compileShader(vShader);

let fShader = gl.createShader(gl.FRAGMENT_SHADER);
gl.shaderSource(fShader, document.getElementById("fragment-shader").text);
gl.compileShader(fShader);
program = gl.createProgram();
gl.attachShader(program, vShader);
gl.attachShader(program, fShader);
gl.linkProgram(program);
gl.useProgram(program);

let buffer = gl.createBuffer();
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, buffer);

let data;

// Maximum uint.
data = new Uint8Array([255, 255, 255, 255]);
gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, data, gl.DYNAMIC_DRAW);
gl.drawElements(gl.TRIANGLE_STRIP, 1, gl.UNSIGNED_INT,0);

if (gl.getError() == gl.INVALID_OPERATION)
    output("PASS: MAX_UINT index was unable to be simulated");
else
    output("FAIL: MAX_UINT index did not fail validation");

output("PASS: MAX_UINT index did not crash");

// Two large numbers, one of which is smaller than 0.25 * max uint.
data = new Uint32Array([380000000, 4294967295]);
gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, data, gl.DYNAMIC_DRAW);
gl.drawElements(gl.TRIANGLE_STRIP, 1, gl.UNSIGNED_INT,0);

if (gl.getError() == gl.INVALID_OPERATION)
    output("PASS: Huge index was unable to be simulated");
else
    output("FAIL: Huge index did not fail validation");

output("PASS: Huge index did not crash");

</script>

