<!DOCTYPE html>
<html>
<script id='2d-vertex-shader' type='x-shader/x-vertex'>
    attribute vec4 a_Position; 
    void main() { gl_Position = a_Position; }
</script>
<script id='2d-fragment-shader' type='x-shader/x-fragment'>
    void main( void ) {}
</script>
<body>
<canvas id="canvas1" width="20" height="20"></canvas>
<script>
if (window.testRunner)
    testRunner.dumpAsText();

// Boilerplate set-up.
let canvas = document.getElementById('canvas1');
let gl = canvas.getContext('webgl');

let vShader = gl.createShader(gl.VERTEX_SHADER);
let vShaderScript = document.getElementById('2d-vertex-shader');
gl.shaderSource(vShader, vShaderScript.text);
gl.compileShader(vShader);

let fShader = gl.createShader(gl.FRAGMENT_SHADER);
let fShaderScript = document.getElementById('2d-fragment-shader');
gl.shaderSource(fShader, fShaderScript.text);
gl.compileShader(fShader);

let program = gl.createProgram();
gl.attachShader(program, vShader);
gl.attachShader(program, fShader);
gl.linkProgram(program);
gl.useProgram(program);

gl.getExtension("OES_element_index_uint");
let ext = gl.getExtension('ANGLE_instanced_arrays');

// Execute a draw that is valid, if strange.
let buffer = gl.createBuffer();
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, buffer);
gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, new Uint8ClampedArray([256, 256, 256, 256]), gl.STATIC_DRAW);
ext.drawElementsInstancedANGLE(gl.TRIANGLES, 2, gl.UNSIGNED_SHORT, 0, gl.UNSIGNED_SHORT);

// Execute a draw that is invalid because an element index is too large.
buffer = gl.createBuffer();
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, buffer);
gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, new Uint16Array([65536, 137413, 65536, 65536, 65536, 65536, 65536, 65536, 65536, 65536, 65536, 65536, 65536, 65536, 65536]), gl.STATIC_DRAW);
gl.bufferSubData(gl.ELEMENT_ARRAY_BUFFER, 10, new Uint8ClampedArray([256, 256, 256, 256, 256, 256]));
gl.drawElements(gl.TRIANGLES, 1, gl.UNSIGNED_INT, 0);

// Now execute a similarly invalid call, that uses a smaller simulated buffer than the previous invalid call.
buffer = gl.createBuffer();
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, buffer);
gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, new Uint8ClampedArray([256, 256, 256, 256, 256, 256]), gl.STATIC_DRAW);
gl.drawElements(gl.TRIANGLES, 1, gl.UNSIGNED_SHORT, 0);
</script>
</html>