| <html> |
| <head> |
| <script src="../../../resources/js-test.js"></script> |
| <script src="resources/webgl-test.js"></script> |
| </head> |
| <body> |
| <div id="description"></div> |
| <div id="console"></div> |
| |
| <script> |
| description("Test all permutations of WebGLArray setters to make sure values don't get truncated"); |
| |
| debug('Regression test for <a href="https://bugs.webkit.org/show_bug.cgi?id=33350">https://bugs.webkit.org/show_bug.cgi?id=33350</a> : <code>WebGLArray subclasses do the wrong conversion in indexSetter</code>'); |
| |
| var webGLArray = null; |
| var array = null; |
| |
| function testSetters(typeName, low, high) { |
| var type = window[typeName]; |
| webGLArray = new type(2); |
| array = [low, high]; |
| debug("Testing " + typeName); |
| webGLArray.set(array); |
| shouldBe("webGLArray", "array"); |
| shouldBe("webGLArray[0]", "array[0]"); |
| shouldBe("webGLArray[1]", "array[1]"); |
| webGLArray[0] = 0; |
| webGLArray[1] = 0; |
| shouldBe("webGLArray[0]", "0"); |
| shouldBe("webGLArray[1]", "0"); |
| webGLArray[0] = array[0]; |
| shouldBe("webGLArray[0]", "array[0]"); |
| webGLArray[1] = array[1]; |
| shouldBe("webGLArray[1]", "array[1]"); |
| |
| // Verify set() behaves correctly with shared underlying buffer. |
| array = [0, 1, 2, 3, 4, 5]; |
| webGLArray = new type(6); |
| webGLArray.set(array); |
| array = webGLArray.subarray(2, 4); |
| array[0] = 88; |
| array[1] = 99; |
| shouldBe("webGLArray[2]", "88"); |
| shouldBe("webGLArray[3]", "99"); |
| // pre-overlap |
| webGLArray.set(array, 1); |
| shouldBe("webGLArray[1]", "88"); |
| shouldBe("webGLArray[2]", "99"); |
| shouldBe("array[0]", "99"); |
| shouldBe("array[1]", "99"); |
| array[1] = 77; |
| // post-overlap |
| webGLArray.set(array, 3); |
| shouldBe("webGLArray[3]", "99"); |
| shouldBe("webGLArray[4]", "77"); |
| shouldBe("array[0]", "99"); |
| shouldBe("array[1]", "99"); |
| } |
| |
| testSetters("Int8Array", -128, 127); |
| testSetters("Uint8Array", 0, 255); |
| testSetters("Int16Array", -32768, 32767); |
| testSetters("Uint16Array", 0, 65535); |
| testSetters("Int32Array", -2147483648, 2147483647); |
| testSetters("Uint32Array", 0, 4294967295); |
| testSetters("Float32Array", -2.5, 3.5); |
| </script> |
| </body> |
| </html> |