dommatrix-test-util.js (1550B)
1 // This formats dict as a string suitable as test name. 2 // format_value() is provided by testharness.js, 3 // which also preserves sign for -0. 4 function format_dict(dict) { 5 const props = []; 6 for (let prop in dict) { 7 props.push(`${prop}: ${format_value(dict[prop])}`); 8 } 9 return `{${props.join(', ')}}`; 10 } 11 12 // Create a normal JS object with the expected properties 13 // from a dict with only m11..m44 specified (not a..f). 14 function matrix3D(dict) { 15 const matrix = {m11: 1, m12: 0, m13: 0, m14: 0, 16 m21: 0, m22: 1, m23: 0, m24: 0, 17 m31: 0, m32: 0, m33: 1, m34: 0, 18 m41: 0, m42: 0, m43: 0, m44: 1} 19 for (let member in dict) { 20 matrix[member] = dict[member]; 21 } 22 matrix.is2D = false; 23 matrix.a = matrix.m11; 24 matrix.b = matrix.m12; 25 matrix.c = matrix.m21; 26 matrix.d = matrix.m22; 27 matrix.e = matrix.m41; 28 matrix.f = matrix.m42; 29 return matrix; 30 } 31 32 function matrix2D(dict) { 33 const matrix = matrix3D(dict); 34 matrix.is2D = true; 35 return matrix; 36 } 37 38 function checkMatrix(actual, expected, { epsilon = Number.MIN_VALUE } = {}) { 39 for (let member in expected) { 40 if (epsilon && typeof expected[member] === "number") { 41 assert_approx_equals(actual[member], expected[member], epsilon, member); 42 } else { 43 assert_equals(actual[member], expected[member], member); 44 } 45 } 46 } 47 48 function identity() { 49 return new DOMMatrix( 50 [1, 0, 0, 0, 51 0, 1, 0 ,0, 52 0, 0, 1, 0, 53 0, 0, 0, 1]); 54 } 55 56 function update(matrix, f) { 57 f(matrix); 58 return matrix; 59 }