• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1describe('PathKit\'s Pathops', function() {
2    // see https://fiddle.skia.org/c/@discrete_path
3    function drawStar(X=128, Y=128, R=116) {
4        let p = PathKit.NewPath();
5        p.moveTo(X + R, Y);
6        for (let i = 1; i < 8; i++) {
7          let a = 2.6927937 * i;
8          p.lineTo(X + R * Math.cos(a), Y + R * Math.sin(a));
9        }
10        p.closePath();
11        return p;
12    }
13
14    it('pathops_simplify', function(done) {
15        function setup(ctx) {
16            ctx.path = drawStar();
17        }
18
19        function test(ctx) {
20            let path = ctx.path.copy().simplify();
21            path.delete();
22        }
23
24        function teardown(ctx) {
25            ctx.path.delete();
26        }
27
28        LoadPathKit.then(() => {
29            benchmarkAndReport('pathops_simplify', setup, test, teardown).then(() => {
30                done();
31            }).catch(reportError(done));
32        });
33    });
34
35    it('pathops_diff', function(done) {
36        function setup(ctx) {
37            // Values chosen abitrarily to have some overlap and some not.
38            ctx.path1 = drawStar(X=120, Y=120);
39            ctx.path2 = drawStar(X=140, Y=145);
40        }
41
42        function test(ctx) {
43            let path = PathKit.MakeFromOp(ctx.path1, ctx.path2, PathKit.PathOp.DIFFERENCE);
44            path.delete();
45        }
46
47        function teardown(ctx) {
48            ctx.path1.delete();
49            ctx.path2.delete();
50        }
51
52        LoadPathKit.then(() => {
53            benchmarkAndReport('pathops_diff', setup, test, teardown).then(() => {
54                done();
55            }).catch(reportError(done));
56        });
57    });
58
59    it('pathops_intersect', function(done) {
60        function setup(ctx) {
61            // Values chosen abitrarily to have some overlap and some not.
62            ctx.path1 = drawStar(X=120, Y=120);
63            ctx.path2 = drawStar(X=140, Y=145);
64        }
65
66        function test(ctx) {
67            let path = PathKit.MakeFromOp(ctx.path1, ctx.path2, PathKit.PathOp.INTERSECT);
68            path.delete();
69        }
70
71        function teardown(ctx) {
72            ctx.path1.delete();
73            ctx.path2.delete();
74        }
75
76        LoadPathKit.then(() => {
77            benchmarkAndReport('pathops_intersect', setup, test, teardown).then(() => {
78                done();
79            }).catch(reportError(done));
80        });
81    });
82
83    it('pathops_union', function(done) {
84        function setup(ctx) {
85            // Values chosen abitrarily to have some overlap and some not.
86            ctx.path1 = drawStar(X=120, Y=120);
87            ctx.path2 = drawStar(X=140, Y=145);
88        }
89
90        function test(ctx) {
91            let path = PathKit.MakeFromOp(ctx.path1, ctx.path2, PathKit.PathOp.UNION);
92            path.delete();
93        }
94
95        function teardown(ctx) {
96            ctx.path1.delete();
97            ctx.path2.delete();
98        }
99
100        LoadPathKit.then(() => {
101            benchmarkAndReport('pathops_union', setup, test, teardown).then(() => {
102                done();
103            }).catch(reportError(done));
104        });
105    });
106
107    it('pathops_xor', function(done) {
108        function setup(ctx) {
109            // Values chosen abitrarily to have some overlap and some not.
110            ctx.path1 = drawStar(X=120, Y=120);
111            ctx.path2 = drawStar(X=140, Y=145);
112        }
113
114        function test(ctx) {
115            let path = PathKit.MakeFromOp(ctx.path1, ctx.path2, PathKit.PathOp.XOR);
116            path.delete();
117        }
118
119        function teardown(ctx) {
120            ctx.path1.delete();
121            ctx.path2.delete();
122        }
123
124        LoadPathKit.then(() => {
125            benchmarkAndReport('pathops_xor', setup, test, teardown).then(() => {
126                done();
127            }).catch(reportError(done));
128        });
129    });
130
131    it('pathops_reverse_diff', function(done) {
132        function setup(ctx) {
133            // Values chosen abitrarily to have some overlap and some not.
134            ctx.path1 = drawStar(X=120, Y=120);
135            ctx.path2 = drawStar(X=140, Y=145);
136        }
137
138        function test(ctx) {
139            let path = PathKit.MakeFromOp(ctx.path1, ctx.path2, PathKit.PathOp.REVERSE_DIFFERENCE);
140            path.delete();
141        }
142
143        function teardown(ctx) {
144            ctx.path1.delete();
145            ctx.path2.delete();
146        }
147
148        LoadPathKit.then(() => {
149            benchmarkAndReport('pathops_reverse_diff', setup, test, teardown).then(() => {
150                done();
151            }).catch(reportError(done));
152        });
153    });
154
155});