<!DOCTYPE html>
<html>
<head>
<script src="../../../resources/js-test-pre.js"></script>
</head>
<body>
<canvas id="canvas" width="40" height="40"></canvas>
<script>
description("Make sure that reading and writing WebGL2 buffers works as expected.");

if (window.internals)
	internals.settings.setWebGL2Enabled(true);

var arrayBuffer = new ArrayBuffer(40);
var fullArrayView = new Float32Array(arrayBuffer); // [15, 16, 17, 18, 19, 20, 21, 22, 23, 24], 40 bytes
var partialArrayView = new Float32Array(arrayBuffer, 4, 5); // [16, 17, 18, 19, 20], 20 bytes
var receiver = new Float32Array(20); // 20 floats, 80 bytes
for (var i = 0; i < 10; ++i)
	fullArrayView[i] = 15 + i;

var sentinel = 100;
function fillReceiver() {
	for (var i = 0; i < receiver.length; ++i)
		receiver[i] = sentinel;
}

var canvas = document.getElementById("canvas");
var context = canvas.getContext("webgl2");

runTests(context.ARRAY_BUFFER);
runTests(context.COPY_READ_BUFFER);
runTests(context.COPY_WRITE_BUFFER);
runTests(context.ELEMENT_ARRAY_BUFFER);
runTests(context.PIXEL_PACK_BUFFER);
runTests(context.PIXEL_UNPACK_BUFFER);
runTests(context.TRANSFORM_FEEDBACK_BUFFER);
runTests(context.UNIFORM_BUFFER);

