1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
|
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*-
* vim: sw=2 ts=2 et lcs=trail\:.,tab\:>~ :
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
/*
* Utilities for testing SVG matrices
*/
function createMatrix(a, b, c, d, e, f) {
var svg = document.getElementsByTagName("svg")[0];
var m = svg.createSVGMatrix();
m.a = a;
m.b = b;
m.c = c;
m.d = d;
m.e = e;
m.f = f;
return m;
}
// Lightweight dummy Matrix class for representing arrays that get passed in
function MatrixFromArray(a) {
this.a = a[0];
this.b = a[1];
this.c = a[2];
this.d = a[3];
this.e = a[4];
this.f = a[5];
}
function cmpMatrix(a, b, msg) {
if (a.constructor === Array) {
a = new MatrixFromArray(a);
}
if (b.constructor === Array) {
b = new MatrixFromArray(b);
}
ok(
a.a == b.a &&
a.b == b.b &&
a.c == b.c &&
a.d == b.d &&
a.e == b.e &&
a.f == b.f,
msg + " - got " + formatMatrix(a) + ", expected " + formatMatrix(b)
);
}
function roughCmpMatrix(a, b, msg) {
if (a.constructor === Array) {
a = new MatrixFromArray(a);
}
if (b.constructor === Array) {
b = new MatrixFromArray(b);
}
const tolerance = 1 / 65535;
ok(
Math.abs(b.a - a.a) < tolerance &&
Math.abs(b.b - a.b) < tolerance &&
Math.abs(b.c - a.c) < tolerance &&
Math.abs(b.d - a.d) < tolerance &&
Math.abs(b.e - a.e) < tolerance &&
Math.abs(b.f - a.f) < tolerance,
msg + " - got " + formatMatrix(a) + ", expected " + formatMatrix(b)
);
}
function formatMatrix(m) {
if (m.constructor != Array) {
return "(" + [m.a, m.b, m.c, m.d, m.e, m.f].join(", ") + ")";
}
return "(" + m.join(", ") + ")";
}
|