File: transform-test.html

package info (click to toggle)
d3 3.5.17-4
  • links: PTS
  • area: main
  • in suites: bookworm, bullseye, forky, sid, trixie
  • size: 11,464 kB
  • sloc: javascript: 43,334; makefile: 8; xml: 4
file content (88 lines) | stat: -rw-r--r-- 2,139 bytes parent folder | download | duplicates (3)
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
79
80
81
82
83
84
85
86
87
88
<!DOCTYPE html>
<meta charset="utf-8">
<title>Transform Test</title>
<style>

th,
td {
  border: solid #ccc 1px;
}

</style>
<body>
<script src="../../d3.js"></script>
<script>

var outcome = d3.select("body").append("p");

var g = d3.select("body").append("svg")
    .attr("width", 10)
    .attr("height", 10)
  .append("g");

var results = d3.select("body").append("table")
    .style("display", "none");

results.append("tr").selectAll("th")
    .data(["Expected", "Actual", "Expected matrix", "Actual matrix"])
  .enter().append("th")
    .text(function(d) { return d; });

var el = g[0][0],
    v,
    m,
    a,
    b,
    failures = 0;

for (var tx = -10; tx <= 10; tx += 5) {
  for (var ty = -10; ty <= 10; ty += 5) {
    for (var r = -180; r <= 180; r += 15) {
      for (var skx = -45; skx <= 45; skx += 45) {
        for (var sx = -2; sx <= 2; sx++) {
          for (var sy = -2; sy <= 2; sy++) {
            v = "translate(" + tx + "," + ty + ")rotate(" + r + ")skewX(" + skx + ")scale(" + sx + "," + sy + ")";
            g.attr("transform", v);
            a = matrix(el);
            g.attr("transform", d3.transform(v));
            b = matrix(el);
            if (!deepEqual(a, b, 1e-6)) {
              failures++;
              results
                  .style("display", null)
                .append("tr").selectAll("td")
                  .data([v, d3.transform(v), a, b])
                .enter().append("td")
                  .text(function(d) { return d; });
            }
          }
        }
      }
    }
  }
}

outcome.text(failures ? failures + " failures" : "Success!");

function matrix(el) {
  var t = el.transform.baseVal.consolidate();
  if (t) {
    var m = t.matrix;
    return [m.a, m.b, m.c, m.d, m.e, m.f];
  }
  return null;
}

function deepEqual(actual, expected, epsilon) {
  epsilon = epsilon || 0;
  if (actual === expected) return true;
  if (actual == null || expected == null) return false;
  if (actual.length !== expected.length) return false;

  for (var i = 0; i < actual.length; i++) {
    if (Math.abs(actual[i] - expected[i]) > epsilon) return false;
  }
  return true;
}

</script>