function runTests(target) {
	var buffer = context.createBuffer();
	shouldBe("context.getError()", "context.NO_ERROR");
	context.bindBuffer(target, buffer);
	shouldBe("context.getError()", "context.NO_ERROR");



	context.bufferData(target, arrayBuffer, context.STATIC_DRAW);
	shouldBe("context.getError()", "context.NO_ERROR");
	context.getBufferSubData(target, 0, receiver, 0, 10);
	shouldBe("context.getError()", "context.NO_ERROR");
	for (var i = 0; i < 10; ++i)
		shouldBe("receiver[" + i + "]", "fullArrayView[" + i + "]");

	fillReceiver();
	context.bufferData(target, arrayBuffer, context.STATIC_DRAW);
	shouldBe("context.getError()", "context.NO_ERROR");
	context.getBufferSubData(target, 0, receiver, 1, 10);
	shouldBe("context.getError()", "context.NO_ERROR");
	shouldBe("receiver[0]", "sentinel");
	for (var i = 0; i < 10; ++i)
		shouldBe("receiver[" + (i + 1) + "]", "fullArrayView[" + i + "]");

	context.bufferData(target, arrayBuffer, context.STATIC_DRAW);
	shouldBe("context.getError()", "context.NO_ERROR");
	context.getBufferSubData(target, 4, receiver, 0, 9);
	shouldBe("context.getError()", "context.NO_ERROR");
	for (var i = 0; i < 9; ++i)
		shouldBe("receiver[" + i + "]", "fullArrayView[" + (i + 1) + "]");

	fillReceiver();
	context.bufferData(target, arrayBuffer, context.STATIC_DRAW);
	shouldBe("context.getError()", "context.NO_ERROR");
	context.getBufferSubData(target, 8, receiver, 1, 8);
	shouldBe("context.getError()", "context.NO_ERROR");
	shouldBe("receiver[0]", "sentinel");
	for (var i = 0; i < 8; ++i)
		shouldBe("receiver[" + (i + 1) + "]", "fullArrayView[" + (i + 2) + "]");

	////////////////////////////////////////////////////////////////////////////////////////////////

	context.bufferData(target, partialArrayView, context.STATIC_DRAW);
	shouldBe("context.getError()", "context.NO_ERROR");
	context.getBufferSubData(target, 0, receiver, 0, 5);
	shouldBe("context.getError()", "context.NO_ERROR");
	for (var i = 0; i < 5; ++i)
		shouldBe("receiver[" + i + "]", "fullArrayView[" + (i + 1) + "]");

	fillReceiver();
	context.bufferData(target, partialArrayView, context.STATIC_DRAW);
	shouldBe("context.getError()", "context.NO_ERROR");
	context.getBufferSubData(target, 0, receiver, 1, 5);
	shouldBe("context.getError()", "context.NO_ERROR");
	shouldBe("receiver[0]", "sentinel");
	for (var i = 0; i < 5; ++i)
		shouldBe("receiver[" + (i + 1) + "]", "fullArrayView[" + (i + 1) + "]");

	context.bufferData(target, partialArrayView, context.STATIC_DRAW);
	shouldBe("context.getError()", "context.NO_ERROR");
	context.getBufferSubData(target, 4, receiver, 0, 4);
	shouldBe("context.getError()", "context.NO_ERROR");
	for (var i = 0; i < 4; ++i)
		shouldBe("receiver[" + i + "]", "fullArrayView[" + (i + 2) + "]");

	fillReceiver();
	context.bufferData(target, partialArrayView, context.STATIC_DRAW);
	shouldBe("context.getError()", "context.NO_ERROR");
	context.getBufferSubData(target, 8, receiver, 1, 3);
	shouldBe("context.getError()", "context.NO_ERROR");
	shouldBe("receiver[0]", "sentinel");
	for (var i = 0; i < 3; ++i)
		shouldBe("receiver[" + (i + 1) + "]", "fullArrayView[" + (i + 3) + "]");

	////////////////////////////////////////////////////////////////////////////////////////////////

	context.bufferData(target, partialArrayView, context.STATIC_DRAW, 0, 5);
	shouldBe("context.getError()", "context.NO_ERROR");
	context.getBufferSubData(target, 0, receiver, 0, 5);
	shouldBe("context.getError()", "context.NO_ERROR");
	for (var i = 0; i < 5; ++i)
		shouldBe("receiver[" + i + "]", "fullArrayView[" + (i + 1) + "]");

	fillReceiver();
	context.bufferData(target, partialArrayView, context.STATIC_DRAW, 0, 5);
	shouldBe("context.getError()", "context.NO_ERROR");
	context.getBufferSubData(target, 0, receiver, 1, 5);
	shouldBe("context.getError()", "context.NO_ERROR");
	shouldBe("receiver[0]", "sentinel");
	for (var i = 0; i < 5; ++i)
		shouldBe("receiver[" + (i + 1) + "]", "fullArrayView[" + (i + 1) + "]");

	context.bufferData(target, partialArrayView, context.STATIC_DRAW, 0, 5);
	shouldBe("context.getError()", "context.NO_ERROR");
	context.getBufferSubData(target, 4, receiver, 0, 4);
	shouldBe("context.getError()", "context.NO_ERROR");
	for (var i = 0; i < 4; ++i)
		shouldBe("receiver[" + i + "]", "fullArrayView[" + (i + 2) + "]");

	fillReceiver();
	context.bufferData(target, partialArrayView, context.STATIC_DRAW, 0, 5);
	shouldBe("context.getError()", "context.NO_ERROR");
	context.getBufferSubData(target, 8, receiver, 1, 3);
	shouldBe("context.getError()", "context.NO_ERROR");
	shouldBe("receiver[0]", "sentinel");
	for (var i = 0; i < 3; ++i)
		shouldBe("receiver[" + (i + 1) + "]", "fullArrayView[" + (i + 3) + "]");

	////////////////////////////////////////////////////////////////////////////////////////////////

	context.bufferData(target, partialArrayView, context.STATIC_DRAW, 1, 4);
	shouldBe("context.getError()", "context.NO_ERROR");
	context.getBufferSubData(target, 0, receiver, 0, 4);
	shouldBe("context.getError()", "context.NO_ERROR");
	for (var i = 0; i < 4; ++i)
		shouldBe("receiver[" + i + "]", "fullArrayView[" + (i + 2) + "]");

	fillReceiver();
	context.bufferData(target, partialArrayView, context.STATIC_DRAW, 1, 4);
	shouldBe("context.getError()", "context.NO_ERROR");
	context.getBufferSubData(target, 0, receiver, 1, 4);
	shouldBe("context.getError()", "context.NO_ERROR");
	shouldBe("receiver[0]", "sentinel");
	for (var i = 0; i < 4; ++i)
		shouldBe("receiver[" + (i + 1) + "]", "fullArrayView[" + (i + 2) + "]");

	context.bufferData(target, partialArrayView, context.STATIC_DRAW, 1, 4);
	shouldBe("context.getError()", "context.NO_ERROR");
	context.getBufferSubData(target, 4, receiver, 0, 3);
	shouldBe("context.getError()", "context.NO_ERROR");
	for (var i = 0; i < 3; ++i)
		shouldBe("receiver[" + i + "]", "fullArrayView[" + (i + 3) + "]");

	fillReceiver();
	context.bufferData(target, partialArrayView, context.STATIC_DRAW, 1, 4);
	shouldBe("context.getError()", "context.NO_ERROR");
	context.getBufferSubData(target, 8, receiver, 1, 2);
	shouldBe("context.getError()", "context.NO_ERROR");
	shouldBe("receiver[0]", "sentinel");
	for (var i = 0; i < 2; ++i)
		shouldBe("receiver[" + (i + 1) + "]", "fullArrayView[" + (i + 4) + "]");



	////////////////////////////////////////////////////////////////////////////////////////////////
	////////////////////////////////////////////////////////////////////////////////////////////////
	////////////////////////////////////////////////////////////////////////////////////////////////
	// Give the buffer a size which is big enough to hold the entire buffer
	fillReceiver();
	context.bufferData(target, receiver, context.STATIC_DRAW);
	shouldBe("context.getError()", "context.NO_ERROR");



	context.bufferSubData(target, 0, arrayBuffer);
	shouldBe("context.getError()", "context.NO_ERROR");
	context.getBufferSubData(target, 0, receiver, 0, 10);
	shouldBe("context.getError()", "context.NO_ERROR");
	for (var i = 0; i < 10; ++i)
		shouldBe("receiver[" + i + "]", "fullArrayView[" + i + "]");

	fillReceiver();
	context.bufferSubData(target, 0, arrayBuffer);
	shouldBe("context.getError()", "context.NO_ERROR");
	context.getBufferSubData(target, 0, receiver, 1, 10);
	shouldBe("context.getError()", "context.NO_ERROR");
	shouldBe("receiver[0]", "sentinel");
	for (var i = 0; i < 10; ++i)
		shouldBe("receiver[" + (i + 1) + "]", "fullArrayView[" + i + "]");

	context.bufferSubData(target, 0, arrayBuffer);
	shouldBe("context.getError()", "context.NO_ERROR");
	context.getBufferSubData(target, 4, receiver, 0, 9);
	shouldBe("context.getError()", "context.NO_ERROR");
	for (var i = 0; i < 9; ++i)
		shouldBe("receiver[" + i + "]", "fullArrayView[" + (i + 1) + "]");

	fillReceiver();
	context.bufferSubData(target, 0, arrayBuffer);
	shouldBe("context.getError()", "context.NO_ERROR");
	context.getBufferSubData(target, 8, receiver, 1, 8);
	shouldBe("context.getError()", "context.NO_ERROR");
	shouldBe("receiver[0]", "sentinel");
	for (var i = 0; i < 8; ++i)
		shouldBe("receiver[" + (i + 1) + "]", "fullArrayView[" + (i + 2) + "]");

	////////////////////////////////////////////////////////////////////////////////////////////////

	context.bufferSubData(target, 0, partialArrayView);
	shouldBe("context.getError()", "context.NO_ERROR");
	context.getBufferSubData(target, 0, receiver, 0, 5);
	shouldBe("context.getError()", "context.NO_ERROR");
	for (var i = 0; i < 5; ++i)
		shouldBe("receiver[" + i + "]", "fullArrayView[" + (i + 1) + "]");

	fillReceiver();
	context.bufferSubData(target, 0, partialArrayView);
	shouldBe("context.getError()", "context.NO_ERROR");
	context.getBufferSubData(target, 0, receiver, 1, 5);
	shouldBe("context.getError()", "context.NO_ERROR");
	shouldBe("receiver[0]", "sentinel");
	for (var i = 0; i < 5; ++i)
		shouldBe("receiver[" + (i + 1) + "]", "fullArrayView[" + (i + 1) + "]");

	context.bufferSubData(target, 0, partialArrayView);
	shouldBe("context.getError()", "context.NO_ERROR");
	context.getBufferSubData(target, 4, receiver, 0, 4);
	shouldBe("context.getError()", "context.NO_ERROR");
	for (var i = 0; i < 4; ++i)
		shouldBe("receiver[" + i + "]", "fullArrayView[" + (i + 2) + "]");

	fillReceiver();
	context.bufferSubData(target, 0, partialArrayView);
	shouldBe("context.getError()", "context.NO_ERROR");
	context.getBufferSubData(target, 8, receiver, 1, 3);
	shouldBe("context.getError()", "context.NO_ERROR");
	shouldBe("receiver[0]", "sentinel");
	for (var i = 0; i < 3; ++i)
		shouldBe("receiver[" + (i + 1) + "]", "fullArrayView[" + (i + 3) + "]");

	////////////////////////////////////////////////////////////////////////////////////////////////

	context.bufferSubData(target, 0, partialArrayView, 0, 5);
	shouldBe("context.getError()", "context.NO_ERROR");
	context.getBufferSubData(target, 0, receiver, 0, 5);
	shouldBe("context.getError()", "context.NO_ERROR");
	for (var i = 0; i < 5; ++i)
		shouldBe("receiver[" + i + "]", "fullArrayView[" + (i + 1) + "]");

	fillReceiver();
	context.bufferSubData(target, 0, partialArrayView, 0, 5);
	shouldBe("context.getError()", "context.NO_ERROR");
	context.getBufferSubData(target, 0, receiver, 1, 5);
	shouldBe("context.getError()", "context.NO_ERROR");
	shouldBe("receiver[0]", "sentinel");
	for (var i = 0; i < 5; ++i)
		shouldBe("receiver[" + (i + 1) + "]", "fullArrayView[" + (i + 1) + "]");

	context.bufferSubData(target, 0, partialArrayView, 0, 5);
	shouldBe("context.getError()", "context.NO_ERROR");
	context.getBufferSubData(target, 4, receiver, 0, 4);
	shouldBe("context.getError()", "context.NO_ERROR");
	for (var i = 0; i < 4; ++i)
		shouldBe("receiver[" + i + "]", "fullArrayView[" + (i + 2) + "]");

	fillReceiver();
	context.bufferSubData(target, 0, partialArrayView, 0, 5);
	shouldBe("context.getError()", "context.NO_ERROR");
	context.getBufferSubData(target, 8, receiver, 1, 3);
	shouldBe("context.getError()", "context.NO_ERROR");
	shouldBe("receiver[0]", "sentinel");
	for (var i = 0; i < 3; ++i)
		shouldBe("receiver[" + (i + 1) + "]", "fullArrayView[" + (i + 3) + "]");

	////////////////////////////////////////////////////////////////////////////////////////////////

	context.bufferSubData(target, 0, partialArrayView, 1, 4);
	shouldBe("context.getError()", "context.NO_ERROR");
	context.getBufferSubData(target, 0, receiver, 0, 4);
	shouldBe("context.getError()", "context.NO_ERROR");
	for (var i = 0; i < 4; ++i)
		shouldBe("receiver[" + i + "]", "fullArrayView[" + (i + 2) + "]");

	fillReceiver();
	context.bufferSubData(target, 0, partialArrayView, 1, 4);
	shouldBe("context.getError()", "context.NO_ERROR");
	context.getBufferSubData(target, 0, receiver, 1, 4);
	shouldBe("context.getError()", "context.NO_ERROR");
	shouldBe("receiver[0]", "sentinel");
	for (var i = 0; i < 4; ++i)
		shouldBe("receiver[" + (i + 1) + "]", "fullArrayView[" + (i + 2) + "]");

	context.bufferSubData(target, 0, partialArrayView, 1, 4);
	shouldBe("context.getError()", "context.NO_ERROR");
	context.getBufferSubData(target, 4, receiver, 0, 3);
	shouldBe("context.getError()", "context.NO_ERROR");
	for (var i = 0; i < 3; ++i)
		shouldBe("receiver[" + i + "]", "fullArrayView[" + (i + 3) + "]");

	fillReceiver();
	context.bufferSubData(target, 0, partialArrayView, 1, 4);
	shouldBe("context.getError()", "context.NO_ERROR");
	context.getBufferSubData(target, 8, receiver, 1, 2);
	shouldBe("context.getError()", "context.NO_ERROR");
	shouldBe("receiver[0]", "sentinel");
	for (var i = 0; i < 2; ++i)
		shouldBe("receiver[" + (i + 1) + "]", "fullArrayView[" + (i + 4) + "]");



	////////////////////////////////////////////////////////////////////////////////////////////////
	////////////////////////////////////////////////////////////////////////////////////////////////
	////////////////////////////////////////////////////////////////////////////////////////////////
	// Give the buffer a size which is big enough to hold the entire buffer
	fillReceiver();
	context.bufferData(target, receiver, context.STATIC_DRAW);
	shouldBe("context.getError()", "context.NO_ERROR");



	context.bufferSubData(target, 4, arrayBuffer);
	shouldBe("context.getError()", "context.NO_ERROR");
	context.getBufferSubData(target, 0, receiver, 0, 11);
	shouldBe("context.getError()", "context.NO_ERROR");
	shouldBe("receiver[0]", "sentinel");
	for (var i = 0; i < 10; ++i)
		shouldBe("receiver[" + (i + 1) + "]", "fullArrayView[" + i + "]");

	fillReceiver();
	context.bufferSubData(target, 4, arrayBuffer);
	shouldBe("context.getError()", "context.NO_ERROR");
	context.getBufferSubData(target, 0, receiver, 1, 11);
	shouldBe("context.getError()", "context.NO_ERROR");
	shouldBe("receiver[0]", "sentinel");
	shouldBe("receiver[1]", "sentinel");
	for (var i = 0; i < 10; ++i)
		shouldBe("receiver[" + (i + 2) + "]", "fullArrayView[" + i + "]");

	context.bufferSubData(target, 4, arrayBuffer);
	shouldBe("context.getError()", "context.NO_ERROR");
	context.getBufferSubData(target, 4, receiver, 0, 10);
	shouldBe("context.getError()", "context.NO_ERROR");
	for (var i = 0; i < 10; ++i)
		shouldBe("receiver[" + i + "]", "fullArrayView[" + i + "]");

	fillReceiver();
	context.bufferSubData(target, 4, arrayBuffer);
	shouldBe("context.getError()", "context.NO_ERROR");
	context.getBufferSubData(target, 8, receiver, 1, 8);
	shouldBe("context.getError()", "context.NO_ERROR");
	shouldBe("receiver[0]", "sentinel");
	for (var i = 0; i < 8; ++i)
		shouldBe("receiver[" + (i + 1) + "]", "fullArrayView[" + (i + 1) + "]");

	////////////////////////////////////////////////////////////////////////////////////////////////

	context.bufferSubData(target, 4, partialArrayView);
	shouldBe("context.getError()", "context.NO_ERROR");
	context.getBufferSubData(target, 0, receiver, 0, 6);
	shouldBe("context.getError()", "context.NO_ERROR");
	shouldBe("receiver[0]", "sentinel");
	for (var i = 0; i < 5; ++i)
		shouldBe("receiver[" + (i + 1) + "]", "fullArrayView[" + (i + 1) + "]");

	fillReceiver();
	context.bufferSubData(target, 4, partialArrayView);
	shouldBe("context.getError()", "context.NO_ERROR");
	context.getBufferSubData(target, 0, receiver, 1, 6);
	shouldBe("context.getError()", "context.NO_ERROR");
	shouldBe("receiver[0]", "sentinel");
	shouldBe("receiver[1]", "sentinel");
	for (var i = 0; i < 5; ++i)
		shouldBe("receiver[" + (i + 2) + "]", "fullArrayView[" + (i + 1) + "]");

	context.bufferSubData(target, 4, partialArrayView);
	shouldBe("context.getError()", "context.NO_ERROR");
	context.getBufferSubData(target, 4, receiver, 0, 5);
	shouldBe("context.getError()", "context.NO_ERROR");
	for (var i = 0; i < 4; ++i)
		shouldBe("receiver[" + i + "]", "fullArrayView[" + (i + 1) + "]");

	fillReceiver();
	context.bufferSubData(target, 4, partialArrayView);
	shouldBe("context.getError()", "context.NO_ERROR");
	context.getBufferSubData(target, 8, receiver, 1, 4);
	shouldBe("context.getError()", "context.NO_ERROR");
	shouldBe("receiver[0]", "sentinel");
	for (var i = 0; i < 3; ++i)
		shouldBe("receiver[" + (i + 1) + "]", "fullArrayView[" + (i + 2) + "]");

	////////////////////////////////////////////////////////////////////////////////////////////////

	context.bufferSubData(target, 4, partialArrayView, 0, 5);
	shouldBe("context.getError()", "context.NO_ERROR");
	context.getBufferSubData(target, 0, receiver, 0, 6);
	shouldBe("context.getError()", "context.NO_ERROR");
	shouldBe("receiver[0]", "sentinel");
	for (var i = 0; i < 5; ++i)
		shouldBe("receiver[" + (i + 1) + "]", "fullArrayView[" + (i + 1) + "]");

	fillReceiver();
	context.bufferSubData(target, 4, partialArrayView, 0, 5);
	shouldBe("context.getError()", "context.NO_ERROR");
	context.getBufferSubData(target, 0, receiver, 1, 6);
	shouldBe("context.getError()", "context.NO_ERROR");
	shouldBe("receiver[0]", "sentinel");
	shouldBe("receiver[1]", "sentinel");
	for (var i = 0; i < 5; ++i)
		shouldBe("receiver[" + (i + 2) + "]", "fullArrayView[" + (i + 1) + "]");

	context.bufferSubData(target, 4, partialArrayView, 0, 5);
	shouldBe("context.getError()", "context.NO_ERROR");
	context.getBufferSubData(target, 4, receiver, 0, 5);
	shouldBe("context.getError()", "context.NO_ERROR");
	for (var i = 0; i < 4; ++i)
		shouldBe("receiver[" + i + "]", "fullArrayView[" + (i + 1) + "]");

	fillReceiver();
	context.bufferSubData(target, 4, partialArrayView, 0, 5);
	shouldBe("context.getError()", "context.NO_ERROR");
	context.getBufferSubData(target, 8, receiver, 1, 4);
	shouldBe("context.getError()", "context.NO_ERROR");
	shouldBe("receiver[0]", "sentinel");
	for (var i = 0; i < 3; ++i)
		shouldBe("receiver[" + (i + 1) + "]", "fullArrayView[" + (i + 2) + "]");

	////////////////////////////////////////////////////////////////////////////////////////////////

	context.bufferSubData(target, 4, partialArrayView, 1, 4);
	shouldBe("context.getError()", "context.NO_ERROR");
	context.getBufferSubData(target, 0, receiver, 0, 5);
	shouldBe("context.getError()", "context.NO_ERROR");
	shouldBe("receiver[0]", "sentinel");
	for (var i = 0; i < 4; ++i)
		shouldBe("receiver[" + (i + 1) + "]", "fullArrayView[" + (i + 2) + "]");

	fillReceiver();
	context.bufferSubData(target, 4, partialArrayView, 1, 4);
	shouldBe("context.getError()", "context.NO_ERROR");
	context.getBufferSubData(target, 0, receiver, 1, 5);
	shouldBe("context.getError()", "context.NO_ERROR");
	shouldBe("receiver[0]", "sentinel");
	shouldBe("receiver[1]", "sentinel");
	for (var i = 0; i < 4; ++i)
		shouldBe("receiver[" + (i + 2) + "]", "fullArrayView[" + (i + 2) + "]");

	context.bufferSubData(target, 4, partialArrayView, 1, 4);
	shouldBe("context.getError()", "context.NO_ERROR");
	context.getBufferSubData(target, 4, receiver, 0, 4);
	shouldBe("context.getError()", "context.NO_ERROR");
	for (var i = 0; i < 4; ++i)
		shouldBe("receiver[" + i + "]", "fullArrayView[" + (i + 2) + "]");

	fillReceiver();
	context.bufferSubData(target, 4, partialArrayView, 1, 4);
	shouldBe("context.getError()", "context.NO_ERROR");
	context.getBufferSubData(target, 8, receiver, 1, 3);
	shouldBe("context.getError()", "context.NO_ERROR");
	shouldBe("receiver[0]", "sentinel");
	for (var i = 0; i < 3; ++i)
		shouldBe("receiver[" + (i + 1) + "]", "fullArrayView[" + (i + 3) + "]");



	context.deleteBuffer(buffer);
	shouldBe("context.getError()", "context.NO_ERROR");
}
</script>
<script src="../../../resources/js-test-post.js"></script>
</body>
</html>