describe('PathKit\'s Pathops', function() { // see https://fiddle.skia.org/c/@discrete_path function drawStar(X=128, Y=128, R=116) { let p = PathKit.NewPath(); p.moveTo(X + R, Y); for (let i = 1; i < 8; i++) { let a = 2.6927937 * i; p.lineTo(X + R * Math.cos(a), Y + R * Math.sin(a)); } p.closePath(); return p; } it('pathops_simplify', function(done) { function setup(ctx) { ctx.path = drawStar(); } function test(ctx) { let path = ctx.path.copy().simplify(); path.delete(); } function teardown(ctx) { ctx.path.delete(); } LoadPathKit.then(() => { benchmarkAndReport('pathops_simplify', setup, test, teardown).then(() => { done(); }).catch(reportError(done)); }); }); it('pathops_diff', function(done) { function setup(ctx) { // Values chosen abitrarily to have some overlap and some not. ctx.path1 = drawStar(X=120, Y=120); ctx.path2 = drawStar(X=140, Y=145); } function test(ctx) { let path = PathKit.MakeFromOp(ctx.path1, ctx.path2, PathKit.PathOp.DIFFERENCE); path.delete(); } function teardown(ctx) { ctx.path1.delete(); ctx.path2.delete(); } LoadPathKit.then(() => { benchmarkAndReport('pathops_diff', setup, test, teardown).then(() => { done(); }).catch(reportError(done)); }); }); it('pathops_intersect', function(done) { function setup(ctx) { // Values chosen abitrarily to have some overlap and some not. ctx.path1 = drawStar(X=120, Y=120); ctx.path2 = drawStar(X=140, Y=145); } function test(ctx) { let path = PathKit.MakeFromOp(ctx.path1, ctx.path2, PathKit.PathOp.INTERSECT); path.delete(); } function teardown(ctx) { ctx.path1.delete(); ctx.path2.delete(); } LoadPathKit.then(() => { benchmarkAndReport('pathops_intersect', setup, test, teardown).then(() => { done(); }).catch(reportError(done)); }); }); it('pathops_union', function(done) { function setup(ctx) { // Values chosen abitrarily to have some overlap and some not. ctx.path1 = drawStar(X=120, Y=120); ctx.path2 = drawStar(X=140, Y=145); } function test(ctx) { let path = PathKit.MakeFromOp(ctx.path1, ctx.path2, PathKit.PathOp.UNION); path.delete(); } function teardown(ctx) { ctx.path1.delete(); ctx.path2.delete(); } LoadPathKit.then(() => { benchmarkAndReport('pathops_union', setup, test, teardown).then(() => { done(); }).catch(reportError(done)); }); }); it('pathops_xor', function(done) { function setup(ctx) { // Values chosen abitrarily to have some overlap and some not. ctx.path1 = drawStar(X=120, Y=120); ctx.path2 = drawStar(X=140, Y=145); } function test(ctx) { let path = PathKit.MakeFromOp(ctx.path1, ctx.path2, PathKit.PathOp.XOR); path.delete(); } function teardown(ctx) { ctx.path1.delete(); ctx.path2.delete(); } LoadPathKit.then(() => { benchmarkAndReport('pathops_xor', setup, test, teardown).then(() => { done(); }).catch(reportError(done)); }); }); it('pathops_reverse_diff', function(done) { function setup(ctx) { // Values chosen abitrarily to have some overlap and some not. ctx.path1 = drawStar(X=120, Y=120); ctx.path2 = drawStar(X=140, Y=145); } function test(ctx) { let path = PathKit.MakeFromOp(ctx.path1, ctx.path2, PathKit.PathOp.REVERSE_DIFFERENCE); path.delete(); } function teardown(ctx) { ctx.path1.delete(); ctx.path2.delete(); } LoadPathKit.then(() => { benchmarkAndReport('pathops_reverse_diff', setup, test, teardown).then(() => { done(); }).catch(reportError(done)); }); }); });