Source code
Revision control
Copy as Markdown
Other Tools
// 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;
}