OLD | NEW |
(Empty) | |
| 1 function setF16Color(float32ImageData, i, f16Color) { |
| 2 var s = i * 4; |
| 3 float32ImageData[s] = f16Color[0]; |
| 4 float32ImageData[s + 1] = f16Color[1]; |
| 5 float32ImageData[s + 2] = f16Color[2]; |
| 6 float32ImageData[s + 3] = f16Color[3]; |
| 7 } |
| 8 |
| 9 function getF16Color(float32ImageData, i) { |
| 10 var result = []; |
| 11 var s = i * 4; |
| 12 for (var j = 0; j < 4; j++) { |
| 13 result[j] = float32ImageData[s + j]; |
| 14 } |
| 15 return result; |
| 16 } |
| 17 |
| 18 function compareF16Colors(f16Color1, f16Color2) { |
| 19 for (var j = 0; j < 4; j++) |
| 20 if (f16Color1[j] != f16Color2[j]) |
| 21 return false; |
| 22 return true; |
| 23 } |
| 24 |
| 25 test(function() { |
| 26 |
| 27 float32ImageData = new Float32ImageData(100, 50); |
| 28 assert_equals(float32ImageData.width, 100, |
| 29 "The width of the float32ImageData should be the width we passed to the co
nstructor."); |
| 30 assert_equals(float32ImageData.height, 50, |
| 31 "The height of the float32ImageData should be the height we passed to the
constructor."); |
| 32 |
| 33 var f16ColorData = getF16Color(float32ImageData.data, 4); |
| 34 assert_equals(f16ColorData[0], 0, |
| 35 "The default ImageData color is transparent black."); |
| 36 assert_equals(f16ColorData[1], 0, |
| 37 "The default ImageData color is transparent black."); |
| 38 assert_equals(f16ColorData[2], 0, |
| 39 "The default ImageData color is transparent black."); |
| 40 assert_equals(f16ColorData[3], 0, |
| 41 "The default ImageData color is transparent black."); |
| 42 |
| 43 var testColor = new Float32Array([0x00003c00, 0x00003c01, 0x00003c02, 0x00003c
03]); |
| 44 setF16Color(float32ImageData.data, 4, testColor); |
| 45 f16ColorData = getF16Color(float32ImageData.data, 4); |
| 46 assert_equals(f16ColorData[0], 0x00003c00, |
| 47 "The red component of f16 color is the value we set."); |
| 48 assert_equals(f16ColorData[1], 0x00003c01, |
| 49 "The green component of f16 color is the value we set."); |
| 50 assert_equals(f16ColorData[2], 0x00003c02, |
| 51 "The blue component of f16 color is the value we set."); |
| 52 assert_equals(f16ColorData[3], 0x00003c03, |
| 53 "The alpha component of f16 color is the value we set."); |
| 54 |
| 55 assert_throws(null, function() {new Float32ImageData(10);}, |
| 56 "Float32ImageData constructor requires both width and height."); |
| 57 assert_throws("IndexSizeError", function() {new Float32ImageData(0,10);}, |
| 58 "Float32ImageData width must be greater than zero."); |
| 59 assert_throws("IndexSizeError", function() {new Float32ImageData(10,0);}, |
| 60 "Float32ImageData height must be greater than zero."); |
| 61 assert_throws("IndexSizeError", function() {new Float32ImageData('width', 'hei
ght');}, |
| 62 "Float32ImageData width and height must be numbers."); |
| 63 assert_throws("IndexSizeError", function() {new Float32ImageData(1 << 31, 1 <<
31);}, |
| 64 "Float32ImageData width multiplied by height must be less than 2^30 to avo
id buffer size overflow."); |
| 65 |
| 66 assert_throws(null, function() {new Float32ImageData(new Float32Array(0));}, |
| 67 "The Float32Array passed to the constructor cannot have a length of zero."
); |
| 68 assert_throws("IndexSizeError", function() {new Float32ImageData(new Float32Ar
ray(27), 2);}, |
| 69 "The size of Float32Array passed to the constructor must be divisible by 4
* width."); |
| 70 assert_throws("IndexSizeError", function() {new Float32ImageData(new Float32Ar
ray(28), 7, 0);}, |
| 71 "The size of Float32Array passed to the constructor must be equal to 4 * w
idth * height."); |
| 72 assert_throws(null, function() {new Float32ImageData(self, 4, 4);}, |
| 73 "The object passed to the constructor as data array should be of type Floa
t32Array."); |
| 74 assert_throws(null, function() {new Float32ImageData(null, 4, 4);}, |
| 75 "The object passed to the constructor as data array should be of type Floa
t32Array."); |
| 76 assert_throws("IndexSizeError", function() {new Float32ImageData(float32ImageD
ata.data, 0);}, |
| 77 "The size of Float32Array passed to the constructor must be divisible by 4
* width."); |
| 78 assert_throws("IndexSizeError", function() {new Float32ImageData(float32ImageD
ata.data, 13);}, |
| 79 "The size of Float32Array passed to the constructor must be divisible by 4
* width."); |
| 80 assert_throws("IndexSizeError", function() {new Float32ImageData(float32ImageD
ata.data, 1 << 31);}, |
| 81 "The size of Float32Array passed to the constructor must be divisible by 4
* width."); |
| 82 assert_throws("IndexSizeError", function() {new Float32ImageData(float32ImageD
ata.data, 'biggish');}, |
| 83 "The width parameter must be a number."); |
| 84 assert_throws("IndexSizeError", function() {new Float32ImageData(float32ImageD
ata.data, 1 << 24, 1 << 31);}, |
| 85 "Float32ImageData width multiplied by height must be less than 2^30 to avo
id buffer size overflow."); |
| 86 assert_throws("IndexSizeError", function() {new Float32ImageData(float32ImageD
ata.data, 1 << 31, 1 << 24);}, |
| 87 "Float32ImageData width multiplied by height must be less than 2^30 to avo
id buffer size overflow."); |
| 88 assert_equals((new Float32ImageData(new Float32Array(28), 7)).height, 1, |
| 89 "The height must be equal to size of the data array divided by 4 * width."
); |
| 90 |
| 91 float32ImageDataFromData = new Float32ImageData(float32ImageData.data, 100); |
| 92 assert_equals(float32ImageDataFromData.width, 100, |
| 93 "The width of the float32ImageDataFromData should be the same as that of f
loat32ImageData."); |
| 94 assert_equals(float32ImageDataFromData.height, 50, |
| 95 "The height of the float32ImageDataFromData should be the same as that of
float32ImageData."); |
| 96 assert_true(float32ImageDataFromData.data == float32ImageData.data, |
| 97 "The pixel data buffer of float32ImageDataFromData should be the same as t
hat of float32ImageData."); |
| 98 assert_true(compareF16Colors(getF16Color(float32ImageDataFromData.data, 10), |
| 99 getF16Color(float32ImageData.data, 10)), |
| 100 "The color of a pixel from float32ImageDataFromData should be the same as
that of float32ImageData."); |
| 101 setF16Color(float32ImageData.data, 10, testColor); |
| 102 assert_true(compareF16Colors(getF16Color(float32ImageDataFromData.data, 10), |
| 103 getF16Color(float32ImageData.data, 10)), |
| 104 "Setting the color of a pixel from float32ImageData must cascade to the sa
me pixel of float32ImageDataFromData."); |
| 105 |
| 106 var data = new Float32Array(400); |
| 107 data[22] = 129; |
| 108 float32ImageDataFromData = new Float32ImageData(data, 20, 5); |
| 109 assert_equals(float32ImageDataFromData.width, 20, |
| 110 "The width of the float32ImageData should be the width we passed to the co
nstructor."); |
| 111 assert_equals(float32ImageDataFromData.height, 5, |
| 112 "The height of the Float32ImageData must be equal to size of the Float32Ar
ray divided by 4 * width."); |
| 113 assert_true(float32ImageDataFromData.data == data, |
| 114 "The pixel data buffer of float32ImageDataFromData should be the same buff
er passed to the constructor."); |
| 115 assert_true(compareF16Colors(getF16Color(float32ImageDataFromData.data, 2), ge
tF16Color(data, 2)), |
| 116 "The pixel data of float32ImageDataFromData should be the same as that of
the buffer passed to the constructor."); |
| 117 setF16Color(float32ImageDataFromData.data, 2, testColor); |
| 118 assert_true(compareF16Colors(getF16Color(float32ImageDataFromData.data, 2), ge
tF16Color(data, 2)), |
| 119 "Setting the color of a pixel from float32ImageDataFromData must cascade t
o the same pixel of the buffer passed to the constructor."); |
| 120 |
| 121 }, 'This test examines the correct behavior of Float32ImageData API.'); |
OLD | NEW |