| // This formats dict as a string suitable as test name. |
| // format_value() is provided by testharness.js, |
| // which also preserves sign for -0. |
| function format_dict(dict) { |
| const props = []; |
| for (let prop in dict) { |
| props.push(`${prop}: ${format_value(dict[prop])}`); |
| } |
| return `{${props.join(', ')}}`; |
| } |
| |
| // Create a normal JS object with the expected properties |
| // from a dict with only m11..m44 specified (not a..f). |
| function matrix3D(dict) { |
| const matrix = {m11: 1, m12: 0, m13: 0, m14: 0, |
| m21: 0, m22: 1, m23: 0, m24: 0, |
| m31: 0, m32: 0, m33: 1, m34: 0, |
| m41: 0, m42: 0, m43: 0, m44: 1} |
| for (let member in dict) { |
| matrix[member] = dict[member]; |
| } |
| matrix.is2D = false; |
| matrix.a = matrix.m11; |
| matrix.b = matrix.m12; |
| matrix.c = matrix.m21; |
| matrix.d = matrix.m22; |
| matrix.e = matrix.m41; |
| matrix.f = matrix.m42; |
| return matrix; |
| } |
| |
| function matrix2D(dict) { |
| const matrix = matrix3D(dict); |
| matrix.is2D = true; |
| return matrix; |
| } |
| |
| function checkMatrix(actual, expected, { epsilon = Number.MIN_VALUE } = {}) { |
| for (let member in expected) { |
| if (epsilon && typeof expected[member] === "number") { |
| assert_approx_equals(actual[member], expected[member], epsilon, member); |
| } else { |
| assert_equals(actual[member], expected[member], member); |
| } |
| } |
| } |
| |
| function identity() { |
| return new DOMMatrix( |
| [1, 0, 0, 0, |
| 0, 1, 0 ,0, |
| 0, 0, 1, 0, |
| 0, 0, 0, 1]); |
| } |
| |
| function update(matrix, f) { |
| f(matrix); |
| return matrix; |
| } |